ZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9SRUFETUUubWQgYi9hcGktdGVzdHMvUkVBRE1FLm1kCmluZGV4IDk4ZjFiY2QuLmNiNjY0MjEgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9SRUFETUUubWQKKysrIGIvYXBpLXRlc3RzL1JFQURNRS5tZApAQCAtMSwzOCArMSwzNyBAQAogCi0jIFBTQSBBUElzIDogQXJjaGl0ZWN0dXJlIFRlc3QgU3VpdGUKKyMgUFNBIEFQSXMgQXJjaGl0ZWN0dXJlIFRlc3QgU3VpdGUKIAogIyMgSW50cm9kdWN0aW9uCiAKLUFybSBQbGF0Zm9ybSBTZWN1cml0eSBBcmNoaXRlY3R1cmUgKFBTQSkgaXMgYSBob2xpc3RpYyBzZXQgb2YgdGhyZWF0IG1vZGVscywgc2VjdXJpdHkgYW5hbHlzaXMsIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWNhdGlvbnMsIGFuZCBhbiBvcGVuIHNvdXJjZSBmaXJtd2FyZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24uIFBTQSBwcm92aWRlcyBhIHJlY2lwZSwgYmFzZWQgb24gaW5kdXN0cnkgYmVzdCBwcmFjdGljZSwgdGhhdCBhbGxvd3Mgc2VjdXJpdHkgdG8gYmUgY29uc2lzdGVudGx5IGRlc2lnbmVkIGluLCBhdCBib3RoIGEgaGFyZHdhcmUgYW5kIGZpcm13YXJlIGxldmVsLiBPbmUgb2YgdGhlIFBTQSBnb2FscyBpcyB0byBtYWtlIElvVCBzZWN1cml0eSBlYXNpZXIgYW5kIHF1aWNrZXIgZm9yIGV2ZXJ5b25lLiBUaGlzIG1lYW5zIGhhdmluZyByZWxpYWJsZSwgY29uc2lzdGVudCBBUElzIGFuZCB1c2VmdWwgYnVpbHQtaW4gc2VjdXJpdHkgZnVuY3Rpb25zIGZvciBkZXZpY2UgbWFudWZhY3R1cmVycyBhbmQgdGhlIGRldmVsb3BlciBjb21tdW5pdHkuIFRoZXNlIFBTQSBBUElzIHByb3ZpZGVzIGEgY29uc2lzdGVudCBkZXZlbG9wZXIgZXhwZXJpZW5jZSBoaWRpbmcgdGhlIHVuZGVybHlpbmcgY29tcGxleGl0eSBvZiB0aGUgc2VjdXJpdHkgc3lzdGVtLgorQXJtICpQbGF0Zm9ybSBTZWN1cml0eSBBcmNoaXRlY3R1cmUqIChQU0EpIGlzIGEgaG9saXN0aWMgc2V0IG9mIHRocmVhdCBtb2RlbHMsIHNlY3VyaXR5IGFuYWx5c2VzLCBoYXJkd2FyZSBhbmQgZmlybXdhcmUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljYXRpb25zLCBhbmQgYW4gb3BlbiBzb3VyY2UgZmlybXdhcmUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uLiBQU0EgcHJvdmlkZXMgYSByZWNpcGUsIGJhc2VkIG9uIGluZHVzdHJ5IGJlc3QgcHJhY3RpY2UsIHRoYXQgYWxsb3dzIHNlY3VyaXR5IHRvIGJlIGNvbnNpc3RlbnRseSBkZXNpZ25lZCBpbiwgYXQgYm90aCBhIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSBsZXZlbC4gT25lIG9mIHRoZSBQU0EgZ29hbHMgaXMgdG8gbWFrZSBJb1Qgc2VjdXJpdHkgZWFzaWVyIGFuZCBxdWlja2VyIGZvciBldmVyeW9uZS4gVGhpcyBtZWFucyBoYXZpbmcgcmVsaWFibGUsIGNvbnNpc3RlbnQgQVBJcyBhbmQgdXNlZnVsIGJ1aWx0LWluIHNlY3VyaXR5IGZ1bmN0aW9ucyBmb3IgZGV2aWNlIG1hbnVmYWN0dXJlcnMgYW5kIHRoZSBkZXZlbG9wZXIgY29tbXVuaXR5LiBUaGVzZSBQU0EgQVBJcyBwcm92aWRlcyBhIGNvbnNpc3RlbnQgZGV2ZWxvcGVyIGV4cGVyaWVuY2UsIGhpZGluZyB0aGUgdW5kZXJseWluZyBjb21wbGV4aXR5IG9mIHRoZSBzZWN1cml0eSBzeXN0ZW0uCiAKLUZvciBtb3JlIGluZm9ybWF0aW9uLCB2aXNpdCB0aGUgUFNBIHdlYnBhZ2UgW2hlcmVdKGh0dHBzOi8vZGV2ZWxvcGVyLmFybS5jb20vcHJvZHVjdHMvYXJjaGl0ZWN0dXJlL3BsYXRmb3JtLXNlY3VyaXR5LWFyY2hpdGVjdHVyZSkKK0ZvciBtb3JlIGluZm9ybWF0aW9uLCB2aXNpdCB0aGUgW1BTQSBXZWJwYWdlXShodHRwczovL2RldmVsb3Blci5hcm0uY29tL3Byb2R1Y3RzL2FyY2hpdGVjdHVyZS9wbGF0Zm9ybS1zZWN1cml0eS1hcmNoaXRlY3R1cmUpLgogCiAjIyBBcmNoaXRlY3R1cmUgdGVzdCBzdWl0ZQogCi1UaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQXJjaGl0ZWN0dXJlIHRlc3Qgc3VpdGUgY29udGFpbnMgdGVzdHMgZm9yIGZvbGxvd2luZyBQU0EgQVBJcyBzcGVjaWZpY2F0aW9ucy4KLQotVGhlIHRlc3RzIGFyZSBhdmFpbGFibGUgYXMgb3BlbiBzb3VyY2UuIFRoZSB0ZXN0cyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYWJzdHJhY3Rpb24gbGF5ZXJzIGFyZSBhdmFpbGFibGUgd2l0aCBhbiBBcGFjaGUgdjIgbGljZW5zZSBhbGxvd2luZyBmb3IgZXh0ZXJuYWwgY29udHJpYnV0aW9uLgorVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgdGhlIGFyY2hpdGVjdHVyZSB0ZXN0IHN1aXRlIGNvbnRhaW5zIHRlc3RzIGZvciBQU0EgRmlybXdhcmUgRnJhbWV3b3JrIGFuZCBQU0EgRGV2ZWxvcGVyIEFQSXMgc3BlY2lmaWNhdGlvbnMuIFRoZSB0ZXN0cyBhcmUgYXZhaWxhYmxlIGFzIG9wZW4gc291cmNlLiBUaGUgdGVzdHMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGFic3RyYWN0aW9uIGxheWVycyBhcmUgYXZhaWxhYmxlIHdpdGggYW4gQXBhY2hlIHYyLjAgbGljZW5zZSwgYWxsb3dpbmcgZXh0ZXJuYWwgY29udHJpYnV0aW9uLgogCiAjIyMgUFNBIEZpcm13YXJlIEZyYW1ld29yayAoUFNBLUZGKQotVGhlIHRlc3Qgc3VpdGUgZm9yIHRoaXMgc3BlY2lmaWNhdGlvbiBpcyBsb2NhdGVkIGluIHRoZSBmZiBkaXJlY3Rvcnkgb2YgdGhpcyByZXBvc2l0b3J5LiBTZWUgW1BTQSBGaXJtd2FyZSBGcmFtZXdvcmsgUmVhZG1lXShmZi9SRUFETUUubWQpIGZpbGUgZm9yIG1vcmUgZGV0YWlscy4KK1RoZSB0ZXN0IHN1aXRlIGZvciB0aGlzIHNwZWNpZmljYXRpb24gaXMgbG9jYXRlZCBpbiB0aGUgKipmZioqIGRpcmVjdG9yeSBvZiB0aGlzIHJlcG9zaXRvcnkuIFNlZSB0aGUgW1BTQSBGaXJtd2FyZSBGcmFtZXdvcmsgUkVBRE1FXShmZi9SRUFETUUubWQpIGZpbGUgZm9yIG1vcmUgZGV0YWlscy4KIAogIyMjIFBTQSBEZXZlbG9wZXIgQVBJcwotVGhlIHRlc3Qgc3VpdGUgZm9yIHRoaXMgc3BlY2lmaWNhdGlvbiBpcyBsb2NhdGVkIGluIHRoZSBkZXZfYXBpcyBkaXJlY3Rvcnkgb2YgdGhpcyByZXBvc2l0b3J5LiBTZWUgW1BTQSBEZXZlbG9wZXIgQVBJcyBSZWFkbWVdKGRldl9hcGlzL1JFQURNRS5tZCkgZmlsZSBmb3IgbW9yZSBkZXRhaWxzLgorVGhlIHRlc3Qgc3VpdGUgZm9yIHRoaXMgc3BlY2lmaWNhdGlvbiBpcyBsb2NhdGVkIGluIHRoZSAqKmRldl9hcGlzKiogZGlyZWN0b3J5IG9mIHRoaXMgcmVwb3NpdG9yeS4gU2VlIHRoZSBbUFNBIERldmVsb3BlciBBUElzIFJFQURNRV0oZGV2X2FwaXMvUkVBRE1FLm1kKSBmaWxlIGZvciBtb3JlIGRldGFpbHMuCiAKICMjIFJlbGVhc2UgVXBkYXRlCi0gLSBSZWxlYXNlIFZlcnNpb24gLSAwLjgKLSAtIENvZGUgUXVhbGl0eTogUGxlYXNlIHVzZSB0aGlzIG9wcG9ydHVuaXR5IHRvIHN1Z2dlc3QgZW5oYW5jZW1lbnRzIGFuZCBwb2ludCBvdXQgZXJyb3JzLgotIC0gQ3VycmVudCByZWxlYXNlIGNvbnRhaW5zIGZvbGxvd2luZyB0ZXN0czoKLSAxLiBEZXZlbG9wZXIgQVBJcyB0ZXN0IGxpc3Q6CisgLSBSZWxlYXNlIFZlcnNpb246IDAuOQorIC0gQ29kZSBxdWFsaXR5OiBBcm0gd2VsY29tZXMgc3VnZ2VzdGlvbnMgZm9yIGVuaGFuY2VtZW50cyBhbmQgZXJyb3IgY29ycmVjdGlvbnMuCisgLSBUaGlzIHJlbGVhc2UgY29udGFpbnMgZm9sbG93aW5nIHRlc3RzOiA8YnIgLz4KKworMS4gRGV2ZWxvcGVyIEFQSXMgdGVzdCBsaXN0OgogCiB8IFRlc3QgQ2F0ZWdvcnkgICAgICAgICAgICB8IFNwZWNpZmljYXRpb24gVmVyc2lvbiAgICAgICAgICAgICAgICB8IEhlYWRlciBGaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Ci18IENyeXB0byAgICAgICAgICAgICAgICAgICB8IFBTQSBDcnlwdG8gQVBJIDEuMCBCZXRhLTEgICAgICAgICAgICAgICAgICB8IFtjcnlwdG8uaF0oLi4vYXBpLXNwZWNzL2luY2x1ZGUvcHNhL2NyeXB0by5oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IFByb3RlY3RlZCBTdG9yYWdlICAgICAgICB8IFBTQSBQcm90ZWN0ZWQgU3RvcmFnZSBBUEkgMS4wICAgICAgIHwgW3Byb3RlY3RlZF9zdG9yYWdlLmhdKC4uL2FwaS1zcGVjcy9pbmNsdWRlL3BzYS9wcm90ZWN0ZWRfc3RvcmFnZS5oKSAgICAgICAgICAgICAgIHwKLXwgSW50ZXJuYWwgVHJ1c3RlZCBTdG9yYWdlIHwgUFNBIEludGVybmFsIFRydXN0ZWQgU3RvcmFnZSBBUEkgMS4wIHwgW2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS5oXSguLi9hcGktc3BlY3MvaW5jbHVkZS9wc2EvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlLmgpIHwKLXwgSW5pdGlhbCBBdHRlc3RhdGlvbiAgICAgIHwgUFNBIEluaXRpYWwgQXR0ZXN0YXRpb24gQVBJIDEuMCBCZXRhLTAgICAgIHwgW2luaXRpYWxfYXR0ZXN0YXRpb24uaF0oLi4vYXBpLXNwZWNzL2luY2x1ZGUvcHNhL2luaXRpYWxfYXR0ZXN0YXRpb24uaCkgICAgICAgICAgIHwKK3wgQ3J5cHRvICAgICAgICAgICAgICAgICAgIHwgUFNBIENyeXB0byBBUEkgMS4wLUJldGEoW21iZWRjcnlwdG8tMS4wLjBdKGh0dHBzOi8vZ2l0aHViLmNvbS9BUk1tYmVkL21iZWQtY3J5cHRvL3RyZWUvbWJlZGNyeXB0by0xLjAuMCkpICAgICAgICAgICAgICAgICAgfCBbY3J5cHRvLmhdKC4uL2FwaS1zcGVjcy9pbmNsdWRlL3BzYS9jcnlwdG8uaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBQcm90ZWN0ZWQgU3RvcmFnZSAgICAgICAgfCBQU0EgUHJvdGVjdGVkIFN0b3JhZ2UgQVBJIDEuMC1CZXRhMiAgICAgICB8IFtwcm90ZWN0ZWRfc3RvcmFnZS5oXSguLi9hcGktc3BlY3MvaW5jbHVkZS9wc2EvcHJvdGVjdGVkX3N0b3JhZ2UuaCkgICAgICAgICAgICAgICB8Cit8IEludGVybmFsIFRydXN0ZWQgU3RvcmFnZSB8IFBTQSBJbnRlcm5hbCBUcnVzdGVkIFN0b3JhZ2UgQVBJIDEuMC1CZXRhMiB8IFtpbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UuaF0oLi4vYXBpLXNwZWNzL2luY2x1ZGUvcHNhL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS5oKSB8Cit8IEluaXRpYWwgQXR0ZXN0YXRpb24gICAgICB8IFBTQSBJbml0aWFsIEF0dGVzdGF0aW9uIEFQSSAxLjAtQmV0YTAgICAgIHwgW2luaXRpYWxfYXR0ZXN0YXRpb24uaF0oLi4vYXBpLXNwZWNzL2luY2x1ZGUvcHNhL2luaXRpYWxfYXR0ZXN0YXRpb24uaCkgICAgICAgICAgIHwKIAotMi4gUFNBLUZGICoqSVBDIHRlc3RzKiogdGhhdCBhcmUgd3JpdHRlbiBmb3IgdmVyc2lvbiAxLjAtQmV0YS0wIG9mIHRoZSBQU0EgRkYgc3BlY2lmaWNhdGlvbi4KKzIuIFBTQS1GRiB0ZXN0cyB0aGF0IGFyZSB3cml0dGVuIGZvciB2ZXJzaW9uIDEuMC1CZXRhMSBvZiB0aGUgUFNBIEZGIHNwZWNpZmljYXRpb24uCiAKICMjIExpY2Vuc2UKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL1JFQURNRS5tZCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9SRUFETUUubWQKaW5kZXggNGFkYTM5ZS4uNTE4ZmU2MCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL1JFQURNRS5tZAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvUkVBRE1FLm1kCkBAIC0xLDM0ICsxLDI2IEBACiAKLSMgUFNBIERldmVsb3BlciBBUElzIDogQXJjaGl0ZWN0dXJlIFRlc3QgU3VpdGUKKyMgUFNBIERldmVsb3BlciBBUElzIEFyY2hpdGVjdHVyZSBUZXN0IFN1aXRlCiAKLSMjIEludHJvZHVjdGlvbgorIyMgUFNBIERldmVsb3BlciBBUElzCiAKLSMjIyBQU0EgRGV2ZWxvcGVyIEFQSXMKK1BTQSBkZWZpbmVzIHNlY3VyaXR5IHNlcnZpY2UgQVBJcyBmb3IgYXBwbGljYXRpb24gZGV2ZWxvcGVycy4gU29tZSBvZiB0aGVzZSBzZXJ2aWNlcyBhcmUgQ3J5cHRvLCBBdHRlc3RhdGlvbiwgYW5kIFNlY3VyZSBzdG9yYWdlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBBUEkgc3BlY2lmaWNhdGlvbnMsIHJlZmVyIHRvIHRoZSBbUFNBIERldmVsb3BlciBBUElzIFNwZWNpZmljYXRpb25zXSguLi8uLi9hcGktc3BlY3MvKS4KIAotUFNBIGRlZmluZXMgc2VjdXJpdHkgc2VydmljZSBBUElzIGZvciBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzLiBTb21lIG9mIHRoZXNlIHNlcnZpY2VzIGFyZSBDcnlwdG8gU2VydmljZXMsIEF0dGVzdGF0aW9uIFNlcnZpY2VzLCBhbmQgU2VjdXJlIFN0b3JhZ2UgU2VydmljZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEFQSSBzcGVjaWZpY2F0aW9uLCByZWZlciB0aGUgW1BTQSBEZXZlbG9wZXIgZmFjaW5nIEFQSXMgc3BlY2lmaWNhdGlvbnNdKC4uLy4uL2FwaS1zcGVjcy8pCisjIyBBcmNoaXRlY3R1cmUgdGVzdCBzdWl0ZQogCi0jIyMgQXJjaGl0ZWN0dXJlIFRlc3QgU3VpdGUKK1RoZSBhcmNoaXRlY3R1cmUgdGVzdCBzdWl0ZSBpcyBhIHNldCBvZiBleGFtcGxlcyBvZiB0aGUgaW52YXJpYW50IGJlaGF2aW9ycyB0aGF0IGFyZSBzcGVjaWZpZWQgaW4gdGhlIFBTQSBEZXZlbG9wZXIgQVBJcyBzcGVjaWZpY2F0aW9ucy4gVXNlIHRoaXMgc3VpdGUgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlc2UgYmVoYXZpb3JzIGFyZSBpbXBsZW1lbnRlZCBjb3JyZWN0bHkgaW4geW91ciBzeXN0ZW0uIFRoaXMgIHN1aXRlIGNvbnRhaW5zIHNlbGYtY2hlY2tpbmcgYW5kIHBvcnRhYmxlIEMtYmFzZWQgdGVzdHMgd2l0aCBkaXJlY3RlZCBzdGltdWx1cy4gVGhlc2UgdGVzdHMgYXJlIGF2YWlsYWJsZSBhcyBvcGVuIHNvdXJjZS4gVGhlIHRlc3RzIGFuZCB0aGUgY29ycmVzcG9uZGluZyBhYnN0cmFjdGlvbiBsYXllcnMgYXJlIGF2YWlsYWJsZSB3aXRoIGFuIEFwYWNoZSB2Mi4wIGxpY2Vuc2UsIGFsbG93aW5nIGV4dGVybmFsIGNvbnRyaWJ1dGlvbi4KIAotVGhlIEFyY2hpdGVjdHVyZSBUZXN0IFN1aXRlIGlzIGEgc2V0IG9mIGV4YW1wbGVzIG9mIHRoZSBpbnZhcmlhbnQgYmVoYXZpb3VycyB0aGF0IGFyZSBzcGVjaWZpZWQgYnkgdGhlIFBTQSBEZXZlbG9wZXIgQVBJcyBTcGVjaWZpY2F0aW9ucy4gVXNlIHRoaXMgc3VpdGUgdG8gdmVyaWZ5IHRoYXQgdGhlc2UgYmVoYXZpb3VycyBhcmUgaW1wbGVtZW50ZWQgY29ycmVjdGx5IGluIHlvdXIgc3lzdGVtLgorVGhpcyB0ZXN0IHN1aXRlIGlzIG5vdCBhIHN1YnN0aXR1dGUgZm9yIGRlc2lnbiB2ZXJpZmljYXRpb24uIFRvIHJldmlldyB0aGUgdGVzdCBsb2dzLCBBcm0gbGljZW5zZWVzIGNhbiBjb250YWN0IEFybSBkaXJlY3RseSB0aHJvdWdoIHRoZWlyIHBhcnRuZXIgbWFuYWdlcnMuCiAKLVRoZSBBcmNoaXRlY3R1cmUgVGVzdCBTdWl0ZSBjb250YWlucyB0aGUgdGVzdHMgdGhhdCBhcmUgc2VsZi1jaGVja2luZywgcG9ydGFibGUgQy1iYXNlZCB0ZXN0cyB3aXRoIGRpcmVjdGVkIHN0aW11bHVzLgorRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGFyY2hpdGVjdHVyZSB0ZXN0IHN1aXRlIGZyYW1ld29yayBhbmQgbWV0aG9kb2xvZ3kgdG8gcnVuIHRoZSB0ZXN0cywgcmVmZXIgdG8gdGhlIFtWYWxpZGF0aW9uIE1ldGhvZG9sb2d5XSguLi9kb2NzL0FybV9QU0FfQVBJc19BcmNoX1Rlc3RfVmFsaWRhdGlvbl9NZXRob2RvbG9neS5wZGYpIGRvY3VtZW50LgogCi1UaGUgdGVzdHMgYXJlIGF2YWlsYWJsZSBhcyBvcGVuIHNvdXJjZS4gVGhlIHRlc3RzIGFuZCB0aGUgY29ycmVzcG9uZGluZyBhYnN0cmFjdGlvbiBsYXllcnMgYXJlIGF2YWlsYWJsZSB3aXRoIGFuIEFwYWNoZSB2Mi4wIGxpY2Vuc2UgYWxsb3dpbmcgZm9yIGV4dGVybmFsIGNvbnRyaWJ1dGlvbi4gVGhpcyB0ZXN0IHN1aXRlIGlzIG5vdCBhIHN1YnN0aXR1dGUgZm9yIGRlc2lnbiB2ZXJpZmljYXRpb24uIFRvIHJldmlldyB0aGUgdGVzdCBsb2dzLCBBcm0gbGljZW5zZWVzIGNhbiBjb250YWN0IEFybSBkaXJlY3RseSB0aHJvdWdoIHRoZWlyIHBhcnRuZXIgbWFuYWdlcnMuCisjIyBUZXN0IHNjZW5hcmlvcwogCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBBcmNoaXRlY3R1cmUgVGVzdCBTdWl0ZSBzcGVjaWZpY2F0aW9uLCByZWZlciB0aGUgW1ZhbGlkYXRpb24gTWV0aG9kb2xvZ3ldKC4uL2RvY3MvQXJtX1BTQV9BUElzX0FyY2hfVGVzdF9WYWxpZGF0aW9uX01ldGhvZG9sb2d5LnBkZikgZG9jdW1lbnQuCi0KLSMjIFRlc3RzIFNjZW5hcmlvcwotCi1UaGUgbWFwcGluZyBvZiB0aGUgcnVsZXMgaW4gdGhlIHNwZWNpZmljYXRpb24gdG8gdGhlIHRlc3QgY2FzZXMgYW5kIHRoZSBzdGVwcyBmb2xsb3dlZCBpbiB0aGUgdGVzdHMgYXJlIG1lbnRpb25lZCBpbiB0aGUgW1NjZW5hcmlvIGRvY3VtZW50XSguLi9kb2NzLykgcHJlc2VudCBpbiB0aGUgZG9jcy8gZm9sZGVyLgorVGhlIG1hcHBpbmcgb2YgdGhlIHJ1bGVzIGluIHRoZSBzcGVjaWZpY2F0aW9uIHRvIHRoZSB0ZXN0IGNhc2VzIGFuZCB0aGUgc3RlcHMgZm9sbG93ZWQgaW4gdGhlIHRlc3RzIGFyZSBtZW50aW9uZWQgaW4gdGhlIFtTY2VuYXJpbyBEb2N1bWVudF0oLi4vZG9jcy8pIHRoYXQgaXMgcHJlc2VudCBpbiB0aGUgKipkb2NzLyoqIGZvbGRlci4KIAogCi0jIyBHZXR0aW5nIFN0YXJ0ZWQKKyMjIEdldHRpbmcgc3RhcnRlZAogCi1Gb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgc3Vic2VxdWVudCBzZWN0aW9ucyB0byBnZXQgYSBjb3B5IG9mIHRoZSBzb3VyY2UgY29kZSBvbiB5b3VyIGxvY2FsIG1hY2hpbmUgYW5kIGJ1aWxkIHRoZSB0ZXN0cy4gPGJyIC8+Ci0KLSMjIyBQcmVyZXF1aXNpdGUKLQotUGxlYXNlIG1ha2Ugc3VyZSB5b3UgaGF2ZSBhbGwgcmVxdWlyZWQgc29mdHdhcmUgaW5zdGFsbGVkIGFzIGV4cGxhaW5lZCBpbiB0aGUgW3NvZnR3YXJlIHJlcXVpcmVtZW50c10oLi4vZG9jcy9zd19yZXF1aXJlbWVudHMubWQpLgorRm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgaW4gdGhlIHN1YnNlcXVlbnQgc2VjdGlvbnMgdG8gZ2V0IGEgY29weSBvZiB0aGUgc291cmNlIGNvZGUgb24geW91ciBsb2NhbCBtYWNoaW5lIGFuZCBidWlsZCB0aGUgdGVzdHMuIE1ha2Ugc3VyZSB5b3UgaGF2ZSBhbGwgcmVxdWlyZWQgc29mdHdhcmUgaW5zdGFsbGVkIGFzIGV4cGxhaW5lZCBpbiB0aGUgW1NvZnR3YXJlIFJlcXVpcmVtZW50cyBEb2N1bWVudF0oLi4vZG9jcy9zd19yZXF1aXJlbWVudHMubWQpLgogCiAjIyMgUG9ydGluZyBzdGVwcwogCkBAIC0zNiw0OSArMjgsNTEgQEAKIAogIyMjIEJ1aWxkIHN0ZXBzCiAKLVRvIGJ1aWxkIHRlc3Qgc3VpdGUgZm9yIGEgZ2l2ZW4gcGxhdGZvcm0sIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKK1RvIGJ1aWxkIHRoZSB0ZXN0IHN1aXRlIGZvciB5b3VyIHRhcmdldCBwbGF0Zm9ybSwgZXhlY3V0ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgogCiBgYGAKIGNkIGFwaS10ZXN0cwotLi90b29scy9zY3JpcHRzL3NldHVwLnNoIC0tdGFyZ2V0IDxwbGF0Zm9ybV9uYW1lPiAtLWNwdV9hcmNoIDxjcHVfYXJjaGl0ZWN0dXJlX3ZlcnNpb24+IC0tc3VpdGUgPHN1aXRlX25hbWU+ICAtLWJ1aWxkIDxidWlsZF9kaXI+IC0taW5jbHVkZSA8aW5jbHVkZV9wYXRoPgorLi90b29scy9zY3JpcHRzL3NldHVwLnNoIC0tdGFyZ2V0IDxwbGF0Zm9ybV9uYW1lPiAtLWNwdV9hcmNoIDxjcHVfYXJjaGl0ZWN0dXJlX3ZlcnNpb24+IC0tc3VpdGUgPHN1aXRlX25hbWU+ICAtLWJ1aWxkIDxidWlsZF9kaXI+IC0taW5jbHVkZSA8aW5jbHVkZV9wYXRoPiAtLWFyY2hpdmVfdGVzdHMKIGBgYAogPGJyIC8+ICB3aGVyZToKIAotLSAgIDxwbGF0Zm9ybV9uYW1lPiBpcyB0aGUgc2FtZSBhcyB0aGUgbmFtZSBvZiB0aGUgdGFyZ2V0IHNwZWNpZmljIGRpcmVjdG9yeSBjcmVhdGVkIGluIHRoZSBwbGF0Zm9ybS90YXJnZXRzLyBkaXJlY3RvcnkuICA8YnIgLz4KLS0gICA8Y3B1X2FyY2hpdGVjdHVyZV92ZXJzaW9uPiBpcyB0aGUgQXJtIEFyY2hpdGVjdHVyZSB2ZXJzaW9uIG5hbWUgZm9yIHdoaWNoIHRlc3QgYmluYXJpZXMgc2hvdWxkIGJlIGNvbXBpbGVkLiBGb3IgZXhhbXBsZSwgQXJtdjdNLCBBcm12OE0tQmFzZWxpbmUgYW5kIEFybXY4TS1NYWlubGluZSBBcmNoaXRlY3R1cmUuICA8YnIgLz4KLS0gICA8c3VpdGVfbmFtZT4gaXMgdGhlIHN1aXRlIG5hbWUgYW5kIGl0IGlzIHNhbWUgYXMgdGhlIHN1aXRlIG5hbWUgYXZhaWxhYmxlIGluIHRlc3Rfc3VpdGVzLyBkaXJlY3RvcnkuIDxiciAvPgotLSAgIDxpbmNsdWRlX3BhdGg+IGlzIGFuIGFkZGl0aW9uYWwgZGlyZWN0b3J5IHRvIGJlIGluY2x1ZGVkIGludG8gY29tcGlsZXIgc2VhcmNoIHBhdGguIE5vdGUtIFlvdSBtdXN0IHByb3ZpZGUgRGV2ZWxvcGVyIEFQSXMgaGVhZGVyIGZpbGUgaW1wbGVtZW50YXRpb24gdG8gVGVzdCBTdWl0ZSBidWlsZCBzeXN0ZW0gdXNpbmcgdGhpcyBvcHRpb24uIEZvciBleGFtcGxlIC0gVG8gY29tcGlsZXIgQ3J5cHRvIHRlc3RzLCBpbmNsdWRlIHBhdGggbXVzdCBwb2ludCB0byBwYXRoIHdoZXJlICJwc2EvY3J5cHRvLmgiIGlzIGxvY2F0ZWQgaW4geW91ciBidWlsZCBzeXN0ZW0uPGJyIC8+Ci0tICAgPGJ1aWxkX2Rpcj4gaXMgYW4gb3V0cHV0IGRpcmVjdG9yeSB0byBrZWVwIGJ1aWxkIGZpbGVzLgorLSAgIDxwbGF0Zm9ybV9uYW1lPiBpcyB0aGUgc2FtZSBhcyB0aGUgbmFtZSBvZiB0aGUgdGFyZ2V0LXNwZWNpZmljIGRpcmVjdG9yeSBjcmVhdGVkIGluIHRoZSAqKnBsYXRmb3JtL3RhcmdldHMvKiogZGlyZWN0b3J5LiAgPGJyIC8+CistICAgPGNwdV9hcmNoaXRlY3R1cmVfdmVyc2lvbj4gaXMgdGhlIEFybSBBcmNoaXRlY3R1cmUgdmVyc2lvbiBuYW1lIGZvciB3aGljaCB0aGUgdGVzdHMgc2hvdWxkIGJlIGNvbXBpbGVkLiBGb3IgZXhhbXBsZSwgQXJtdjdNLCBBcm12OE0tQmFzZWxpbmUgYW5kIEFybXY4TS1NYWlubGluZSBBcmNoaXRlY3R1cmUuICA8YnIgLz4KKy0gICA8c3VpdGVfbmFtZT4gaXMgdGhlIHN1aXRlIG5hbWUgdGhhdCBpcyB0aGUgc2FtZSBhcyB0aGUgc3VpdGUgbmFtZSBhdmFpbGFibGUgaW4gKipkZXZfYXBpcy8qKiBkaXJlY3RvcnkuIDxiciAvPgorLSAgIDxidWlsZF9kaXI+IGlzIGEgZGlyZWN0b3J5IHRvIHN0b3JlIGJ1aWxkIG91dHB1dCBmaWxlcy4gPGJyIC8+CistICAgPGluY2x1ZGVfcGF0aD4gaXMgYW4gYWRkaXRpb25hbCBkaXJlY3RvcnkgdG8gYmUgaW5jbHVkZWQgaW50byB0aGUgY29tcGlsZXIgc2VhcmNoIHBhdGguIDxiciAvPgorTm90ZTogWW91IG11c3QgcHJvdmlkZSBEZXZlbG9wZXIgQVBJcyBoZWFkZXIgZmlsZSBpbXBsZW1lbnRhdGlvbiB0byB0aGUgdGVzdCBzdWl0ZSBidWlsZCBzeXN0ZW0gdXNpbmcgdGhpcyBvcHRpb24uIEZvciBleGFtcGxlLCB0byBjb21waWxlIENyeXB0byB0ZXN0cywgdGhlIGluY2x1ZGUgcGF0aCBtdXN0IHBvaW50IHRvIHRoZSBwYXRoIHdoZXJlICoqcHNhL2NyeXB0by5oKiogaXMgbG9jYXRlZCBpbiB5b3VyIGJ1aWxkIHN5c3RlbS48YnIgLz4KKy0gIFVzZSAqKi0tYXJjaGl2ZV90ZXN0cyoqIG9wdGlvbiB0byBjcmVhdGUgYSBjb21iaW5lZCB0ZXN0IGFyY2hpdmUgKCoqdGVzdF9jb21iaW5lLmEqKikgZmlsZSBieSBjb21iaW5pbmcgYXZhaWxhYmxlIHRlc3Qgb2JqZWN0IGZpbGVzLiBBYnNlbmNlIG9mIHRoaXMgb3B0aW9uIGNyZWF0ZXMgYSBjb21iaW5lZCB0ZXN0IGJpbmFyeSAoKip0ZXN0X2VsZl9jb21iaW5lLmJpbioqKSBieSBjb21iaW5pbmcgdGhlIGF2YWlsYWJsZSB0ZXN0IEVMRiBmaWxlcy4KIAotUmVmZXIgLi90b29scy9zY3JpcHRzL3NldHVwLnNoIC0taGVscCB0byBrbm93IG1vcmUgYWJvdXQgb3B0aW9ucy4KK0ZvciBkZXRhaWxzIGFib3V0IG9wdGlvbnMsIHJlZmVyIHRvICoqLi90b29scy9zY3JpcHRzL3NldHVwLnNoIC0taGVscCoqLgogCi0qVG8gY29tcGlsZSBjcnlwdG8gdGVzdHMgZm9yIHRndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQgcGxhdGZvcm0qCitUbyBjb21waWxlIENyeXB0byB0ZXN0cyBmb3IgKip0Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200KiogcGxhdGZvcm0sIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKIGBgYAogY2QgYXBpLXRlc3RzCi0uL3Rvb2xzL3NjcmlwdHMvc2V0dXAuc2ggLS10YXJnZXQgdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNCAtLWNwdV9hcmNoIGFybXY3bSAtLXN1aXRlIGNyeXB0byAtLWJ1aWxkIEJVSUxEX0NSWVBUTyAtLWluY2x1ZGUgPGluY2x1ZGVfcGF0aD4KKy4vdG9vbHMvc2NyaXB0cy9zZXR1cC5zaCAtLXRhcmdldCB0Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200IC0tY3B1X2FyY2ggYXJtdjdtIC0tc3VpdGUgY3J5cHRvIC0tYnVpbGQgQlVJTERfQ1JZUFRPIC0taW5jbHVkZSA8aW5jbHVkZV9wYXRoPiAgLS1hcmNoaXZlX3Rlc3RzCiBgYGAKIAogIyMjIEJ1aWxkIG91dHB1dAotVGVzdCBzdWl0ZSBidWlsZCBnZW5lcmF0ZXMgZm9sbG93aW5nIGJpbmFyaWVzOjxiciAvPgorQnVpbGRpbmcgdGhlIHRlc3Qgc3VpdGUgZ2VuZXJhdGVzIHRoZSBmb2xsb3dpbmcgTlNQRSBiaW5hcmllczo8YnIgLz4KKy0gKio8YnVpbGRfZGlyPi9CVUlMRC92YWwvdmFsX25zcGUuYSoqCistICoqPGJ1aWxkX2Rpcj4vQlVJTEQvcGxhdGZvcm0vcGFsX25zcGUuYSoqCistICoqPGJ1aWxkX2Rpcj4vQlVJTEQvZGV2X2FwaXMvPHN1aXRlX25hbWU+L3Rlc3RfY29tYmluZS5hKioKIAotTlNQRSBsaWJyYXJpZXM6PGJyIC8+Ci0xLiA8YnVpbGRfZGlyPi9CVUlMRC92YWwvdmFsX25zcGUuYQotMi4gPGJ1aWxkX2Rpcj4vQlVJTEQvcGxhdGZvcm0vcGFsX25zcGUuYQotMy4gPGJ1aWxkX2Rpcj4vQlVJTEQvZGV2X2FwaXMvPHN1aXRlX25hbWU+L3Rlc3RfZWxmX2NvbWJpbmUuYmluCisjIyMgSW50ZWdyYXRpbmcgdGhlIGxpYnJhcmllcyBpbnRvIHlvdXIgdGFyZ2V0IHBsYXRmb3JtCiAKLSMjIyBCaW5hcmllcyBpbnRlZ3JhdGlvbiBpbnRvIHlvdXIgcGxhdGZvcm0KKzEuIEludGVncmF0ZSAqKnZhbF9uc3BlLmEqKiwgKipwYWxfbnNwZS5hKiosIGFuZCAqKnRlc3RfY29tYmluZS5hKiogbGlicmFyaWVzIHdpdGggeW91ciBOb24tc2VjdXJlIE9TIHNvIHRoYXQgdGhlc2UgbGlicmFyaWVzIGdldCBhY2Nlc3MgdG8gdGhlIFBTQSBEZXZlbG9wZXIgQVBJcy4gRm9yIGV4YW1wbGUsIENyeXB0byB0ZXN0cyByZXF1aXJlIGFjY2VzcyB0byBQU0EgQ3J5cHRvIEFQSXMuIFRoaXMgZm9ybXMgYW4gTlNQRSBiaW5hcnkuCisyLiBMb2FkIHRoZSBOU1BFIGJpbmFyeSB0byB0aGUgTm9uLXNlY3VyZSBtZW1vcnkuCiszLiBCdWlsZCB5b3VyIFNQRSBiaW5hcnkgYW5kIGxvYWQgaW50byB0aGUgU2VjdXJlIG1lbW9yeS4KIAotMS4gSW50ZWdyYXRlIHZhbF9uc3BlLmEgYW5kIHBhbF9uc3BlLmEgbGlicmFyaWVzIHdpdGggeW91ciBub24tc2VjdXJlIE9TIHNvIHRoYXQgdGhlc2UgbGlicmFyaWVzIGdldCBhY2Nlc3MgdG8gUFNBIERldmVsb3BlciBBUElzLiBGb3IgZXhhbXBsZSwgIENyeXB0byB0ZXN0cyB3b3VsZCByZXF1aXJlIHRvIGdldCBhY2Nlc3MgdG8gUFNBIENyeXB0byBBUElzLiBUaGlzIHdpbGwgZm9ybSBhIE5TUEUgYmluYXJ5LgotMi4gTG9hZCBOU1BFIGJpbmFyeSBhbmQgdGVzdF9lbGZfY29tYmluZS5iaW4gdG8gTlMgbWVtb3J5Ci0zLiBCdWlsZCB5b3VyIFNQRSBiaW5hcnkgYW5kIGxvYWQgaW50byBTIG1lbW9yeQorIyMgVGVzdCBzdWl0ZSBleGVjdXRpb24KK1RoZSBmb2xsb3dpbmcgc3RlcHMgZGVzY3JpYmUgdGhlIGV4ZWN1dGlvbiBmbG93IGJlZm9yZSB0aGUgdGVzdCBleGVjdXRpb246IDxiciAvPgogCi0jIyBUZXN0IFN1aXRlIEV4ZWN1dGlvbgotVGhlIGZvbGxvd2luZyBzdGVwcyBkZXNjcmliZSB0aGUgZXhlY3V0aW9uIGZsb3cgcHJpb3IgdG8gdGhlIHN0YXJ0IG9mIHRlc3QgZXhlY3V0aW9uOiA8YnIgLz4KLQotMS4gVGhlIHRhcmdldCBwbGF0Zm9ybSBtdXN0IGxvYWQgYWJvdmUgYmluYXJpZXMgaW50byBhcHByb3ByaWF0ZSBtZW1vcnkuIDxiciAvPgotMy4gVXBvbiBib290aW5nIGZpcm13YXJlIGFuZCBub24tc2VjdXJlIE9TLCB0aGUgU1VUIC0gYm9vdCBzb2Z0d2FyZSB3b3VsZCBnaXZlIGNvbnRyb2wgdG8gdGhlIHRlc3Qgc3VpdGUgZW50cnkgcG9pbnQtICp2b2lkIHZhbF9lbnRyeSh2b2lkKTsqIGFzIGFuIG5vbi1zZWN1cmUgYXBwbGljYXRpb24gZW50cnkgcG9pbnQuIDxiciAvPgorMS4gVGhlIHRhcmdldCBwbGF0Zm9ybSBtdXN0IGxvYWQgdGhlIGFib3ZlIGJpbmFyaWVzIGludG8gYXBwcm9wcmlhdGUgbWVtb3J5LiA8YnIgLz4KKzMuIFVwb24gYm9vdGluZyBmaXJtd2FyZSBhbmQgTm9uLXNlY3VyZSBPUywgdGhlIFNVVCBib290IHNvZnR3YXJlIGdpdmVzIGNvbnRyb2wgdG8gdGhlIHRlc3Qgc3VpdGUgZW50cnkgcG9pbnQgdm9pZCAqKnZhbF9lbnRyeSh2b2lkKTsqKiBhcyBhbiBOb24tc2VjdXJlIGFwcGxpY2F0aW9uIGVudHJ5IHBvaW50LiA8YnIgLz4KIDQuIFRoZSB0ZXN0cyBhcmUgZXhlY3V0ZWQgc2VxdWVudGlhbGx5IGluIGEgbG9vcCBpbiB0aGUgdGVzdF9kaXNwYXRjaGVyIGZ1bmN0aW9uLiA8YnIgLz4KIAorRm9yIGRldGFpbHMgb24gdGVzdCBzdWl0ZSBpbnRlZ3JhdGlvbiwgcmVmZXIgdG8gdGhlICoqSW50ZWdyYXRpbmcgdGhlIHRlc3Qgc3VpdGUgd2l0aCB0aGUgU1VUKiogc2VjdGlvbiBvZiBbVmFsaWRhdGlvbiBNZXRob2RvbG9neV0oLi4vZG9jcy9Bcm1fUFNBX0FQSXNfQXJjaF9UZXN0X1ZhbGlkYXRpb25fTWV0aG9kb2xvZ3kucGRmKS4KKwogIyMgTGljZW5zZQogCiBBcm0gUFNBIHRlc3Qgc3VpdGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgQXBhY2hlIHYyLjAgTGljZW5zZS4KQEAgLTk0LDQgKzg4LDMgQEAKIC0tLS0tLS0tLS0tLS0tCiAKICpDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgYW5kIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4qCi0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDAyL3Rlc3RfYzAwMi5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDIvdGVzdF9jMDAyLmMKaW5kZXggMTllMWM0NC4uZTVjMTVhNSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDIvdGVzdF9jMDAyLmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDIvdGVzdF9jMDAyLmMKQEAgLTEzOSw2ICsxMzksMTAgQEAKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKICAgICAgICAgfQorCisgICAgICAgIC8qIERlc3Ryb3kgdGhlIGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0RFU1RST1lfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTMpKTsKICAgICB9CiAKICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOwpAQCAtMTg1LDcgKzE4OSw3IEBACiAgICAgICAgIC8qIEltcG9ydCB0aGUga2V5IGRhdGEgaW50byB0aGUgb2NjdXBpZWQga2V5IHNsb3QgKi8KICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTVBPUlRfS0VZLCBjaGVjazJbaV0ua2V5X2hhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X3R5cGUsIGNoZWNrMltpXS5rZXlfZGF0YSwgY2hlY2syW2ldLmtleV9sZW5ndGgpOwotICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9PQ0NVUElFRF9TTE9ULCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfQUxSRUFEWV9FWElTVFMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOwogCiAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfaW1wb3J0X2tleSB3aXRoIHplcm8gYXMga2V5IGhhbmRsZVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDIvdGVzdF9kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwMi90ZXN0X2RhdGEuaAppbmRleCBhYWE2ODQwLi4wYjJmYWVhIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwMi90ZXN0X2RhdGEuaAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwMi90ZXN0X2RhdGEuaApAQCAtMTY2LDcgKzE2Niw3IEBACiAjaWZkZWYgQVJDSF9URVNUX0FFU18xMjgKIHsiVGVzdCBwc2FfaW1wb3J0X2tleSAxNiBCeXRlIEFFU1xuIiwgMSwgUFNBX0tFWV9UWVBFX0FFUywKIHsweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAotIDB4NUYsIDB4Qzl9LAorIDB4NUYsIDB4QzksIDB4Nzd9LAogIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NUUiwKICBCWVRFU19UT19CSVRTKEFFU18xNkJfS0VZX1NJWkUpLCBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfU1VDQ0VTUwogfSwKQEAgLTE3NSw3ICsxNzUsNyBAQAogI2lmZGVmIEFSQ0hfVEVTVF9BRVNfMTkyCiB7IlRlc3QgcHNhX2ltcG9ydF9rZXkgMjQgQnl0ZSBBRVNcbiIsIDIsIFBTQV9LRVlfVFlQRV9BRVMsCiB7MHgyNCwgMHgxMywgMHg2MSwgMHg0NywgMHg2MSwgMHhCOCwgMHhDOCwgMHhGMCwgMHhERiwgMHhBQiwgMHg1QSwgMHgwRSwgMHg4NywKLSAweDQwLCAweEFDLCAweEEzLCAweDkwLCAweDc3LCAweDgzLCAweDUyLCAweDMxLCAweDc0LCAweEY5fSwKKyAweDQwLCAweEFDLCAweEEzLCAweDkwLCAweDc3LCAweDgzLCAweDUyLCAweDMxLCAweDc0LCAweEY5LCAweDA1fSwKICBBRVNfMjRCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19DVFIsCiAgQllURVNfVE9fQklUUyhBRVNfMjRCX0tFWV9TSVpFKSwgQUVTXzI0Ql9LRVlfU0laRSwgUFNBX1NVQ0NFU1MKIH0sCkBAIC0yNjksNyArMjY5LDcgQEAKIAogeyJUZXN0IHBzYV9pbXBvcnRfa2V5IHdpdGggaW5jb3JyZWN0IGtleSBkYXRhIHNpemVcbiIsIDEyLCBQU0FfS0VZX1RZUEVfQUVTLAogezB4MjQsIDB4MTMsIDB4NjEsIDB4NDcsIDB4NjEsIDB4QjgsIDB4QzgsIDB4RjAsIDB4REYsIDB4QUIsIDB4NUEsIDB4MEUsIDB4ODcsCi0gMHg0MCwgMHhBQywgMHhBMywgMHg5MH0sCisgMHg0MCwgMHhBQywgMHhBMywgMHg5MCwgMHg3N30sCiBBRVNfMThCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19DVFIsCiBCWVRFU19UT19CSVRTKEFFU18xOEJfS0VZX1NJWkUpLCBBRVNfMThCX0tFWV9TSVpFLCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVAogfSwKQEAgLTI3Nyw3ICsyNzcsNyBAQAogCiB7IlRlc3QgcHNhX2ltcG9ydF9rZXkgd2l0aCBpbmNvcnJlY3Qga2V5IHR5cGVcbiIsIDEzLCBQU0FfS0VZX1RZUEVfVkVORE9SX0ZMQUcsCiB7MHgyNCwgMHgxMywgMHg2MSwgMHg0NywgMHg2MSwgMHhCOCwgMHhDOCwgMHhGMCwgMHhERiwgMHhBQiwgMHg1QSwgMHgwRSwgMHg4NywKLSAweDQwLCAweEFDLCAweEEzLCAweDkwLCAweDc3LCAweDgzLCAweDUyLCAweDMxLCAweDc0LCAweEY5fSwKKyAweDQwLCAweEFDLCAweEEzLCAweDkwLCAweDc3LCAweDgzLCAweDUyLCAweDMxLCAweDc0LCAweEY5LCAweDA1fSwKIEFFU18yNEJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NUUiwKIEJZVEVTX1RPX0JJVFMoQUVTXzI0Ql9LRVlfU0laRSksIEFFU18yNEJfS0VZX1NJWkUsIFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVELAogfSwKQEAgLTI4OSw5ICsyODksOSBAQAogI2lmZGVmIEFSQ0hfVEVTVF9BRVNfMTI4CiB7IlRlc3QgcHNhX2ltcG9ydF9rZXkgbmVnYXRpdmUgY2FzZXNcbiIsIDEsIFBTQV9LRVlfVFlQRV9BRVMsCiB7MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKLSAweDVGLCAweEM5fSwKKyAweDVGLCAweEM5LCAweDc3fSwKIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NUUiwKLUJZVEVTX1RPX0JJVFMoQUVTXzE2Ql9LRVlfU0laRSksIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9FUlJPUl9PQ0NVUElFRF9TTE9UCitCWVRFU19UT19CSVRTKEFFU18xNkJfS0VZX1NJWkUpLCBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfRVJST1JfQUxSRUFEWV9FWElTVFMKIH0sCiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDMvdGVzdF9jMDAzLmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwMy90ZXN0X2MwMDMuYwppbmRleCBlMjVkODBkLi4xOTY4Y2IxIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwMy90ZXN0X2MwMDMuYworKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwMy90ZXN0X2MwMDMuYwpAQCAtMTEyLDggKzExMiw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5X3R5cGUsICZiaXRzKTsKICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CiAKKyAgICAgICAgLyogTWFrZSBzdXJlIHRoZSBtZXRhZGEgbWF0Y2hlcyB3aXRoIHRoZSBnaXZlbiBkYXRhICovCiAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGtleV90eXBlLCBjaGVjazFbaV0ua2V5X3R5cGUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOwotCiAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGJpdHMsIGNoZWNrMVtpXS5leHBlY3RlZF9iaXRfbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDgpKTsKIAogICAgICAgICAvKiBFeHBvcnQgYSBrZXkgaW4gYmluYXJ5IGZvcm1hdCAqLwpAQCAtMTI0LDYgKzEyNCw3IEBACiAgICAgICAgIGlmIChjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzICE9IFBTQV9TVUNDRVNTKQogICAgICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgLyogQ2hlY2sgaWYgdGhlIGtleSBsZW5ndGggbWF0Y2hlcyB3aXRoIHRoZSBnaXZlbiBsZW5ndGggKi8KICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwobGVuZ3RoLCBjaGVjazFbaV0uZXhwZWN0ZWRfa2V5X2xlbmd0aCwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMCkpOwogCiAgICAgICAgIC8qIENoZWNrIGlmIG9yaWdpbmFsIGtleSBkYXRhIG1hdGNoZXMgd2l0aCB0aGUgZXhwb3J0ZWQgZGF0YSAqLwpAQCAtMTc3LDcgKzE3OCw3IEBACiAgICAgICAgIC8qIEV4cG9ydCBhIGtleSBpbiBiaW5hcnkgZm9ybWF0ICovCiAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fRVhQT1JUX0tFWSwgY2hlY2syW2ldLmtleV9oYW5kbGUsIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2xlbmd0aCwgJmxlbmd0aCk7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0VNUFRZX1NMT1QsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9ET0VTX05PVF9FWElTVCwgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CiAKICAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9leHBvcnRfa2V5IHdpdGggemVybyBhcyBrZXkgaGFuZGxlXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDMvdGVzdF9kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwMy90ZXN0X2RhdGEuaAppbmRleCBjNTgzMmM3Li5kZmUwYTBiIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwMy90ZXN0X2RhdGEuaAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwMy90ZXN0X2RhdGEuaApAQCAtMTY1LDcgKzE2NSw3IEBACiAjaWZkZWYgQVJDSF9URVNUX0FFU18xMjgKIHsiVGVzdCBwc2FfZXhwb3J0X2tleSAxNiBCeXRlIEFFU1xuIiwgMSwgUFNBX0tFWV9UWVBFX0FFUywKIHsweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAotIDB4NUYsIDB4Qzl9LAorIDB4NUYsIDB4QzksIDB4Nzd9LAogIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfQUxHX0NUUiwgQlVGRkVSX1NJWkUsCiAgQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX1NVQ0NFU1MKIH0sCkBAIC0xNzQsNyArMTc0LDcgQEAKICNpZmRlZiBBUkNIX1RFU1RfQUVTXzE5MgogeyJUZXN0IHBzYV9leHBvcnRfa2V5IDI0IEJ5dGUgQUVTXG4iLCAyLCBQU0FfS0VZX1RZUEVfQUVTLAogezB4MjQsIDB4MTMsIDB4NjEsIDB4NDcsIDB4NjEsIDB4QjgsIDB4QzgsIDB4RjAsIDB4REYsIDB4QUIsIDB4NUEsIDB4MEUsIDB4ODcsCi0gMHg0MCwgMHhBQywgMHhBMywgMHg5MCwgMHg3NywgMHg4MywgMHg1MiwgMHgzMSwgMHg3NCwgMHhGOX0sCisgMHg0MCwgMHhBQywgMHhBMywgMHg5MCwgMHg3NywgMHg4MywgMHg1MiwgMHgzMSwgMHg3NCwgMHhGOSwgMHgwNX0sCiAgQUVTXzI0Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLCBCVUZGRVJfU0laRSwKICBCWVRFU19UT19CSVRTKEFFU18yNEJfS0VZX1NJWkUpLCBBRVNfMjRCX0tFWV9TSVpFLCBQU0FfU1VDQ0VTUwogfSwKQEAgLTI2MCwxNCArMjYwLDE0IEBACiAjaWZkZWYgQVJDSF9URVNUX0FFU18xMjgKIHsiVGVzdCBwc2FfZXhwb3J0X2tleSB3aXRoIGtleSBwb2xpY3kgdmVyaWZ5XG4iLCAxMSwgUFNBX0tFWV9UWVBFX0FFUywKIHsweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAotIDB4NUYsIDB4Qzl9LAorIDB4NUYsIDB4QzksIDB4MDV9LAogIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfVkVSSUZZLCBQU0FfQUxHX0NUUiwgQlVGRkVSX1NJWkUsCiAgQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0VSUk9SX05PVF9QRVJNSVRURUQKIH0sCiAKIHsiVGVzdCBwc2FfZXhwb3J0X2tleSB3aXRoIGxlc3MgYnVmZmVyIHNpemVcbiIsIDEyLCBQU0FfS0VZX1RZUEVfQUVTLAogezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCi0gMHg1RiwgMHhDOX0sCisgMHg1RiwgMHhDOSwgMHgwNX0sCiAgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9BTEdfQ1RSLCAxNCwKICBCWVRFU19UT19CSVRTKEFFU18xNkJfS0VZX1NJWkUpLCBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfRVJST1JfQlVGRkVSX1RPT19TTUFMTAogfSwKQEAgLTI4MCw3ICsyODAsNyBAQAogI2lmZGVmIEFSQ0hfVEVTVF9BRVNfMTI4CiB7IlRlc3QgcHNhX2V4cG9ydF9rZXkgbmVnYXRpdmUgY2FzZVxuIiwgMTMsIFBTQV9LRVlfVFlQRV9BRVMsCiB7MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKLSAweDVGLCAweEM5fSwKKyAweDVGLCAweEM5LCAweDA1fSwKICBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19DVFIsIEJVRkZFUl9TSVpFLAogIEJZVEVTX1RPX0JJVFMoQUVTXzE2Ql9LRVlfU0laRSksIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9TVUNDRVNTCiB9LApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDQvdGVzdF9jMDA0LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwNC90ZXN0X2MwMDQuYwppbmRleCBmY2VhZGU1Li5kOTljNDgzIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwNC90ZXN0X2MwMDQuYworKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwNC90ZXN0X2MwMDQuYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAgICAgICAgIC8qIEV4cG9ydCBhIGtleSBpbiBiaW5hcnkgZm9ybWF0ICovCiAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fRVhQT1JUX1BVQkxJQ19LRVksIGNoZWNrMltpXS5rZXlfaGFuZGxlLCBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2xlbmd0aCwgJmxlbmd0aCk7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0VNUFRZX1NMT1QsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9ET0VTX05PVF9FWElTVCwgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CiAKICAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9leHBvcnRfa2V5IHdpdGggemVybyBhcyBrZXkgaGFuZGxlXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDUvdGVzdF9jMDA1LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwNS90ZXN0X2MwMDUuYwppbmRleCBmNTg4MTkyLi4xYWY2YjM2IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwNS90ZXN0X2MwMDUuYworKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwNS90ZXN0X2MwMDUuYwpAQCAtMTE1LDggKzExNSw4IEBACiAgICAgICAgICAgICAgICAgICAgIFBTQV9TVUNDRVNTLAogICAgICAgICAgICAgICAgICAgICBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKIAorICAgICAgICAvKiBDaGVjayB0aGF0IG1ldGFkYXRhIG1hdGNoZXMgd2l0aCBnaXZlbiBkYXRhICovCiAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGtleV90eXBlLCBjaGVjazFbaV0ua2V5X3R5cGUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOwotCiAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGJpdHMsIGNoZWNrMVtpXS5leHBlY3RlZF9iaXRfbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDgpKTsKIAogICAgICAgICAvKiBEZXN0cm95IGEga2V5IGFuZCByZXN0b3JlIHRoZSBzbG90IHRvIGl0cyBkZWZhdWx0IHN0YXRlICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwNi90ZXN0X2MwMDYuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA2L3Rlc3RfYzAwNi5jCmluZGV4IGNhNmQ1MjUuLmExOGFhYTcgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA2L3Rlc3RfYzAwNi5jCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA2L3Rlc3RfYzAwNi5jCkBAIC0xMTMsOCArMTEzLDggQEAKICAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCiAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICAvKiBDaGVjayB0aGF0IGl0IG1hdGNoZXMgd2l0aCBnaXZlbiBkYXRhICovCiAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGtleV90eXBlLCBjaGVjazFbaV0ua2V5X3R5cGUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOwotCiAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGJpdHMsIGNoZWNrMVtpXS5leHBlY3RlZF9iaXRfbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDgpKTsKICAgICB9CiAKQEAgLTE1OSw3ICsxNTksNyBAQAogICAgICAgICAvKiBHZXQgYmFzaWMgbWV0YWRhdGEgYWJvdXQgYSBrZXkgKi8KICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRVRfS0VZX0lORk9STUFUSU9OLCBjaGVjazJbaV0ua2V5X2hhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoZWNrMltpXS5rZXlfdHlwZSwgJmNoZWNrMltpXS5rZXlfbGVuZ3RoKTsKLSAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfRU1QVFlfU0xPVCwgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNULCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKIAogICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2dldF9rZXlfaW5mb3JtYXRpb24gd2l0aCBkZXN0cm95ZWQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIga2V5IGhhbmRsZVxuIiwgZ190ZXN0X2NvdW50KyspOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDYvdGVzdF9kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwNi90ZXN0X2RhdGEuaAppbmRleCBlNGFlMDc3Li5jY2M1MmUyIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwNi90ZXN0X2RhdGEuaAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwNi90ZXN0X2RhdGEuaApAQCAtMjU1LDEwICsyNTUsOSBAQAogIDIyNCwgMjgsIFBTQV9TVUNDRVNTCiB9LAogI2VuZGlmCi0jZW5kaWYgICAgCisjZW5kaWYKIH07CiAKLQogc3RhdGljIHRlc3RfZGF0YSBjaGVjazJbXSA9IHsKICNpZmRlZiBBUkNIX1RFU1RfQ0lQRVJfTU9ERV9DVFIKICNpZmRlZiBBUkNIX1RFU1RfQUVTXzEyOApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDcvdGVzdF9jMDA3LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwNy90ZXN0X2MwMDcuYwppbmRleCA4MmE3N2MyLi45YjMzNzFmIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwNy90ZXN0X2MwMDcuYworKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwNy90ZXN0X2MwMDcuYwpAQCAtMTgxLDcgKzE4MSw3IEBACiAKICAgICAgICAgLyogU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX1NFVF9LRVlfUE9MSUNZLCBjaGVjazJbaV0ua2V5X2hhbmRsZSwgJnBvbGljeSk7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX09DQ1VQSUVEX1NMT1QsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9BTFJFQURZX0VYSVNUUywgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA3L3Rlc3RfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDcvdGVzdF9kYXRhLmgKaW5kZXggMTgzYzNiNS4uNzU3MjY5NiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDcvdGVzdF9kYXRhLmgKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDcvdGVzdF9kYXRhLmgKQEAgLTI3Nyw3ICsyNzcsNyBAQAogezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCiAgMHg1RiwgMHhDOX0sCiBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0FMR19DVFIsCi1CWVRFU19UT19CSVRTKEFFU18xNkJfS0VZX1NJWkUpLCBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfRVJST1JfT0NDVVBJRURfU0xPVAorQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0VSUk9SX0FMUkVBRFlfRVhJU1RTCiB9LAogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA4L3Rlc3RfYzAwOC5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDgvdGVzdF9jMDA4LmMKaW5kZXggMDVjZTBmOC4uMzYzZDVjNyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDgvdGVzdF9jMDA4LmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDgvdGVzdF9jMDA4LmMKQEAgLTUzLDYgKzUzLDggQEAKICAgICAgICAgICogdXNhZ2Ugb2YgdGhlIGtleQogICAgICAgICAgKi8KICAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQsICZwb2xpY3kpOworICAgICAgICBtZW1zZXQoJmV4cGVjdGVkX3VzYWdlLCAwLCBzaXplb2YocHNhX2tleV91c2FnZV90KSk7CisgICAgICAgIG1lbXNldCgmZXhwZWN0ZWRfYWxnLCAwLCBzaXplb2YocHNhX2FsZ29yaXRobV90KSk7CiAKICAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KICAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDkvdGVzdF9jMDA5LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwOS90ZXN0X2MwMDkuYwppbmRleCBhYTRhZjE1Li45YjI1MmI4IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwOS90ZXN0X2MwMDkuYworKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAwOS90ZXN0X2MwMDkuYwpAQCAtNTUsNiArNTUsOSBAQAogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgJmNoZWNrMVtpXS5rZXlfaGFuZGxlKTsKICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKIAorICAgICAgICAvKiBEZXN0cm95IGEga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fREVTVFJPWV9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKQEAgLTYyLDcgKzY1LDcgQEAKIAogaW50MzJfdCBwc2FfYWxsb2NhdGVfa2V5X25lZ2F0aXZlX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCiB7Ci0gICAgaW50MzJfdCAgICAgICAgICAgICBpLCBzdGF0dXM7CisgICAgaW50MzJfdCAgICAgICAgICAgICBpLCBqLCBzdGF0dXM7CiAgICAgcHNhX2tleV9oYW5kbGVfdCAgICBrZXlfaGFuZGxlW01BWF9LRVlTXTsKIAogICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCkBAIC03NiwxMCArNzksMTggQEAKICAgICAgICAgLyogQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5ICovCiAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUxMT0NBVEVfS0VZLCAma2V5X2hhbmRsZVtpXSk7CiAgICAgICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9NRU1PUlksIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfTUVNT1JZLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKyAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisrKQorICAgIHsKKyAgICAgICAgLyogRGVzdHJveSBhIGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0RFU1RST1lfS0VZLCBrZXlfaGFuZGxlW2pdKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CisgICAgfQogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDA5L3Rlc3RfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDkvdGVzdF9kYXRhLmgKaW5kZXggNGE4NTk4Ni4uZmQ0YmUzYyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDkvdGVzdF9kYXRhLmgKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMDkvdGVzdF9kYXRhLmgKQEAgLTIwLDY3ICsyMCw1MyBAQAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIHRlc3RfZGVzY1s3NV07CiAgICAgcHNhX2tleV9oYW5kbGVfdCAgICAgICAga2V5X2hhbmRsZTsKLSAgICBwc2Ffa2V5X3R5cGVfdCAgICAgICAgICBrZXlfdHlwZTsKLSAgICBzaXplX3QgICAgICAgICAgICAgICAgICBrZXlfbGVuZ3RoOwogICAgIHBzYV9zdGF0dXNfdCAgICAgICAgICAgIGV4cGVjdGVkX3N0YXR1czsKIH0gdGVzdF9kYXRhOwogCiBzdGF0aWMgdGVzdF9kYXRhIGNoZWNrMVtdID0gewogI2lmZGVmIEFSQ0hfVEVTVF9BRVNfMTI4Ci17IlRlc3QgcHNhX2FsbG9jYXRlX2tleSAxNiBCeXRlIEFFU1xuIiwgMSwgUFNBX0tFWV9UWVBFX0FFUywKLSBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfU1VDQ0VTUworeyJUZXN0IHBzYV9hbGxvY2F0ZV9rZXkgMTYgQnl0ZSBBRVNcbiIsIDEsIFBTQV9TVUNDRVNTCiB9LAogI2VuZGlmCiAKICNpZmRlZiBBUkNIX1RFU1RfQUVTXzE5MgoteyJUZXN0IHBzYV9hbGxvY2F0ZV9rZXkgMjQgQnl0ZSBBRVNcbiIsIDIsIFBTQV9LRVlfVFlQRV9BRVMsCi0gQUVTXzI0Ql9LRVlfU0laRSwgUFNBX1NVQ0NFU1MKK3siVGVzdCBwc2FfYWxsb2NhdGVfa2V5IDI0IEJ5dGUgQUVTXG4iLCAyLCBQU0FfU1VDQ0VTUwogfSwKICNlbmRpZgogCiAjaWZkZWYgQVJDSF9URVNUX0FFU18yNTYKLXsiVGVzdCBwc2FfYWxsb2NhdGVfa2V5IDMyIEJ5dGUgQUVTXG4iLCAzLCBQU0FfS0VZX1RZUEVfQUVTLAotIEFFU18zMkJfS0VZX1NJWkUsIFBTQV9TVUNDRVNTCit7IlRlc3QgcHNhX2FsbG9jYXRlX2tleSAzMiBCeXRlIEFFU1xuIiwgMywgUFNBX1NVQ0NFU1MKIH0sCiAjZW5kaWYKIAogI2lmZGVmIEFSQ0hfVEVTVF9SU0FfMjA0OAoteyJUZXN0IHBzYV9hbGxvY2F0ZV9rZXkgMjA0OCBSU0EgcHVibGljIGtleVxuIiwgNCwgUFNBX0tFWV9UWVBFX1JTQV9QVUJMSUNfS0VZLAotIDI5NCwgUFNBX1NVQ0NFU1MKK3siVGVzdCBwc2FfYWxsb2NhdGVfa2V5IDIwNDggUlNBIHB1YmxpYyBrZXlcbiIsIDQsIFBTQV9TVUNDRVNTCiB9LAogCi17IlRlc3QgcHNhX2FsbG9jYXRlX2tleSB3aXRoIFJTQSAyMDQ4IGtleXBhaXJcbiIsIDUsIFBTQV9LRVlfVFlQRV9SU0FfS0VZUEFJUiwKLSAxMTkzLCBQU0FfU1VDQ0VTUworeyJUZXN0IHBzYV9hbGxvY2F0ZV9rZXkgd2l0aCBSU0EgMjA0OCBrZXlwYWlyXG4iLCA1LCBQU0FfU1VDQ0VTUywKIH0sCiAjZW5kaWYKIAogI2lmZGVmIEFSQ0hfVEVTVF9ERVNfMUtFWQoteyJUZXN0IHBzYV9hbGxvY2F0ZV9rZXkgd2l0aCBERVMgNjQgYml0IGtleVxuIiwgNiwgUFNBX0tFWV9UWVBFX0RFUywKLSBERVNfOEJfS0VZX1NJWkUsIFBTQV9TVUNDRVNTCit7IlRlc3QgcHNhX2FsbG9jYXRlX2tleSB3aXRoIERFUyA2NCBiaXQga2V5XG4iLCA2LCBQU0FfU1VDQ0VTUywKIH0sCiAjZW5kaWYKIAogI2lmZGVmIEFSQ0hfVEVTVF9ERVNfMktFWQoteyJUZXN0IHBzYV9hbGxvY2F0ZV9rZXkgd2l0aCBUcmlwbGUgREVTIDItS2V5XG4iLCA3LCBQU0FfS0VZX1RZUEVfREVTLAotIERFUzNfMktFWV9TSVpFLCBQU0FfU1VDQ0VTUworeyJUZXN0IHBzYV9hbGxvY2F0ZV9rZXkgd2l0aCBUcmlwbGUgREVTIDItS2V5XG4iLCA3LCBQU0FfU1VDQ0VTUywKIH0sCiAjZW5kaWYKIAogI2lmZGVmIEFSQ0hfVEVTVF9ERVNfM0tFWQoteyJUZXN0IHBzYV9hbGxvY2F0ZV9rZXkgd2l0aCBUcmlwbGUgREVTIDMtS2V5XG4iLCA4LCBQU0FfS0VZX1RZUEVfREVTLAotIERFUzNfM0tFWV9TSVpFLCBQU0FfU1VDQ0VTUworeyJUZXN0IHBzYV9hbGxvY2F0ZV9rZXkgd2l0aCBUcmlwbGUgREVTIDMtS2V5XG4iLCA4LCBQU0FfU1VDQ0VTUywKIH0sCiAjZW5kaWYKIAogI2lmZGVmIEFSQ0hfVEVTVF9FQ0NfQ1VSVkVfU0VDUDE5MlIxCi17IlRlc3QgcHNhX2FsbG9jYXRlX2tleSB3aXRoIEVDIFB1YmxpYyBrZXlcbiIsIDksCi0gUFNBX0tFWV9UWVBFX0VDQ19QVUJMSUNfS0VZX0JBU0UgfCBQU0FfRUNDX0NVUlZFX1NFQ1AxOTJSMSwKLSA3NSwgUFNBX1NVQ0NFU1MKK3siVGVzdCBwc2FfYWxsb2NhdGVfa2V5IHdpdGggRUMgUHVibGljIGtleVxuIiwgOSwgUFNBX1NVQ0NFU1MsCiB9LAogCi17IlRlc3QgcHNhX2FsbG9jYXRlX2tleSB3aXRoIEVDIGtleXBhaXJcbiIsIDEwLAotIFBTQV9LRVlfVFlQRV9FQ0NfS0VZUEFJUl9CQVNFIHwgUFNBX0VDQ19DVVJWRV9TRUNQMTkyUjEsCi0gOTcsIFBTQV9TVUNDRVNTCit7IlRlc3QgcHNhX2FsbG9jYXRlX2tleSB3aXRoIEVDIGtleXBhaXJcbiIsIDEwLCBQU0FfU1VDQ0VTUwogfSwKICNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDExL3Rlc3RfYzAxMS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTEvdGVzdF9jMDExLmMKaW5kZXggN2U0YjRkZi4uMTMxNzZhMiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTEvdGVzdF9jMDExLmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTEvdGVzdF9jMDExLmMKQEAgLTQzLDYgKzQzLDggQEAKICAgICB7CiAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gIiwgZ190ZXN0X2NvdW50KyspOwogICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsIGNoZWNrMVtpXS50ZXN0X2Rlc2MsIDApOworCisgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIHN0cnVjdHVyZSAqLwogICAgICAgICBtZW1zZXQoJm9wZXJhdGlvbiwgMCwgc2l6ZW9mKG9wZXJhdGlvbikpOwogCiAgICAgICAgIC8qIFNldHRpbmcgdXAgdGhlIHdhdGNoZG9nIHRpbWVyIGZvciBlYWNoIGNoZWNrICovCkBAIC01Myw5ICs1NSwxNiBAQAogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0hBU0hfU0VUVVAsICZvcGVyYXRpb24sIGNoZWNrMVtpXS5hbGcpOwogICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOwogCi0gICAgICAgIC8qQWJvcnQgdGhlIGhhc2ggb3BlcmF0aW9uICovCi0gICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSEFTSF9BQk9SVCwgJm9wZXJhdGlvbik7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworICAgICAgICBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cyA9PSBQU0FfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgLyogU3RhcnQgYSBtdWx0aXBhcnQgaGFzaCBvcGVyYXRpb24gKi8KKyAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSEFTSF9TRVRVUCwgJm9wZXJhdGlvbiwgY2hlY2sxW2ldLmFsZyk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9CQURfU1RBVEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworCisgICAgICAgICAgICAvKkFib3J0IHRoZSBoYXNoIG9wZXJhdGlvbiAqLworICAgICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19IQVNIX0FCT1JULCAmb3BlcmF0aW9uKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDExL3Rlc3RfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTEvdGVzdF9kYXRhLmgKaW5kZXggZmFiN2JkNS4uNjRiMjMzYiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTEvdGVzdF9kYXRhLmgKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTEvdGVzdF9kYXRhLmgKQEAgLTExNCw3ICsxMTQsMTYgQEAKIH0sCiAjZW5kaWYKIAoreyJUZXN0IHBzYV9oYXNoX3NldHVwIHdpdGggSW52YWxpZCBoYXNoIGFsZ29yaXRobVxuIiwKKyBQU0FfSEFTSF9BTEdfSU5WQUxJRCwgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQsCit9LAorCiB7IlRlc3QgcHNhX2hhc2hfc2V0dXAgd2l0aCBJbnZhbGlkIGFsZ29yaXRobVxuIiwKICBQU0FfQUxHX0lOVkFMSUQsIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5ULAogfSwKKworeyJUZXN0IHBzYV9oYXNoX3NldHVwIHdpdGggQ1RSIGFsZ29yaXRobVxuIiwKKyBQU0FfQUxHX0NUUiwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQsCit9LAorCiB9OwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTIvdGVzdF9jMDEyLmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxMi90ZXN0X2MwMTIuYwppbmRleCA1YTMxODFjLi5hMDJmOGFkIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxMi90ZXN0X2MwMTIuYworKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxMi90ZXN0X2MwMTIuYwpAQCAtNDUsNiArNDUsOCBAQAogICAgIHsKICAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSAiLCBnX3Rlc3RfY291bnQrKyk7CiAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgY2hlY2sxW2ldLnRlc3RfZGVzYywgMCk7CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgaGFzaCBzdHJ1Y3R1cmUgKi8KICAgICAgICAgbWVtc2V0KCZvcGVyYXRpb24sIDAsIHNpemVvZihvcGVyYXRpb24pKTsKIAogICAgICAgICAvKiBTZXR0aW5nIHVwIHRoZSB3YXRjaGRvZyB0aW1lciBmb3IgZWFjaCBjaGVjayAqLwpAQCAtNzIsNyArNzQsNyBAQAogewogICAgIHBzYV9oYXNoX29wZXJhdGlvbl90ICAgIG9wZXJhdGlvbjsKICAgICB1aW50OF90ICAgICAgICAgICAgICAgICBpbnB1dFtdID0gIkhlbGxvIFdvcmxkIjsKLSAgICBzaXplX3QgICAgICAgICAgICAgICAgICBpbnB1dF9sZW5ndGggPSBzaXplb2YoaW5wdXQpL3NpemVvZihpbnB1dFswXSk7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgaW5wdXRfbGVuZ3RoID0gc2l6ZW9mKGlucHV0KTsKICAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBzdGF0dXM7CiAKICAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLwpAQCAtODEsNiArODMsOCBAQAogCiAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSAiLCBnX3Rlc3RfY291bnQrKyk7CiAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiVGVzdCBwc2FfaGFzaF91cGRhdGUgd2l0aG91dCBoYXNoIHNldHVwXG4iLCAwKTsKKworICAgIC8qIEluaXRpYWxpemUgdGhlIGhhc2ggc3RydWN0dXJlICovCiAgICAgbWVtc2V0KCZvcGVyYXRpb24sIDAsIHNpemVvZihvcGVyYXRpb24pKTsKIAogICAgIC8qIFNldHRpbmcgdXAgdGhlIHdhdGNoZG9nIHRpbWVyIGZvciBlYWNoIGNoZWNrICovCkBAIC0xMDIsMTMgKzEwNiwxMyBAQAogewogICAgIHBzYV9oYXNoX29wZXJhdGlvbl90ICAgIG9wZXJhdGlvbjsKICAgICB1aW50OF90ICAgICAgICAgICAgICAgICBpbnB1dFtdID0gezB4YmR9OwotICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGlucHV0X2xlbmd0aCA9IHNpemVvZihpbnB1dCkvc2l6ZW9mKGlucHV0WzBdKTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBpbnB1dF9sZW5ndGggPSBzaXplb2YoaW5wdXQpOwogICAgIHBzYV9hbGdvcml0aG1fdCAgICAgICAgIGFsZyA9IFBTQV9BTEdfU0hBXzI1NjsKICAgICB1aW50OF90ICAgICAgICAgICAgICAgICBoYXNoW10gPSB7MHg2OCwgMHgzMiwgMHg1NywgMHgyMCwgMHhBQSwgMHhCRCwgMHg3QywgMHg4MiwgMHhGMywgMHgwRiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1NSwgMHg0QiwgMHgzMSwgMHgzRCwgMHgwNSwgMHg3MCwgMHhDOSwgMHg1QSwgMHhDQywgMHhCQiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RCwgMHhDNCwgMHhCNSwgMHhBQSwgMHhFMSwgMHgxMiwgMHgwNCwgMHhDMCwgMHg4RiwgMHhGRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MywgMHgyQn07Ci0gICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgaGFzaF9sZW5ndGggPSBzaXplb2YoaGFzaCkvc2l6ZW9mKGhhc2hbMF0pOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGhhc2hfbGVuZ3RoID0gc2l6ZW9mKGhhc2gpOwogICAgIGludDMyX3QgICAgICAgICAgICAgICAgIHN0YXR1czsKIAogICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNC90ZXN0X2MwMTQuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE0L3Rlc3RfYzAxNC5jCmluZGV4IDQ4ZTNjNWEuLjI3MmUwZTAgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE0L3Rlc3RfYzAxNC5jCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE0L3Rlc3RfYzAxNC5jCkBAIC0zOCw3ICszOCw3IEBACiAgICAgcHNhX2hhc2hfb3BlcmF0aW9uX3QgICAgb3BlcmF0aW9uOwogICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAgICpleHBlY3RlZF9oYXNoOwogICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIGhhc2hbSEFTSF82NEJdOwotICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGhhc2hfbGVuZ3RoLCBoYXNoX3NpemUgPSBzaXplb2YoaGFzaCkvc2l6ZW9mKGhhc2hbMF0pOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGhhc2hfbGVuZ3RoLCBoYXNoX3NpemUgPSBzaXplb2YoaGFzaCk7CiAKICAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLwogICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CkBAIC03NywxNCArNzcsMTAgQEAKIAogICAgICAgICBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cyAhPSBQU0FfU1VDQ0VTUykKICAgICAgICAgewotICAgICAgICAgICAgLypBYm9ydCB0aGUgaGFzaCBvcGVyYXRpb24gKi8KLSAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSEFTSF9BQk9SVCwgJm9wZXJhdGlvbik7Ci0gICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoaGFzaF9sZW5ndGgsIFBTQV9IQVNIX1NJWkUoY2hlY2sxW2ldLmFsZyksIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOwotCiAgICAgICAgIFRFU1RfQVNTRVJUX01FTUNNUChoYXNoLCBleHBlY3RlZF9oYXNoLCBoYXNoX2xlbmd0aCwgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CiAKICAgICAgICAgLypBYm9ydCB0aGUgaGFzaCBvcGVyYXRpb24gKi8KQEAgLTEwMiw3ICs5OCw3IEBACiAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgaW5wdXRfbGVuZ3RoID0gMTsKICAgICBwc2FfYWxnb3JpdGhtX3QgICAgICAgICBhbGcgPSBQU0FfQUxHX1NIQV8yNTY7CiAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgaGFzaFtIQVNIXzY0Ql07Ci0gICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgaGFzaF9sZW5ndGgsIGhhc2hfc2l6ZSA9IHNpemVvZihoYXNoKS9zaXplb2YoaGFzaFswXSk7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgaGFzaF9sZW5ndGgsIGhhc2hfc2l6ZSA9IHNpemVvZihoYXNoKTsKICAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBzdGF0dXM7CiAKICAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTUvdGVzdF9jMDE1LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNS90ZXN0X2MwMTUuYwppbmRleCAyMDhkN2I1Li44ZjcyNWYzIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNS90ZXN0X2MwMTUuYworKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxNS90ZXN0X2MwMTUuYwpAQCAtNzQsNyArNzQsNyBAQAogICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGlucHV0X2xlbmd0aCA9IDE7CiAgICAgcHNhX2FsZ29yaXRobV90ICAgICAgICAgYWxnID0gUFNBX0FMR19TSEFfMjU2OwogICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIGhhc2hbSEFTSF82NEJdOwotICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGhhc2hfbGVuZ3RoLCBoYXNoX3NpemUgPSBzaXplb2YoaGFzaCkvc2l6ZW9mKGhhc2hbMF0pOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGhhc2hfbGVuZ3RoLCBoYXNoX3NpemUgPSBzaXplb2YoaGFzaCk7CiAgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgc3RhdHVzOwogCiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5Ki8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE2L3Rlc3RfYzAxNi5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTYvdGVzdF9jMDE2LmMKaW5kZXggNTg2MmJhNS4uOTc4MTgyNyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTYvdGVzdF9jMDE2LmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTYvdGVzdF9jMDE2LmMKQEAgLTc2LDIzICs3NiwzMyBAQAogICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOwogCiAgICAgICAgIGlmIChjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzICE9IFBTQV9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBEZXN0cm95IHRoZSBrZXkgKi8KKyAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fREVTVFJPWV9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworCiAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogCiAgICAgICAgIC8qIEdldCBiYXNpYyBtZXRhZGF0YSBhYm91dCBhIGtleSAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFVF9LRVlfSU5GT1JNQVRJT04sIGNoZWNrMVtpXS5rZXlfaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAma2V5X3R5cGUsICZiaXRzKTsKLSAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOwogCi0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGtleV90eXBlLCBjaGVjazFbaV0ua2V5X3R5cGUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChrZXlfdHlwZSwgY2hlY2sxW2ldLmtleV90eXBlLCBURVNUX0NIRUNLUE9JTlRfTlVNKDgpKTsKIAotICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChiaXRzLCBjaGVjazFbaV0uZXhwZWN0ZWRfYml0X2xlbmd0aCwgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGJpdHMsIGNoZWNrMVtpXS5leHBlY3RlZF9iaXRfbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKIAogICAgICAgICAvKiBFeHBvcnQgYSBrZXkgaW4gYmluYXJ5IGZvcm1hdCAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0VYUE9SVF9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlLCBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCVUZGRVJfU0laRSwgJmxlbmd0aCk7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg5KSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSgxMCkpOwogCi0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGxlbmd0aCwgY2hlY2sxW2ldLmV4cGVjdGVkX2tleV9sZW5ndGgsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTApKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwobGVuZ3RoLCBjaGVjazFbaV0uZXhwZWN0ZWRfa2V5X2xlbmd0aCwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMSkpOworCisgICAgICAgIC8qIERlc3Ryb3kgdGhlIGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0RFU1RST1lfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTIpKTsKICAgICB9CiAKICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOwpAQCAtMTU2LDcgKzE2Niw3IEBACiAgICAgICAgIC8qIEdlbmVyYXRlIGEga2V5IG9yIGtleSBwYWlyICovCiAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VORVJBVEVfS0VZLCBjaGVjazJbaV0ua2V5X2hhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV90eXBlLCBjaGVjazJbaV0uYml0cywgY2hlY2syW2ldLmV4dHJhLCBjaGVjazJbaV0uZXh0cmFfc2l6ZSk7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX09DQ1VQSUVEX1NMT1QsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9BTFJFQURZX0VYSVNUUywgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CiAKICAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9nZW5lcmF0ZV9rZXkgd2l0aCBkZXN0cm95ZWQga2V5IGhhbmRsZVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE3L3Rlc3RfYzAxNy5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTcvdGVzdF9jMDE3LmMKaW5kZXggMTAzODdiOC4uOGFlYWI5YyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTcvdGVzdF9jMDE3LmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTcvdGVzdF9jMDE3LmMKQEAgLTI4LDEzICsyOCwxNCBAQAogfTsKIAogc3RhdGljIGludCBnX3Rlc3RfY291bnQgPSAxOworc3RhdGljIHVpbnQ4X3QgZGF0YVtCVUZGRVJfU0laRV0sIGNoYW5nZWRbQlVGRkVSX1NJWkVdOwogCiBpbnQzMl90IHBzYV9nZW5lcmF0ZV9yYW5kb21fdGVzdChzZWN1cml0eV90IGNhbGxlcikKIHsKLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMSkvc2l6ZW9mKGNoZWNrMVswXSk7Ci0gICAgdWludDMyX3QgICAgICAgICAgICAgICAgaSwgaiwgZGF0YV9zdW07Ci0gICAgdWludDhfdCAgICAgICAgICAgICAgICAgZGF0YVtCVUZGRVJfU0laRV0gPSB7MH07Ci0gICAgaW50MzJfdCAgICAgICAgICAgICAgICAgc3RhdHVzOworICAgIGludCAgICAgICAgIG51bV9jaGVja3MgPSBzaXplb2YoY2hlY2sxKS9zaXplb2YoY2hlY2sxWzBdKTsKKyAgICB1aW50MzJfdCAgICBpLCBqLCBydW47CisgICAgdWludDhfdCAgICAgdHJhaWxbXSA9ICJkb24ndCBvdmVyd3JpdGUgbWUiOworICAgIGludDMyX3QgICAgIHN0YXR1czsKIAogICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCiAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKQEAgLTQ1LDI5ICs0Niw0NCBAQAogICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKICAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCBjaGVjazFbaV0udGVzdF9kZXNjLCAwKTsKIAorICAgICAgICBtZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTsKKyAgICAgICAgbWVtY3B5KGRhdGEgKyBjaGVjazFbaV0uc2l6ZSwgdHJhaWwsIHNpemVvZih0cmFpbCkpOworCiAgICAgICAgIC8qIFNldHRpbmcgdXAgdGhlIHdhdGNoZG9nIHRpbWVyIGZvciBlYWNoIGNoZWNrICovCiAgICAgICAgIHN0YXR1cyA9IHZhbC0+d2RfcmVwcm9ncmFtX3RpbWVyKFdEX0NSWVBUT19USU1FT1VUKTsKICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBWQUxfU1RBVFVTX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOwogCi0gICAgICAgIC8qIEdlbmVyYXRlIHJhbmRvbSBieXRlcyAqLwotICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFTkVSQVRFX1JBTkRPTSwgZGF0YSwgY2hlY2sxW2ldLnNpemUpOwotICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOwotCi0gICAgICAgIGlmIChjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzICE9IFBTQV9TVUNDRVNTKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZGF0YV9zdW0gPSAwOwotICAgICAgICAvKiBDaGVjayB0aGF0IGlmIGdlbmVyYXRlZCBkYXRhIGFyZSB6ZXJvICovCi0gICAgICAgIGZvciAoaiA9IDA7IGogPCBjaGVjazFbaV0uc2l6ZTsgaisrKQorICAgICAgICAvKiBSdW4gc2V2ZXJhbCB0aW1lcywgdG8gZW5zdXJlIHRoYXQgZXZlcnkgb3V0cHV0IGJ5dGUgd2lsbCBiZQorICAgICAgICAgKiBub256ZXJvIGF0IGxlYXN0IG9uY2Ugd2l0aCBvdmVyd2hlbG1pbmcgcHJvYmFiaWxpdHkKKyAgICAgICAgICogKDJeKC04Km51bWJlcl9vZl9ydW5zKSkuCisgICAgICAgICAqLworICAgICAgICBmb3IgKHJ1biA9IDA7IHJ1biA8IDEwOyBydW4rKykKICAgICAgICAgewotICAgICAgICAgICAgZGF0YV9zdW0gKz0gZGF0YVtqXTsKLSAgICAgICAgICAgIGRhdGFbal0gPSAwOworICAgICAgICAgICAgbWVtc2V0KGRhdGEsIDAsIGNoZWNrMVtpXS5zaXplKTsKKworICAgICAgICAgICAgLyogR2VuZXJhdGUgcmFuZG9tIGJ5dGVzICovCisgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFTkVSQVRFX1JBTkRPTSwgZGF0YSwgY2hlY2sxW2ldLnNpemUpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKKworICAgICAgICAgICAgLyogQ2hlY2sgdGhhdCBubyBtb3JlIHRoYW4gYnl0ZXMgaGF2ZSBiZWVuIG92ZXJ3cml0dGVuICovCisgICAgICAgICAgICBzdGF0dXMgPSBtZW1jbXAoZGF0YSArIGNoZWNrMVtpXS5zaXplLCB0cmFpbCwgc2l6ZW9mKHRyYWlsKSk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIDAsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworCisgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgY2hlY2sxW2ldLnNpemU7IGorKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZGF0YVtqXSAhPSAwKQorICAgICAgICAgICAgICAgICAgICArK2NoYW5nZWRbal07CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoY2hlY2sxW2ldLnNpemUgIT0gMCkKLSAgICAgICAgICAgIFRFU1RfQVNTRVJUX05PVF9FUVVBTChkYXRhX3N1bSwgMCwgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGRhdGFfc3VtLCAwLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKKyAgICAgICAgLyogQ2hlY2sgdGhhdCBldmVyeSBieXRlIHdhcyBjaGFuZ2VkIHRvIG5vbnplcm8gYXQgbGVhc3Qgb25jZS4gVGhpcworICAgICAgICAgKiB2YWxpZGF0ZXMgdGhhdCBwc2FfZ2VuZXJhdGVfcmFuZG9tIGlzIG92ZXJ3cml0aW5nIGV2ZXJ5IGJ5dGUgb2YKKyAgICAgICAgICogdGhlIG91dHB1dCBidWZmZXIuCisgICAgICAgICAqLworICAgICAgICBmb3IgKGogPSAwOyBqIDwgY2hlY2sxW2ldLnNpemU7IGorKykKKyAgICAgICAgeworICAgICAgICAgICAgVEVTVF9BU1NFUlRfTk9UX0VRVUFMKGNoYW5nZWRbal0sIDAsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE3L3Rlc3RfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTcvdGVzdF9kYXRhLmgKaW5kZXggNGUwYzQ2Yy4uNTNhN2MyNCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTcvdGVzdF9kYXRhLmgKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTcvdGVzdF9kYXRhLmgKQEAgLTUwLDcgKzUwLDQgQEAKIAogeyJUZXN0IHBzYV9nZW5lcmF0ZV9yYW5kb20gdG8gZ2V0IDEwMDAgQnl0ZSBkYXRhXG4iLCAxMDAsIFBTQV9TVUNDRVNTCiB9LAotCi17IlRlc3QgcHNhX2dlbmVyYXRlX3JhbmRvbSB0byBnZXQgMTAyNCBCeXRlIGRhdGFcbiIsIDEwMjQsIFBTQV9TVUNDRVNTCi19LAogfTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE4L3Rlc3RfYzAxOC5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTgvdGVzdF9jMDE4LmMKaW5kZXggOTcxYzZkZS4uMGJkZjkxYSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTgvdGVzdF9jMDE4LmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTgvdGVzdF9jMDE4LmMKQEAgLTI0LDYgKzI0LDcgQEAKIGNsaWVudF90ZXN0X3QgdGVzdF9jMDE4X2NyeXB0b19saXN0W10gPSB7CiAgICAgTlVMTCwKICAgICBwc2FfZ2VuZXJhdG9yX3JlYWRfdGVzdCwKKyAgICBwc2FfZ2VuZXJhdG9yX3JlYWRfbmVnYXRpdmVfdGVzdCwKICAgICBOVUxMLAogfTsKIApAQCAtOTUsNiArOTYsMTEgQEAKICAgICAgICAgICAgIC8qIEFib3J0IGEgZ2VuZXJhdG9yICovCiAgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFTkVSQVRPUl9BQk9SVCwgJmdlbmVyYXRvcik7CiAgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDgpKTsKKworICAgICAgICAgICAgLyogRGVzdHJveSB0aGUga2V5ICovCisgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0RFU1RST1lfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtMTA2LDcgKzExMiw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBtZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTsKLSAgICAgICAgVEVTVF9BU1NFUlRfTk9UX0VRVUFMKGRhdGFfc3VtLCAwLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfTk9UX0VRVUFMKGRhdGFfc3VtLCAwLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEwKSk7CiAKICAgICAgICAgcmVtYWluaW5nX3NpemUgPSBjaGVjazFbaV0uY2FwYWNpdHkgLSBjaGVjazFbaV0uc2l6ZTsKICAgICAgICAgaWYgKHJlbWFpbmluZ19zaXplID4gMCkKQEAgLTExNCw3ICsxMjAsNyBAQAogICAgICAgICAgICAgLyogUmVhZCBzb21lIGRhdGEgZnJvbSBhIGdlbmVyYXRvciAqLwogICAgICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRU5FUkFUT1JfUkVBRCwgJmdlbmVyYXRvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIHJlbWFpbmluZ19zaXplKTsKLSAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTApKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTEpKTsKIAogICAgICAgICAgICAgZGF0YV9zdW0gPSAwOwogICAgICAgICAgICAgLyogQ2hlY2sgdGhhdCBpZiBnZW5lcmF0ZWQgZGF0YSBhcmUgemVybyAqLwpAQCAtMTI0LDIzICsxMzAsNTIgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHNpemVvZihkYXRhKSk7Ci0gICAgICAgICAgICBURVNUX0FTU0VSVF9OT1RfRVFVQUwoZGF0YV9zdW0sIDAsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTEpKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX05PVF9FUVVBTChkYXRhX3N1bSwgMCwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMikpOwogCiAgICAgICAgICAgICAvKiBSZWFkIHNvbWUgZGF0YSBmcm9tIGEgZ2VuZXJhdG9yICovCiAgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFTkVSQVRPUl9SRUFELCAmZ2VuZXJhdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgY2hlY2sxW2ldLnNpemUpOwotICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5TVUZGSUNJRU5UX0NBUEFDSVRZLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEyKSk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfREFUQSwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMykpOwogICAgICAgICB9CiAKLSAgICAgICAgLyogUmVhZCBkYXRhIHVzaW5nIGludmFsaWQgZ2VuZXJhdG9yIGhhbmRsZSAqLwotICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFTkVSQVRPUl9SRUFELCAmaW52YWxpZF9nZW5lcmF0b3IsCi0gICAgICAgICAgICAgICAgICAgIGRhdGEsIDEpOwotICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9CQURfU1RBVEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTMpKTsKLQogICAgICAgICAvKiBBYm9ydCBhIGdlbmVyYXRvciAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFTkVSQVRPUl9BQk9SVCwgJmdlbmVyYXRvcik7CiAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTQpKTsKKworICAgICAgICAvKiBEZXN0cm95IHRoZSBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19ERVNUUk9ZX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDE1KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKIH0KKworaW50MzJfdCBwc2FfZ2VuZXJhdG9yX3JlYWRfbmVnYXRpdmVfdGVzdChzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBpOworICAgIHBzYV9jcnlwdG9fZ2VuZXJhdG9yX3QgIGdlbmVyYXRvcltdID0ge3BzYV9jcnlwdG9fZ2VuZXJhdG9yX2luaXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU0FfQ1JZUFRPX0dFTkVSQVRPUl9JTklULCB7MH0gfTsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBnZW5lcmF0b3JfY291bnQgPSBzaXplb2YoZ2VuZXJhdG9yKS9zaXplb2YoZ2VuZXJhdG9yWzBdKTsKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBzdGF0dXM7CisKKyAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKKyAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJUZXN0IHBzYV9nZW5lcmF0b3JfcmVhZCB3aXRob3V0IHNldHVwXG4iLCAwKTsKKworICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKKworICAgIG1lbXNldChkYXRhLCAwLCBzaXplb2YoZGF0YSkpOworCisgICAgZm9yIChpID0gMDsgaSA8IGdlbmVyYXRvcl9jb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRU5FUkFUT1JfUkVBRCwgJmdlbmVyYXRvcltpXSwgZGF0YSwgMSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0JBRF9TVEFURSwgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRU5FUkFUT1JfQUJPUlQsICZnZW5lcmF0b3JbaV0pOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKKyAgICB9CisKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxOC90ZXN0X2MwMTguaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE4L3Rlc3RfYzAxOC5oCmluZGV4IDM0ZjcyYzguLmJkMTk2NTEgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE4L3Rlc3RfYzAxOC5oCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE4L3Rlc3RfYzAxOC5oCkBAIC0yNyw0ICsyNyw1IEBACiBleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2MwMThfY3J5cHRvX2xpc3RbXTsKIAogaW50MzJfdCBwc2FfZ2VuZXJhdG9yX3JlYWRfdGVzdChzZWN1cml0eV90IGNhbGxlcik7CitpbnQzMl90IHBzYV9nZW5lcmF0b3JfcmVhZF9uZWdhdGl2ZV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKTsKICNlbmRpZiAvKiBfVEVTVF9DMDE4X0NMSUVOVF9URVNUU19IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTgvdGVzdF9kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxOC90ZXN0X2RhdGEuaAppbmRleCA5NTA2ZTE3Li5mMmMxMzZlIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxOC90ZXN0X2RhdGEuaAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxOC90ZXN0X2RhdGEuaApAQCAtNzYsNyArNzYsNyBAQAogezB4NzAsIDB4MjQsIDB4NTUsIDB4MEMsIDB4MTQsIDB4OUQsIDB4RUQsIDB4Mjl9LAogIERFU184Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9ERVJJVkUsIFBTQV9BTEdfSEtERihQU0FfQUxHX1NIQV8xKSwKICB7MH0sIDAsIHswfSwgMCwgNjQsCi0gNzAsIFBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfQ0FQQUNJVFkKKyA3MCwgUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9EQVRBCiB9LAogCiB7IlRlc3QgcHNhX2dlbmVyYXRvcl9yZWFkIHRvIHJlcXVlc3QgbWF4aW11bSBjYXBhY2l0eVxuIiwgNCwgUFNBX0tFWV9UWVBFX0RFUklWRSwKQEAgLTkwLDcgKzkwLDcgQEAKIHsweDcwLCAweDI0LCAweDU1LCAweDBDLCAweDE0LCAweDlELCAweEVELCAweDI5fSwKICBERVNfOEJfS0VZX1NJWkUsIFBTQV9LRVlfVVNBR0VfREVSSVZFLCBQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMSksCiAgezB9LCAwLCB7MH0sIDAsICgyNTUgKiAyMCksCi0gKCgyNTUgKiAyMCkgKyAxKSwgUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9DQVBBQ0lUWQorICgoMjU1ICogMjApICsgMSksIFBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfREFUQQogfSwKICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxOS90ZXN0X2MwMTkuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE5L3Rlc3RfYzAxOS5jCmluZGV4IGMxMTA4OTIuLjNmMGE2NzAgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE5L3Rlc3RfYzAxOS5jCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDE5L3Rlc3RfYzAxOS5jCkBAIC0yNCw2ICsyNCw3IEBACiBjbGllbnRfdGVzdF90IHRlc3RfYzAxOV9jcnlwdG9fbGlzdFtdID0gewogICAgIE5VTEwsCiAgICAgcHNhX2dldF9nZW5lcmF0b3JfY2FwYWNpdHlfdGVzdCwKKyAgICBwc2FfZ2V0X2dlbmVyYXRvcl9jYXBhY2l0eV9uZWdhdGl2ZV90ZXN0LAogICAgIE5VTEwsCiB9OwogCkBAIC05NCwyNyArOTUsNjYgQEAKICAgICAgICAgICAgIC8qIEFib3J0IGEgZ2VuZXJhdG9yICovCiAgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFTkVSQVRPUl9BQk9SVCwgJmdlbmVyYXRvcik7CiAgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDgpKTsKKworICAgICAgICAgICAgLyogRGVzdHJveSB0aGUga2V5ICovCisgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0RFU1RST1lfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChjYXBhY2l0eSwgY2hlY2sxW2ldLmNhcGFjaXR5LCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoY2FwYWNpdHksIGNoZWNrMVtpXS5jYXBhY2l0eSwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMCkpOwogCiAgICAgICAgIC8qIEdlbmVyYXRlIHJhbmRvbSBieXRlcyAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFTkVSQVRPUl9SRUFELCAmZ2VuZXJhdG9yLCBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0uc2l6ZSk7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTApKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxMSkpOwogCiAgICAgICAgIHJlbWFpbmluZ19zaXplID0gY2hlY2sxW2ldLmNhcGFjaXR5IC0gY2hlY2sxW2ldLnNpemU7CiAKICAgICAgICAgLyogUmV0cmlldmUgdGhlIGN1cnJlbnQgY2FwYWNpdHkgb2YgYSBnZW5lcmF0b3IgKi8KICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRVRfR0VORVJBVE9SX0NBUEFDSVRZLCAmZ2VuZXJhdG9yLCAmY2FwYWNpdHkpOwotICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDExKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTIpKTsKIAotICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChjYXBhY2l0eSwgcmVtYWluaW5nX3NpemUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTIpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoY2FwYWNpdHksIHJlbWFpbmluZ19zaXplLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEzKSk7CiAKICAgICAgICAgLyogQWJvcnQgYSBnZW5lcmF0b3IgKi8KICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRU5FUkFUT1JfQUJPUlQsICZnZW5lcmF0b3IpOwotICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEzKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTQpKTsKKworICAgICAgICAvKiBEZXN0cm95IHRoZSBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19ERVNUUk9ZX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDE1KSk7CisgICAgfQorCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworaW50MzJfdCBwc2FfZ2V0X2dlbmVyYXRvcl9jYXBhY2l0eV9uZWdhdGl2ZV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGk7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgY2FwYWNpdHk7CisgICAgcHNhX2NyeXB0b19nZW5lcmF0b3JfdCAgZ2VuZXJhdG9yW10gPSB7cHNhX2NyeXB0b19nZW5lcmF0b3JfaW5pdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9DUllQVE9fR0VORVJBVE9SX0lOSVQsIHswfSB9OworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGdlbmVyYXRvcl9jb3VudCA9IHNpemVvZihnZW5lcmF0b3IpL3NpemVvZihnZW5lcmF0b3JbMF0pOworICAgIGludDMyX3QgICAgICAgICAgICAgICAgIHN0YXR1czsKKworICAgIC8qIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSovCisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTklUKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKKworICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gIiwgZ190ZXN0X2NvdW50KyspOworICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIlRlc3QgcHNhX2dldF9nZW5lcmF0b3JfY2FwYWNpdHkgd2l0aG91dCBzZXR1cFxuIiwgMCk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgZ2VuZXJhdG9yX2NvdW50OyBpKyspCisgICAgeworICAgICAgICAvKiBSZXRyaWV2ZSB0aGUgY3VycmVudCBjYXBhY2l0eSBvZiBhIGdlbmVyYXRvciAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFVF9HRU5FUkFUT1JfQ0FQQUNJVFksICZnZW5lcmF0b3JbaV0sICZjYXBhY2l0eSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0JBRF9TVEFURSwgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKKyAgICAgICAgLyogQWJvcnQgYSBnZW5lcmF0b3IgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRU5FUkFUT1JfQUJPUlQsICZnZW5lcmF0b3JbaV0pOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKICAgICB9CiAKICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMTkvdGVzdF9jMDE5LmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxOS90ZXN0X2MwMTkuaAppbmRleCBkYTI5MzY5Li5kODkyNGQzIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxOS90ZXN0X2MwMTkuaAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAxOS90ZXN0X2MwMTkuaApAQCAtMjcsNCArMjcsNSBAQAogZXh0ZXJuIGNsaWVudF90ZXN0X3QgdGVzdF9jMDE5X2NyeXB0b19saXN0W107CiAKIGludDMyX3QgcHNhX2dldF9nZW5lcmF0b3JfY2FwYWNpdHlfdGVzdChzZWN1cml0eV90IGNhbGxlcik7CitpbnQzMl90IHBzYV9nZXRfZ2VuZXJhdG9yX2NhcGFjaXR5X25lZ2F0aXZlX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpOwogI2VuZGlmIC8qIF9URVNUX0MwMTlfQ0xJRU5UX1RFU1RTX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMC90ZXN0X2MwMjAuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIwL3Rlc3RfYzAyMC5jCmluZGV4IDcwMGMzZGUuLjAzNjNkMDMgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIwL3Rlc3RfYzAyMC5jCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIwL3Rlc3RfYzAyMC5jCkBAIC03OCwxMiArNzgsMTIgQEAKICAgICAgICAgLyogU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX1NFVF9LRVlfUE9MSUNZLCBjaGVjazFbaV0ua2V5X2hhbmRsZVtTTE9UXzFdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcG9saWN5KTsKLSAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOwogCiAgICAgICAgIC8qIEltcG9ydCB0aGUga2V5IGRhdGEgaW50byB0aGUga2V5IHNsb3QgKi8KICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19JTVBPUlRfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZVtTTE9UXzFdLAogICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X3R5cGVbU0xPVF8xXSwgY2hlY2sxW2ldLmtleV9kYXRhLCBjaGVjazFbaV0ua2V5X2xlbmd0aCk7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKIAogICAgICAgICAvKiBTZXQgdXAgYSBrZXkgZGVyaXZhdGlvbiBvcGVyYXRpb24uIFVzaW5nIHRoaXMgZnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSB0aGUgZ2VuZXJhdGUgYXMKICAgICAgICAgICogWE9SIG9yIFBSTkcgZ2VuZXJhdG9yIGluaXRpYWxpemF0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZC4KQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfREVSSVZBVElPTiwgJmdlbmVyYXRvciwKICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9oYW5kbGVbU0xPVF8xXSwgIGNoZWNrMVtpXS5rZXlfYWxnW1NMT1RfMV0sICZzYWx0LCBzYWx0X2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgJmxhYmVsLCBsYWJlbF9sZW5ndGgsIGNoZWNrMVtpXS5jYXBhY2l0eSk7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKIAogICAgICAgICAvKiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwKICAgICAgICAgICogdXNhZ2Ugb2YgdGhlIGtleQpAQCAtMTA0LDMyICsxMDQsNDAgQEAKIAogICAgICAgICAvKiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgKi8KICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksICZjaGVjazFbaV0ua2V5X2hhbmRsZVtTTE9UXzJdKTsKLSAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOwogCiAgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2sxW2ldLmtleV9oYW5kbGVbU0xPVF8yXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBvbGljeSk7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDgpKTsKIAogICAgICAgICAvKiBDcmVhdGUgYSBzeW1tZXRyaWMga2V5IGZyb20gZGF0YSByZWFkIGZyb20gYSBnZW5lcmF0b3IgKi8KICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRU5FUkFUT1JfSU1QT1JUX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGVbU0xPVF8yXSwKICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV90eXBlW1NMT1RfMl0sIEJZVEVTX1RPX0JJVFMoY2hlY2sxW2ldLnNpemUpLCAmZ2VuZXJhdG9yKTsKLSAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKIAogICAgICAgICBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cyAhPSBQU0FfU1VDQ0VTUykKICAgICAgICAgewogICAgICAgICAgICAgLyogQWJvcnQgYSBnZW5lcmF0b3IgKi8KICAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VORVJBVE9SX0FCT1JULCAmZ2VuZXJhdG9yKTsKLSAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxMCkpOworCisgICAgICAgICAgICAvKiBEZXN0cm95IHRoZSBrZXkgKi8KKyAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fREVTVFJPWV9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlW1NMT1RfMV0pOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxMSkpOworCisgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0RFU1RST1lfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZVtTTE9UXzJdKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTIpKTsKKwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAogICAgICAgICAvKiBFeHBvcnQgYSBrZXkgaW4gYmluYXJ5IGZvcm1hdCAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0VYUE9SVF9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlW1NMT1RfMl0sIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJVRkZFUl9TSVpFLCAmbGVuZ3RoKTsKLSAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg5KSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTMpKTsKIAotICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChsZW5ndGgsIGNoZWNrMVtpXS5zaXplLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEwKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGxlbmd0aCwgY2hlY2sxW2ldLnNpemUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTQpKTsKIAogICAgICAgICBkYXRhX3N1bSA9IDA7CiAgICAgICAgIC8qIENoZWNrIHRoYXQgaWYgZ2VuZXJhdGVkIGRhdGEgYXJlIHplcm8gKi8KQEAgLTEzOSw3ICsxNDcsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHNpemVvZihkYXRhKSk7Ci0gICAgICAgIFRFU1RfQVNTRVJUX05PVF9FUVVBTChkYXRhX3N1bSwgMCwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMikpOworICAgICAgICBURVNUX0FTU0VSVF9OT1RfRVFVQUwoZGF0YV9zdW0sIDAsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTUpKTsKIAogICAgICAgICByZW1haW5pbmdfc2l6ZSA9IGNoZWNrMVtpXS5jYXBhY2l0eSAtIGNoZWNrMVtpXS5zaXplOwogICAgICAgICBpZiAocmVtYWluaW5nX3NpemUgPiAwKQpAQCAtMTU2LDI1ICsxNjQsMjUgQEAKIAogICAgICAgICAgICAgLyogQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5ICovCiAgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgJmNoZWNrMVtpXS5rZXlfaGFuZGxlW1NMT1RfM10pOwotICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDE2KSk7CiAKICAgICAgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KICAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1ksIGNoZWNrMVtpXS5rZXlfaGFuZGxlW1NMT1RfM10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcG9saWN5KTsKLSAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTIpKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTcpKTsKIAogICAgICAgICAgICAgLyogQ3JlYXRlIGEgc3ltbWV0cmljIGtleSBmcm9tIGRhdGEgcmVhZCBmcm9tIGEgZ2VuZXJhdG9yICovCiAgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFTkVSQVRPUl9JTVBPUlRfS0VZLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9oYW5kbGVbU0xPVF8zXSwgY2hlY2sxW2ldLmtleV90eXBlW1NMT1RfMl0sCiAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFU19UT19CSVRTKGNoZWNrMVtpXS5zaXplKSwgJmdlbmVyYXRvcik7Ci0gICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEzKSk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDE4KSk7CiAKICAgICAgICAgICAgIC8qIEV4cG9ydCBhIGtleSBpbiBiaW5hcnkgZm9ybWF0ICovCiAgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0VYUE9SVF9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlW1NMT1RfM10sIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICBCVUZGRVJfU0laRSwgJmxlbmd0aCk7Ci0gICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDE0KSk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDE5KSk7CiAKLSAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGxlbmd0aCwgcmVtYWluaW5nX3NpemUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTUpKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGxlbmd0aCwgcmVtYWluaW5nX3NpemUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjApKTsKIAogICAgICAgICAgICAgZGF0YV9zdW0gPSAwOwogICAgICAgICAgICAgLyogQ2hlY2sgdGhhdCBpZiBnZW5lcmF0ZWQgZGF0YSBhcmUgemVybyAqLwpAQCAtMTg0LDcgKzE5Miw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1lbXNldChkYXRhLCAwLCBzaXplb2YoZGF0YSkpOwotICAgICAgICAgICAgVEVTVF9BU1NFUlRfTk9UX0VRVUFMKGRhdGFfc3VtLCAwLCBURVNUX0NIRUNLUE9JTlRfTlVNKDE2KSk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9OT1RfRVFVQUwoZGF0YV9zdW0sIDAsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjEpKTsKIAogICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsCiAgICAgICAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CkBAIC0xOTcsMjMgKzIwNSwzNyBAQAogCiAgICAgICAgICAgICAvKiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgKi8KICAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUxMT0NBVEVfS0VZLCAmY2hlY2sxW2ldLmtleV9oYW5kbGVbU0xPVF80XSk7Ci0gICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjIpKTsKIAogICAgICAgICAgICAgLyogU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAqLwogICAgICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2sxW2ldLmtleV9oYW5kbGVbU0xPVF80XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwb2xpY3kpOwotICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxNykpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyMykpOwogCiAgICAgICAgICAgICAvKiBDcmVhdGUgYSBzeW1tZXRyaWMga2V5IGZyb20gZGF0YSByZWFkIGZyb20gYSBnZW5lcmF0b3IgKi8KICAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VORVJBVE9SX0lNUE9SVF9LRVksCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2hhbmRsZVtTTE9UXzRdLCBjaGVjazFbaV0ua2V5X3R5cGVbU0xPVF8yXSwKICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVTX1RPX0JJVFMoY2hlY2sxW2ldLnNpemUpLCAmZ2VuZXJhdG9yKTsKLSAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9DQVBBQ0lUWSwgVEVTVF9DSEVDS1BPSU5UX05VTSgxOCkpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5TVUZGSUNJRU5UX0RBVEEsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjQpKTsKKworICAgICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19ERVNUUk9ZX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGVbU0xPVF8zXSk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDI1KSk7CisKKyAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fREVTVFJPWV9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlW1NMT1RfNF0pOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyNikpOworCiAgICAgICAgIH0KIAogICAgICAgICAvKiBBYm9ydCBhIGdlbmVyYXRvciAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFTkVSQVRPUl9BQk9SVCwgJmdlbmVyYXRvcik7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTkpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyNykpOworCisgICAgICAgIC8qIERlc3Ryb3kgdGhlIGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0RFU1RST1lfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZVtTTE9UXzFdKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyOCkpOworCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fREVTVFJPWV9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlW1NMT1RfMl0pOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDI5KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKQEAgLTI5MSwxMSArMzEzLDE2IEBACiAgICAgICAgIC8qIENyZWF0ZSBhIHN5bW1ldHJpYyBrZXkgZnJvbSBkYXRhIHJlYWQgZnJvbSBhIGdlbmVyYXRvciAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFTkVSQVRPUl9JTVBPUlRfS0VZLCBjaGVjazJbaV0ua2V5X2hhbmRsZVtTTE9UXzFdLAogICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X3R5cGVbU0xPVF8yXSwgY2hlY2syW2ldLnNpemUsICZnZW5lcmF0b3IpOwotICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9PQ0NVUElFRF9TTE9ULCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfQUxSRUFEWV9FWElTVFMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOSkpOwogCiAgICAgICAgIC8qIEFib3J0IGEgZ2VuZXJhdG9yICovCiAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VORVJBVE9SX0FCT1JULCAmZ2VuZXJhdG9yKTsKICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CisKKyAgICAgICAgLyogRGVzdHJveSB0aGUga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fREVTVFJPWV9LRVksIGNoZWNrMltpXS5rZXlfaGFuZGxlW1NMT1RfMV0pOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKwogICAgIH0KIAogICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMC90ZXN0X2RhdGEuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIwL3Rlc3RfZGF0YS5oCmluZGV4IDk1ZmU3N2IuLjUxMjYyNWQgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIwL3Rlc3RfZGF0YS5oCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIwL3Rlc3RfZGF0YS5oCkBAIC02Nyw3ICs2Nyw3IEBACiB7MHg3MCwgMHgyNCwgMHg1NSwgMHgwQywgMHgxNCwgMHg5RCwgMHhFRCwgMHgyOX0sCiAgREVTXzhCX0tFWV9TSVpFLCB7UFNBX0tFWV9VU0FHRV9ERVJJVkUsIFBTQV9LRVlfVVNBR0VfRVhQT1JUfSwKIHtQU0FfQUxHX0hLREYoUFNBX0FMR19TSEFfMSksIFBTQV9BTEdfQ1RSfSwKLSA2NCwgODAsIFBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfQ0FQQUNJVFkKKyA2NCwgODAsIFBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfREFUQQogfSwKICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMS90ZXN0X2MwMjEuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIxL3Rlc3RfYzAyMS5jCmluZGV4IDY0NjE5ZDEuLjdhM2MzOWMgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIxL3Rlc3RfYzAyMS5jCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIxL3Rlc3RfYzAyMS5jCkBAIC0xMDUsNiArMTA1LDEwIEBACiAgICAgICAgIC8qIEFib3J0IHRoZSBnZW5lcmF0b3IgKi8KICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRU5FUkFUT1JfQUJPUlQsICZnZW5lcmF0b3IpOwogICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEwKSk7CisKKyAgICAgICAgLyogRGVzdHJveSB0aGUga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fREVTVFJPWV9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxMSkpOwogICAgIH0KIAogICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMi90ZXN0X2MwMjIuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIyL3Rlc3RfYzAyMi5jCmluZGV4IDhmOGFjNjAuLjA0OWU4ZDEgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIyL3Rlc3RfYzAyMi5jCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDIyL3Rlc3RfYzAyMi5jCkBAIC05NCwxOCArOTQsMjcgQEAKICAgICAgICAgICAgIC8qIEFib3J0IHRoZSBnZW5lcmF0b3IgKi8KICAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VORVJBVE9SX0FCT1JULCAmZ2VuZXJhdG9yKTsKICAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworCisgICAgICAgICAgICAvKiBEZXN0cm95IHRoZSBrZXkgKi8KKyAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fREVTVFJPWV9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOworCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCiAgICAgICAgIC8qIFJldHJpZXZlIHRoZSBjdXJyZW50IGNhcGFjaXR5IG9mIGEgZ2VuZXJhdG9yICovCiAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VUX0dFTkVSQVRPUl9DQVBBQ0lUWSwgJmdlbmVyYXRvciwgJmNhcGFjaXR5KTsKLSAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOwogCi0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGNhcGFjaXR5LCBjaGVjazFbaV0uY2FwYWNpdHksIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChjYXBhY2l0eSwgY2hlY2sxW2ldLmNhcGFjaXR5LCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKIAogICAgICAgICAvKiBBYm9ydCB0aGUgZ2VuZXJhdG9yICovCiAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VORVJBVE9SX0FCT1JULCAmZ2VuZXJhdG9yKTsKLSAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg5KSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTApKTsKKworICAgICAgICAvKiBEZXN0cm95IHRoZSBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19ERVNUUk9ZX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDExKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKQEAgLTE0MSw3ICsxNTAsNyBAQAogICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfU0VUX1VTQUdFLCAmcG9saWN5LCBjaGVjazJbaV0udXNhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfYWxnKTsKIAotICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2tleV9kZXJpdmF0aW9uIHdpdGggaW52YWxpZCBrZXkgaGFuZGxlXG4iLAorICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2tleV9kZXJpdmF0aW9uIHdpdGggSW52YWxpZCBrZXkgaGFuZGxlXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOwogICAgICAgICAvKiBTZXQgdXAgYSBrZXkgZGVyaXZhdGlvbiBvcGVyYXRpb24uIFVzaW5nIHRoaXMgZnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSB0aGUgZ2VuZXJhdGUgYXMKICAgICAgICAgICogWE9SIG9yIFBSTkcgZ2VuZXJhdG9yIGluaXRpYWxpemF0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZC4KQEAgLTE1Miw3ICsxNjEsNyBAQAogICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0uY2FwYWNpdHkpOwogICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSwgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CiAKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9rZXlfZGVyaXZhdGlvbiB3aXRoIHplcm8gYXMga2V5IGhhbmRsZVxuIiwKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9rZXlfZGVyaXZhdGlvbiB3aXRoIFplcm8gYXMga2V5IGhhbmRsZVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKICAgICAgICAgLyogU2V0IHVwIGEga2V5IGRlcml2YXRpb24gb3BlcmF0aW9uLiBVc2luZyB0aGlzIGZ1bmN0aW9uIHRvIGluaXRpYWxpemUgdGhlIGdlbmVyYXRlIGFzCiAgICAgICAgICAqIFhPUiBvciBQUk5HIGdlbmVyYXRvciBpbml0aWFsaXphdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQuCkBAIC0xNjMsNyArMTcyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmNhcGFjaXR5KTsKICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOwogCi0gICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2Ffa2V5X2Rlcml2YXRpb24gd2l0aCBlbXB0eSBrZXkgaGFuZGxlXG4iLAorICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2tleV9kZXJpdmF0aW9uIHdpdGggRW1wdHkga2V5IGhhbmRsZVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKICAgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgJmVtcHR5X2tleV9oYW5kbGUpOwpAQCAtMTgxLDcgKzE5MCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGVtcHR5X2tleV9oYW5kbGUsIGNoZWNrMltpXS5rZXlfYWxnLCBjaGVjazJbaV0uc2FsdCwKICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLnNhbHRfbGVuZ3RoLCBjaGVjazJbaV0ubGFiZWwsIGNoZWNrMltpXS5sYWJlbF9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5jYXBhY2l0eSk7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0VNUFRZX1NMT1QsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTApKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTApKTsKICAgICB9CiAKICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjIvdGVzdF9kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMi90ZXN0X2RhdGEuaAppbmRleCBlY2Q1Y2RlLi43ZGNjOTRmIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMi90ZXN0X2RhdGEuaAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyMi90ZXN0X2RhdGEuaApAQCAtMTA0LDYgKzEwNCwxNCBAQAogIFBTQV9FUlJPUl9OT1RfUEVSTUlUVEVECiB9LAogI2VuZGlmCisKK3siVGVzdCBwc2Ffa2V5X2Rlcml2YXRpb24gd2l0aCB1bnN1cHBvcnRlZCBrZXkgZGVyaXZhdGlvbiBhbGdvcml0aG1cbiIsIDE0LCBQU0FfS0VZX1RZUEVfREVSSVZFLAorezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCisgMHg1RiwgMHhDOX0sCisgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX0tFWV9VU0FHRV9ERVJJVkUsIFBTQV9BTEdfSEtERihQU0FfQUxHX0NBVEVHT1JZX0hBU0gpLAorIHswfSwgMCwgezB9LCAwLCAzMiwKKyBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRAorfSwKICNlbmRpZgogCiAjaWZkZWYgQVJDSF9URVNUX1JTQV9QS0NTMVYxNV9DUllQVApAQCAtMTE2LDcgKzEyNCw2IEBACiAgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKIH0sCiAjZW5kaWYKLQogfTsKIAogc3RhdGljIHRlc3RfZGF0YSBjaGVjazJbXSA9IHsKQEAgLTEzMiw1ICsxMzksNCBAQAogfSwKICNlbmRpZgogI2VuZGlmCi0KIH07CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyNC90ZXN0X2MwMjQuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI0L3Rlc3RfYzAyNC5jCmluZGV4IGEzNzVlZmUuLjE2YjUyZTYgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI0L3Rlc3RfYzAyNC5jCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI0L3Rlc3RfYzAyNC5jCkBAIC05MCwxMiArOTAsMTggQEAKICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CiAKICAgICAgICAgaWYgKGlzX2J1ZmZlcl9lbXB0eShjaGVjazFbaV0ubm9uY2UsIGNoZWNrMVtpXS5ub25jZV9sZW5ndGgpID09IFRSVUUpCisgICAgICAgIHsKICAgICAgICAgICAgIG5vbmNlID0gTlVMTDsKKyAgICAgICAgICAgIGNoZWNrMVtpXS5ub25jZV9sZW5ndGggPSAwOworICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG5vbmNlID0gY2hlY2sxW2ldLm5vbmNlOwogCiAgICAgICAgIGlmIChpc19idWZmZXJfZW1wdHkoY2hlY2sxW2ldLmFkZGl0aW9uYWxfZGF0YSwgY2hlY2sxW2ldLmFkZGl0aW9uYWxfZGF0YV9sZW5ndGgpID09IFRSVUUpCisgICAgICAgIHsKICAgICAgICAgICAgIGFkZGl0aW9uYWxfZGF0YSA9IE5VTEw7CisgICAgICAgICAgICBjaGVjazFbaV0uYWRkaXRpb25hbF9kYXRhX2xlbmd0aCA9IDA7CisgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgYWRkaXRpb25hbF9kYXRhID0gY2hlY2sxW2ldLmFkZGl0aW9uYWxfZGF0YTsKIApAQCAtMTA4LDE2ICsxMTQsMjUgQEAKICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKIAogICAgICAgICBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cyAhPSBQU0FfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgLyogRGVzdHJveSB0aGUga2V5ICovCisgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0RFU1RST1lfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKyAgICAgICAgfQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgLyogQ2hlY2sgaWYgdGhlIGxlbmd0aCBtYXRjaGVzICovCiAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGNpcGhlcnRleHRfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0uZXhwZWN0ZWRfY2lwaGVydGV4dF9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOworICAgICAgICAgICAgICAgICAgICBURVNUX0NIRUNLUE9JTlRfTlVNKDgpKTsKIAogICAgICAgICAvKiBDaGVjayBpZiB0aGUgZGF0YSBtYXRjaGVzICovCiAgICAgICAgIFRFU1RfQVNTRVJUX01FTUNNUChjaXBoZXJ0ZXh0LCBjaGVjazFbaV0uZXhwZWN0ZWRfY2lwaGVydGV4dCwgY2lwaGVydGV4dF9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBURVNUX0NIRUNLUE9JTlRfTlVNKDgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOSkpOworCisgICAgICAgIC8qIERlc3Ryb3kgdGhlIGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0RFU1RST1lfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTApKTsKICAgICB9CiAKICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOwpAQCAtMTUyLDE2ICsxNjcsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9hbGcpOwogCiAgICAgICAgIGlmIChpc19idWZmZXJfZW1wdHkoY2hlY2syW2ldLm5vbmNlLCBjaGVjazJbaV0ubm9uY2VfbGVuZ3RoKSA9PSBUUlVFKQorICAgICAgICB7CiAgICAgICAgICAgICBub25jZSA9IE5VTEw7CisgICAgICAgICAgICBjaGVjazJbaV0ubm9uY2VfbGVuZ3RoID0gMDsKKyAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBub25jZSA9IGNoZWNrMltpXS5ub25jZTsKIAogICAgICAgICBpZiAoaXNfYnVmZmVyX2VtcHR5KGNoZWNrMltpXS5hZGRpdGlvbmFsX2RhdGEsIGNoZWNrMltpXS5hZGRpdGlvbmFsX2RhdGFfbGVuZ3RoKSA9PSBUUlVFKQorICAgICAgICB7CiAgICAgICAgICAgICBhZGRpdGlvbmFsX2RhdGEgPSBOVUxMOworICAgICAgICAgICAgY2hlY2syW2ldLmFkZGl0aW9uYWxfZGF0YV9sZW5ndGggPSAwOworICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFkZGl0aW9uYWxfZGF0YSA9IGNoZWNrMltpXS5hZGRpdGlvbmFsX2RhdGE7CiAKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9hZWFkX2VuY3J5cHQgLSBpbnZhbGlkIGtleSBoYW5kbGVcbiIsCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfYWVhZF9lbmNyeXB0IC0gSW52YWxpZCBrZXkgaGFuZGxlXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CiAgICAgICAgIC8qIFByb2Nlc3MgYW4gYXV0aGVudGljYXRlZCBlbmNyeXB0aW9uIG9wZXJhdGlvbiAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FFQURfRU5DUllQVCwgY2hlY2syW2ldLmtleV9oYW5kbGUsCkBAIC0xNzEsNyArMTkyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgJmNpcGhlcnRleHRfbGVuZ3RoKTsKICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOwogCi0gICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfYWVhZF9lbmNyeXB0IC0gemVybyBhcyBrZXkgaGFuZGxlXG4iLAorICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2FlYWRfZW5jcnlwdCAtIFplcm8gYXMga2V5IGhhbmRsZVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOwogICAgICAgICAvKiBQcm9jZXNzIGFuIGF1dGhlbnRpY2F0ZWQgZW5jcnlwdGlvbiBvcGVyYXRpb24gKi8KICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BRUFEX0VOQ1JZUFQsIDAsCkBAIC0xODEsNyArMjAyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgJmNpcGhlcnRleHRfbGVuZ3RoKTsKICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOwogCi0gICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfYWVhZF9lbmNyeXB0IC0gZW1wdHkga2V5IGhhbmRsZVxuIiwKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9hZWFkX2VuY3J5cHQgLSBFbXB0eSBrZXkgaGFuZGxlXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CiAgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgJmNoZWNrMltpXS5rZXlfaGFuZGxlKTsKQEAgLTE5OCw3ICsyMTksNyBAQAogICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0uYWRkaXRpb25hbF9kYXRhX2xlbmd0aCwgY2hlY2syW2ldLnBsYWludGV4dCwKICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLnBsYWludGV4dF9sZW5ndGgsIGNpcGhlcnRleHQsIGNoZWNrMltpXS5jaXBoZXJ0ZXh0X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICZjaXBoZXJ0ZXh0X2xlbmd0aCk7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0VNUFRZX1NMT1QsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9ET0VTX05PVF9FWElTVCwgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI0L3Rlc3RfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjQvdGVzdF9kYXRhLmgKaW5kZXggOWY1MmVjYi4uZjI4MDAwMiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjQvdGVzdF9kYXRhLmgKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjQvdGVzdF9kYXRhLmgKQEAgLTE3Myw3ICsxNzMsNyBAQAogezB4NUQsIDB4QzEsIDB4NzIsIDB4MjMsIDB4NjYsIDB4OTYsIDB4RkQsIDB4RkMsIDB4OTMsIDB4MDYsIDB4MjcsIDB4NTIsIDB4QzcsCiAgMHgwQSwgMHhDQiwgMHgzNiwgMHg1NSwgMHgzMCwgMHhDOSwgMHg0OCwgMHg4RiwgMHg1RSwgMHhBNSwgMHhCOSwgMHg1MSwgMHhGQiwKICAweDRFfSwKLSBCVUZGRVJfU0laRSwgMjcsIFBTQV9FUlJPUl9FTVBUWV9TTE9UCisgQlVGRkVSX1NJWkUsIDI3LCBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QKIH0sCiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjUvdGVzdF9jMDI1LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyNS90ZXN0X2MwMjUuYwppbmRleCBmMWJjYzVjLi5mOWRjM2ZkIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyNS90ZXN0X2MwMjUuYworKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyNS90ZXN0X2MwMjUuYwpAQCAtODksMTIgKzg5LDE4IEBACiAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOwogCiAgICAgICAgIGlmIChpc19idWZmZXJfZW1wdHkoY2hlY2sxW2ldLm5vbmNlLCBjaGVjazFbaV0ubm9uY2VfbGVuZ3RoKSA9PSBUUlVFKQorICAgICAgICB7CiAgICAgICAgICAgICBub25jZSA9IE5VTEw7CisgICAgICAgICAgICBjaGVjazFbaV0ubm9uY2VfbGVuZ3RoID0gMDsKKyAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBub25jZSA9IGNoZWNrMVtpXS5ub25jZTsKIAogICAgICAgICBpZiAoaXNfYnVmZmVyX2VtcHR5KGNoZWNrMVtpXS5hZGRpdGlvbmFsX2RhdGEsIGNoZWNrMVtpXS5hZGRpdGlvbmFsX2RhdGFfbGVuZ3RoKSA9PSBUUlVFKQorICAgICAgICB7CiAgICAgICAgICAgICBhZGRpdGlvbmFsX2RhdGEgPSBOVUxMOworICAgICAgICAgICAgY2hlY2sxW2ldLmFkZGl0aW9uYWxfZGF0YV9sZW5ndGggPSAwOworICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFkZGl0aW9uYWxfZGF0YSA9IGNoZWNrMVtpXS5hZGRpdGlvbmFsX2RhdGE7CiAKQEAgLTEwNiwxNSArMTEyLDI1IEBACiAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CiAKICAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIERlc3Ryb3kgdGhlIGtleSAqLworICAgICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19ERVNUUk9ZX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisKICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAKICAgICAgICAgLyogQ2hlY2sgaWYgdGhlIGxlbmd0aCBtYXRjaGVzICovCiAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHBsYWludGV4dF9sZW5ndGgsIGNoZWNrMVtpXS5leHBlY3RlZF9wbGFpbnRleHRfbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CiAKICAgICAgICAgLyogQ2hlY2sgaWYgdGhlIGRhdGEgbWF0Y2hlcyAqLwogICAgICAgICBURVNUX0FTU0VSVF9NRU1DTVAocGxhaW50ZXh0LCBjaGVjazFbaV0uZXhwZWN0ZWRfcGxhaW50ZXh0LCBwbGFpbnRleHRfbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKworICAgICAgICAvKiBEZXN0cm95IHRoZSBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19ERVNUUk9ZX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEwKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKQEAgLTE0OSwxNiArMTY1LDIyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfYWxnKTsKIAogICAgICAgICBpZiAoaXNfYnVmZmVyX2VtcHR5KGNoZWNrMltpXS5ub25jZSwgY2hlY2syW2ldLm5vbmNlX2xlbmd0aCkgPT0gVFJVRSkKKyAgICAgICAgewogICAgICAgICAgICAgbm9uY2UgPSBOVUxMOworICAgICAgICAgICAgY2hlY2syW2ldLm5vbmNlX2xlbmd0aCA9IDA7CisgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgbm9uY2UgPSBjaGVjazJbaV0ubm9uY2U7CiAKICAgICAgICAgaWYgKGlzX2J1ZmZlcl9lbXB0eShjaGVjazJbaV0uYWRkaXRpb25hbF9kYXRhLCBjaGVjazJbaV0uYWRkaXRpb25hbF9kYXRhX2xlbmd0aCkgPT0gVFJVRSkKKyAgICAgICAgewogICAgICAgICAgICAgYWRkaXRpb25hbF9kYXRhID0gTlVMTDsKKyAgICAgICAgICAgIGNoZWNrMltpXS5hZGRpdGlvbmFsX2RhdGFfbGVuZ3RoID0gMDsKKyAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhZGRpdGlvbmFsX2RhdGEgPSBjaGVjazJbaV0uYWRkaXRpb25hbF9kYXRhOwogCi0gICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfYWVhZF9kZWNyeXB0IC0gaW52YWxpZCBrZXkgaGFuZGxlXG4iLAorICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2FlYWRfZGVjcnlwdCAtIEludmFsaWQga2V5IGhhbmRsZVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOwogICAgICAgICAvKiBQcm9jZXNzIGFuIGF1dGhlbnRpY2F0ZWQgZGVjcnlwdGlvbiBvcGVyYXRpb24gKi8KICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BRUFEX0RFQ1JZUFQsIGNoZWNrMltpXS5rZXlfaGFuZGxlLApAQCAtMTY3LDcgKzE4OSw3IEBACiAgICAgICAgICAgICAgICAgICBwbGFpbnRleHQsIGNoZWNrMltpXS5wbGFpbnRleHRfc2l6ZSwgJnBsYWludGV4dF9sZW5ndGgpOwogICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSwgVEVTVF9DSEVDS1BPSU5UX05VTSgzKSk7CiAKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9hZWFkX2RlY3J5cHQgLSB6ZXJvIGFzIGtleSBoYW5kbGVcbiIsCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfYWVhZF9kZWNyeXB0IC0gWmVybyBhcyBrZXkgaGFuZGxlXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CiAgICAgICAgIC8qIFByb2Nlc3MgYW4gYXV0aGVudGljYXRlZCBkZWNyeXB0aW9uIG9wZXJhdGlvbiAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FFQURfREVDUllQVCwgMCwKQEAgLTE3Niw3ICsxOTgsNyBAQAogICAgICAgICAgICAgICAgICAgcGxhaW50ZXh0LCBjaGVjazJbaV0ucGxhaW50ZXh0X3NpemUsICZwbGFpbnRleHRfbGVuZ3RoKTsKICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNCkpOwogCi0gICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfYWVhZF9kZWNyeXB0IC0gZW1wdHkga2V5IGhhbmRsZVxuIiwKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9hZWFkX2RlY3J5cHQgLSBFbXB0eSBrZXkgaGFuZGxlXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CiAgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgJmNoZWNrMltpXS5rZXlfaGFuZGxlKTsKQEAgLTE5Miw3ICsyMTQsNyBAQAogICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9hbGcsIG5vbmNlLCBjaGVjazJbaV0ubm9uY2VfbGVuZ3RoLCBhZGRpdGlvbmFsX2RhdGEsCiAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0uYWRkaXRpb25hbF9kYXRhX2xlbmd0aCwgY2hlY2syW2ldLmNpcGhlcnRleHQsIGNoZWNrMltpXS5jaXBoZXJ0ZXh0X3NpemUsCiAgICAgICAgICAgICAgICAgICBwbGFpbnRleHQsIGNoZWNrMltpXS5wbGFpbnRleHRfc2l6ZSwgJnBsYWludGV4dF9sZW5ndGgpOwotICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9FTVBUWV9TTE9ULCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOwogICAgICB9CiAKICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI1L3Rlc3RfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjUvdGVzdF9kYXRhLmgKaW5kZXggNGFkMGUxNy4uNDRjZTUxMyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjUvdGVzdF9kYXRhLmgKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjUvdGVzdF9kYXRhLmgKQEAgLTE4OCw2ICsxODgsMjMgQEAKICAweEQxLCAweEZDLCAweEI2LCAweDkxLCAweEYzLCAweDQwLCAweDZDLCAweEJGLCAweDUzLCAweDFGLCAweDgzLCAweEE0fSwKICAzOCwgMjMsIFBTQV9FUlJPUl9JTlZBTElEX1NJR05BVFVSRQogfSwKKworeyJUZXN0IHBzYV9hZWFkX2RlY3J5cHQgLSBJbnZhbGlkIHRhZyBsZW5ndGggMFxuIiwgMTEsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHhENywgMHg4MiwgMHg4RCwgMHgxMywgMHhCMiwgMHhCMCwgMHhCRCwgMHhDMywgMHgyNSwgMHhBNywgMHg2MiwgMHgzNiwgMHhERiwKKyAweDkzLCAweENDLCAweDZCfSwKKyBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfS0VZX1VTQUdFX0RFQ1JZUFQsIFBTQV9BTEdfQUVBRF9XSVRIX1RBR19MRU5HVEgoUFNBX0FMR19DQ00sIDApLAorezB4NDgsIDB4YzAsIDB4OTAsIDB4NjksIDB4MzAsIDB4NTYsIDB4MWUsIDB4MGEsIDB4YjAsIDB4ZWYsIDB4NGMsIDB4ZDksIDB4NzJ9LAorIDEzLAorezB4NDAsIDB4YTIsIDB4N2MsIDB4MWQsIDB4MWUsIDB4MjMsIDB4ZWEsIDB4M2QsIDB4YmUsIDB4ODAsIDB4NTYsIDB4YjIsIDB4NzcsCisgMHg0OCwgMHg2MSwgMHhhNCwgMHhhMiwgMHgwMSwgMHhjYywgMHhlNCwgMHg5ZiwgMHgxOSwgMHg5OSwgMHg3ZCwgMHgxOSwgMHgyMCwKKyAweDZkLCAweDhjLCAweDhhLCAweDM0LCAweDM5LCAweDUxfSwgMzIsCit7MHg0NSwgMHgzNSwgMHhkMSwgMHgyYiwgMHg0MywgMHg3NywgMHg5MiwgMHg4YSwgMHg3YywgMHgwYSwgMHg2MSwgMHhjOSwgMHhmOCwKKyAweDI1LCAweGE0LCAweDg2LCAweDcxLCAweGVhLCAweDA1LCAweDkxLCAweDA3LCAweDQ4LCAweGM4LCAweGVmfSwgQlVGRkVSX1NJWkUsCit7MHgyNiwgMHhjNSwgMHg2OSwgMHg2MSwgMHhjMCwgMHgzNSwgMHhhNywgMHhlNCwgMHg1MiwgMHhjYywgMHhlNiwgMHgxYiwgMHhjNiwKKyAweGVlLCAweDIyLCAweDBkLCAweDc3LCAweGIzLCAweGY5LCAweDRkLCAweDE4LCAweGZkLCAweDEwLCAweGI2LCAweGQ4LCAweDBlLAorIDB4OGIsIDB4ZjgsIDB4MGYsIDB4NGEsIDB4NDYsIDB4Y2EsIDB4YjAsIDB4NmQsIDB4NDMsIDB4MTMsIDB4ZjAsIDB4ZGIsIDB4OWIsCisgMHhlOX0sIDQwLCAyNCwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK30sCiAjZW5kaWYKICNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI2L3Rlc3RfYzAyNi5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjYvdGVzdF9jMDI2LmMKaW5kZXggOWY0M2E3YS4uMDNkOWRlZiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjYvdGVzdF9jMDI2LmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjYvdGVzdF9jMDI2LmMKQEAgLTc5LDkgKzc5LDI1IEBACiAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfaGFuZGxlLCBjaGVjazFbaV0ua2V5X2FsZyk7CiAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CiAKLSAgICAgICAgLyogQWJvcnQgYSBNQUMgb3BlcmF0aW9uICovCisgICAgICAgIC8qIFdoZXRoZXIgc2V0dXAgc3VjY2VlZGVkIG9yIGZhaWxlZCwgYWJvcnQgbXVzdCBzdWNjZWVkLgorICAgICAgICAgICBBYm9ydCBhIE1BQyBvcGVyYXRpb24KKyAgICAgICAgICovCiAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fTUFDX0FCT1JULCAmb3BlcmF0aW9uKTsKICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisKKyAgICAgICAgLyogSWYgc2V0dXAgZmFpbGVkLCByZXByb2R1Y2UgdGhlIGZhaWx1cmUsIHNvIHRoYXQgdGhlIGNhbGxlciBjYW4KKyAgICAgICAgICogdGVzdCB0aGUgcmVzdWx0aW5nIHN0YXRlIG9mIHRoZSBvcGVyYXRpb24gb2JqZWN0LgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fTUFDX1NJR05fU0VUVVAsICZvcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfaGFuZGxlLCBjaGVjazFbaV0ua2V5X2FsZyk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOworICAgICAgICB9CisKKyAgICAgICAgLyogRGVzdHJveSB0aGUga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fREVTVFJPWV9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg5KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKQEAgLTE0MSw3ICsxNTcsNyBAQAogICAgICAgICAvKiBTdGFydCBhIG11bHRpcGFydCBNQUMgY2FsY3VsYXRpb24gb3BlcmF0aW9uICovCiAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fTUFDX1NJR05fU0VUVVAsICZvcGVyYXRpb24sCiAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfaGFuZGxlLCBjaGVjazJbaV0ua2V5X2FsZyk7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0VNUFRZX1NMT1QsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9ET0VTX05PVF9FWElTVCwgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI3L3Rlc3RfYzAyNy5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjcvdGVzdF9jMDI3LmMKaW5kZXggZTc2MTg0OC4uYjZlMzI4OCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjcvdGVzdF9jMDI3LmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjcvdGVzdF9jMDI3LmMKQEAgLTkwLDIyICs5MCwzMSBAQAogICAgICAgICAgICAgLyogQWJvcnQgYSBNQUMgb3BlcmF0aW9uICovCiAgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX01BQ19BQk9SVCwgJm9wZXJhdGlvbik7CiAgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDgpKTsKKworICAgICAgICAgICAgLyogRGVzdHJveSB0aGUga2V5ICovCisgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0RFU1RST1lfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAogICAgICAgICAvKiBGaW5pc2ggdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBNQUMgb2YgYSBtZXNzYWdlICovCiAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fTUFDX1NJR05fRklOSVNILCAmb3BlcmF0aW9uLCBkYXRhLAotICAgICAgICAgICAgICAgICAgICBzaXplb2YoZGF0YSkvc2l6ZW9mKGRhdGFbMF0pLCAmbGVuZ3RoKTsKLSAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg5KSk7CisgICAgICAgICAgICAgICAgICAgIHNpemVvZihkYXRhKSwgJmxlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTApKTsKIAogICAgICAgICAvKiBBZGQgYSBtZXNzYWdlIGZyYWdtZW50IHRvIHRoZSBzYW1lIG11bHRpcGFydCBNQUMgb3BlcmF0aW9uKi8KICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19NQUNfVVBEQVRFLCAmb3BlcmF0aW9uLCBjaGVjazFbaV0uZGF0YSwKICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmRhdGFfc2l6ZSk7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0JBRF9TVEFURSwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMCkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9CQURfU1RBVEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTEpKTsKIAogICAgICAgICAvKiBBYm9ydCBhIE1BQyBvcGVyYXRpb24gKi8KICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19NQUNfQUJPUlQsICZvcGVyYXRpb24pOwotICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDExKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTIpKTsKKworICAgICAgICAvKiBEZXN0cm95IHRoZSBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19ERVNUUk9ZX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEzKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKQEAgLTExMywxMSArMTIyLDExIEBACiAKIGludDMyX3QgcHNhX21hY191cGRhdGVfaW52YWxpZF9vcGVyYXRvcl90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKQogewotICAgIHBzYV9tYWNfb3BlcmF0aW9uX3Qgb3BlcmF0aW9uOwotICAgIGludDMyX3QgICAgICAgICAgICAgc3RhdHVzOworICAgIGludDMyX3QgICAgICAgICAgICAgaSwgc3RhdHVzOworICAgIHBzYV9tYWNfb3BlcmF0aW9uX3Qgb3BlcmF0aW9uW10gPSB7cHNhX21hY19vcGVyYXRpb25faW5pdCgpLCBQU0FfTUFDX09QRVJBVElPTl9JTklULCB7MH0gfTsKKyAgICB1aW50MzJfdCAgICAgICAgICAgIG9wZXJhdGlvbl9jb3VudCA9IHNpemVvZihvcGVyYXRpb24pL3NpemVvZihvcGVyYXRpb25bMF0pOwogCiAgICAgbWVtc2V0KGRhdGEsIDAsIHNpemVvZihkYXRhKSk7Ci0gICAgbWVtc2V0KCZvcGVyYXRpb24sIDAsIHNpemVvZihvcGVyYXRpb24pKTsKICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdICIsIGdfdGVzdF9jb3VudCsrKTsKICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJUZXN0IHBzYV9tYWNfdXBkYXRlIHdpdGhvdXQgbWFjIHNldHVwXG4iLCAwKTsKIApAQCAtMTI1LDE0ICsxMzQsMTggQEAKICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOwogICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOwogCi0gICAgLyogU3RhcnQgYSBtdWx0aXBhcnQgTUFDIGNhbGN1bGF0aW9uIG9wZXJhdGlvbiAqLwotICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fTUFDX1VQREFURSwgJm9wZXJhdGlvbiwgZGF0YSwKLSAgICAgICAgICAgICAgICAgc2l6ZW9mKGRhdGEpL3NpemVvZihkYXRhWzBdKSk7Ci0gICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfQkFEX1NUQVRFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIpKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgb3BlcmF0aW9uX2NvdW50OyBpKyspCisgICAgewogCi0gICAgLyogQWJvcnQgYSBNQUMgb3BlcmF0aW9uICovCi0gICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19NQUNfQUJPUlQsICZvcGVyYXRpb24pOwotICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworICAgICAgICAvKiBTdGFydCBhIG11bHRpcGFydCBNQUMgY2FsY3VsYXRpb24gZm9yIGVhY2ggb3BlcmF0aW9uICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fTUFDX1VQREFURSwgJm9wZXJhdGlvbltpXSwgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVvZihkYXRhKS9zaXplb2YoZGF0YVswXSkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9CQURfU1RBVEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOworCisgICAgICAgIC8qIEFib3J0IHRoZSBNQUMgb3BlcmF0aW9ucyAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX01BQ19BQk9SVCwgJm9wZXJhdGlvbltpXSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworICAgIH0KIAogICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAyOC90ZXN0X2MwMjguYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI4L3Rlc3RfYzAyOC5jCmluZGV4IDA4OTgyNzguLjQ3NWZlYjcgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI4L3Rlc3RfYzAyOC5jCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI4L3Rlc3RfYzAyOC5jCkBAIC05NiwyNyArOTYsMzcgQEAKICAgICAgICAgICAgIC8qIEFib3J0IGEgTUFDIG9wZXJhdGlvbiAqLwogICAgICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19NQUNfQUJPUlQsICZvcGVyYXRpb24pOwogICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg5KSk7CisKKyAgICAgICAgICAgIC8qIERlc3Ryb3kgdGhlIGtleSAqLworICAgICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19ERVNUUk9ZX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxMCkpOworCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCiAgICAgICAgIC8qIENoZWNrIGlmIHRoZSBNQUMgbGVuZ3RoIG1hdGNoZXMgd2l0aCB0aGUgZXhwZWN0ZWQgbGVuZ3RoICovCi0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGxlbmd0aCwgY2hlY2sxW2ldLmV4cGVjdGVkX2xlbmd0aCwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMCkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChsZW5ndGgsIGNoZWNrMVtpXS5leHBlY3RlZF9sZW5ndGgsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTEpKTsKIAogICAgICAgICAvKiBDaGVjayBpZiB0aGUgTUFDIGRhdGEgbWF0Y2hlcyB3aXRoIHRoZSBleHBlY3RlZCBkYXRhICovCi0gICAgICAgIFRFU1RfQVNTRVJUX01FTUNNUChjaGVjazFbaV0uZXhwZWN0ZWRfZGF0YSwgZGF0YSwgbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDExKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX01FTUNNUChjaGVjazFbaV0uZXhwZWN0ZWRfZGF0YSwgZGF0YSwgbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEyKSk7CiAKICAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHNpemVvZihkYXRhKSk7CiAKLSAgICAgICAgLyogRmluaXNoIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgTUFDIG9mIGEgbWVzc2FnZSB1c2luZyBzYW1lIG9wZXJhdGlvbgorICAgICAgICAvKiBDYWxsaW5nIG1hYyBmaW5pc2ggdHdpY2UgaW4gYSByb3cuCisgICAgICAgICAqIEZpbmlzaCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIE1BQyBvZiBhIG1lc3NhZ2UgdXNpbmcgc2FtZSBvcGVyYXRpb24KICAgICAgICAgICogc2hvdWxkIHJldHVybiBlcnJvcgogICAgICAgICAgKi8KICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19NQUNfU0lHTl9GSU5JU0gsICZvcGVyYXRpb24sIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5tYWNfc2l6ZSwgJmxlbmd0aCk7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0JBRF9TVEFURSwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMikpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9CQURfU1RBVEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTMpKTsKIAogICAgICAgICAvKiBBYm9ydCBhIE1BQyBvcGVyYXRpb24gKi8KICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19NQUNfQUJPUlQsICZvcGVyYXRpb24pOwotICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEzKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTQpKTsKKworICAgICAgICAvKiBEZXN0cm95IHRoZSBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19ERVNUUk9ZX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDE1KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDI5L3Rlc3RfYzAyOS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjkvdGVzdF9jMDI5LmMKaW5kZXggZDczMmQ5Mi4uNTNiZTBkYiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjkvdGVzdF9jMDI5LmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMjkvdGVzdF9jMDI5LmMKQEAgLTc5LDkgKzc5LDI1IEBACiAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfaGFuZGxlLCBjaGVjazFbaV0ua2V5X2FsZyk7CiAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CiAKLSAgICAgICAgLyogQWJvcnQgYSBNQUMgb3BlcmF0aW9uICovCisgICAgICAgIC8qIFdoZXRoZXIgc2V0dXAgc3VjY2VlZGVkIG9yIGZhaWxlZCwgYWJvcnQgbXVzdCBzdWNjZWVkLgorICAgICAgICAgKiBBYm9ydCBhIE1BQyBvcGVyYXRpb24KKyAgICAgICAgICovCiAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fTUFDX0FCT1JULCAmb3BlcmF0aW9uKTsKICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisKKyAgICAgICAgLyogSWYgc2V0dXAgZmFpbGVkLCByZXByb2R1Y2UgdGhlIGZhaWx1cmUsIHNvIHRoYXQgdGhlIGNhbGxlciBjYW4KKyAgICAgICAgICogdGVzdCB0aGUgcmVzdWx0aW5nIHN0YXRlIG9mIHRoZSBvcGVyYXRpb24gb2JqZWN0LgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fTUFDX1ZFUklGWV9TRVRVUCwgJm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfaGFuZGxlLCBjaGVjazFbaV0ua2V5X2FsZyk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOworICAgICAgICB9CisKKyAgICAgICAgLyogRGVzdHJveSB0aGUga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fREVTVFJPWV9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg5KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKQEAgLTEzNiw3ICsxNTIsNyBAQAogICAgICAgICAvKiBTdGFydCBhIG11bHRpcGFydCBNQUMgdmVyaWZpY2F0aW9uIG9wZXJhdGlvbiAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX01BQ19WRVJJRllfU0VUVVAsICZvcGVyYXRpb24sCiAgICAgICAgICAgICAgICAgICAgIGNoZWNrMltpXS5rZXlfaGFuZGxlLCBjaGVjazJbaV0ua2V5X2FsZyk7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0VNUFRZX1NMT1QsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9ET0VTX05PVF9FWElTVCwgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDMwL3Rlc3RfYzAzMC5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzAvdGVzdF9jMDMwLmMKaW5kZXggYWQxNDA0OC4uMTc3YjBmMCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzAvdGVzdF9jMDMwLmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzAvdGVzdF9jMDMwLmMKQEAgLTk0LDE5ICs5NCwyOCBAQAogICAgICAgICAgICAgLyogQWJvcnQgYSBNQUMgb3BlcmF0aW9uICovCiAgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX01BQ19BQk9SVCwgJm9wZXJhdGlvbik7CiAgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKworICAgICAgICAgICAgLyogRGVzdHJveSB0aGUga2V5ICovCisgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0RFU1RST1lfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEwKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIC8qIEZpbmlzaCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIE1BQyBvZiBhIG1lc3NhZ2UgdXNpbmcgc2FtZSBvcGVyYXRpb24KKyAgICAgICAgLyogQ2FsbGluZyBtYWMgZmluaXNoIHR3aWNlIGluIGEgcm93LgorICAgICAgICAgKiBGaW5pc2ggdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBNQUMgb2YgYSBtZXNzYWdlIHVzaW5nIHNhbWUgb3BlcmF0aW9uCiAgICAgICAgICAqIHNob3VsZCByZXR1cm4gZXJyb3IKICAgICAgICAgICovCiAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fTUFDX1ZFUklGWV9GSU5JU0gsICZvcGVyYXRpb24sCiAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5leHBlY3RlZF9tYWMsIGNoZWNrMVtpXS5tYWNfc2l6ZSk7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0JBRF9TVEFURSwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMCkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9CQURfU1RBVEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTEpKTsKIAogICAgICAgICAvKiBBYm9ydCBhIE1BQyBvcGVyYXRpb24gKi8KICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19NQUNfQUJPUlQsICZvcGVyYXRpb24pOwotICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDExKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTIpKTsKKworICAgICAgICAvKiBEZXN0cm95IHRoZSBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19ERVNUUk9ZX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEzKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDMxL3Rlc3RfYzAzMS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzEvdGVzdF9jMDMxLmMKaW5kZXggOTk4OGZhZS4uMDQwZThhOCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzEvdGVzdF9jMDMxLmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzEvdGVzdF9jMDMxLmMKQEAgLTg2LDYgKzg2LDEwIEBACiAgICAgICAgIC8qIE11bHRpcGxlIEFib3J0IGEgTUFDIG9wZXJhdGlvbiBzaG91bGQgc3VjY2VlZCAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX01BQ19BQk9SVCwgJm9wZXJhdGlvbik7CiAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOworCisgICAgICAgIC8qIERlc3Ryb3kgdGhlIGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0RFU1RST1lfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOSkpOwogICAgIH0KIAogICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CkBAIC0xMDMsOCArMTA3LDggQEAKICAgICB1aW50OF90ICAgICAgICAgICAgIGtleV9kYXRhW10gPSB7MHgyYiwgMHg3ZSwgMHgxNSwgMHgxNiwgMHgyOCwgMHhhZSwgMHhkMiwgMHhhNiwgMHhhYiwgMHhmNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNSwgMHg4OCwgMHgwOSwgMHhjZiwgMHg0ZiwgMHgzY307CiAgICAgdWludDhfdCAgICAgICAgICAgICBpbnB1dF9kYXRhW10gPSB7MHg0OCwgMHg2OSwgMHgyMCwgMHg1NCwgMHg2OCwgMHg2NSwgMHg3MiwgMHg2NX07Ci0gICAgc2l6ZV90ICAgICAgICAgICAgICBrZXlfbGVuZ3RoID0gc2l6ZW9mKGtleV9kYXRhKS9zaXplb2Yoa2V5X2RhdGFbMF0pOwotICAgIHNpemVfdCAgICAgICAgICAgICAgaW5wdXRkYXRhX3NpemUgPSBzaXplb2YoaW5wdXRfZGF0YSkvc2l6ZW9mKGlucHV0X2RhdGFbMF0pOworICAgIHNpemVfdCAgICAgICAgICAgICAga2V5X2xlbmd0aCA9IHNpemVvZihrZXlfZGF0YSk7CisgICAgc2l6ZV90ICAgICAgICAgICAgICBpbnB1dGRhdGFfc2l6ZSA9IHNpemVvZihpbnB1dF9kYXRhKTsKICAgICBpbnQzMl90ICAgICAgICAgICAgIHN0YXR1czsKIAogICAgIG1lbXNldChkYXRhLCAwLCBzaXplb2YoZGF0YSkpOwpAQCAtMTU5LDUgKzE2Myw5IEBACiAgICAgICAgICAgICAgICAgQlVGRkVSX1NJWkUsICZsZW5ndGgpOwogICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0JBRF9TVEFURSwgVEVTVF9DSEVDS1BPSU5UX05VTSg5KSk7CiAKKyAgICAvKiBEZXN0cm95IHRoZSBrZXkgKi8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0RFU1RST1lfS0VZLCBrZXlfaGFuZGxlKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEwKSk7CisKICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzIvdGVzdF9jMDMyLmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMi90ZXN0X2MwMzIuYwppbmRleCBkZTRkY2Y3Li40NGU0NjgyIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMi90ZXN0X2MwMzIuYworKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMi90ZXN0X2MwMzIuYwpAQCAtMTExLDkgKzExMSwyMiBAQAogICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2hhbmRsZSwgY2hlY2sxW2ldLmtleV9hbGcpOwogICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOwogCi0gICAgICAgIC8qIEFib3J0IGEgY2lwaGVyIG9wZXJhdGlvbiAqLworICAgICAgICAvKiBXaGV0aGVyIHNldHVwIHN1Y2NlZWRlZCBvciBmYWlsZWQsIGFib3J0IG11c3Qgc3VjY2VlZC4KKyAgICAgICAgICogQWJvcnQgYSBjaXBoZXIgb3BlcmF0aW9uCisgICAgICAgICAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0NJUEhFUl9BQk9SVCwgJm9wZXJhdGlvbik7CiAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOworCisgICAgICAgIGlmIChjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzICE9IFBTQV9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0NJUEhFUl9FTkNSWVBUX1NFVFVQLCAmb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9oYW5kbGUsIGNoZWNrMVtpXS5rZXlfYWxnKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBEZXN0cm95IHRoZSBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19ERVNUUk9ZX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKICAgICB9CiAKICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOwpAQCAtMTczLDcgKzE4Niw3IEBACiAgICAgICAgIC8qIFNldCB0aGUga2V5IGZvciBhIG11bHRpcGFydCBzeW1tZXRyaWMgZW5jcnlwdGlvbiBvcGVyYXRpb24gKi8KICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19DSVBIRVJfRU5DUllQVF9TRVRVUCwgJm9wZXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9oYW5kbGUsIGNoZWNrMltpXS5rZXlfYWxnKTsKLSAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfRU1QVFlfU0xPVCwgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNULCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKICAgICB9CiAKICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzMvdGVzdF9jMDMzLmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMy90ZXN0X2MwMzMuYwppbmRleCA0NWQ1YjE1Li5jM2I2MDA5IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMy90ZXN0X2MwMzMuYworKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzMy90ZXN0X2MwMzMuYwpAQCAtMTExLDkgKzExMSwyMyBAQAogICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0ua2V5X2hhbmRsZSwgY2hlY2sxW2ldLmtleV9hbGcpOwogICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOwogCi0gICAgICAgIC8qIEFib3J0IGEgY2lwaGVyIG9wZXJhdGlvbiAqLworICAgICAgICAvKiBXaGV0aGVyIHNldHVwIHN1Y2NlZWRlZCBvciBmYWlsZWQsIGFib3J0IG11c3Qgc3VjY2VlZC4KKyAgICAgICAgICogQWJvcnQgYSBjaXBoZXIgb3BlcmF0aW9uCisgICAgICAgICAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0NJUEhFUl9BQk9SVCwgJm9wZXJhdGlvbik7CiAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOworCisgICAgICAgIGlmIChjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzICE9IFBTQV9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0NJUEhFUl9ERUNSWVBUX1NFVFVQLCAmb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9oYW5kbGUsIGNoZWNrMVtpXS5rZXlfYWxnKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBEZXN0cm95IHRoZSBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19ERVNUUk9ZX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKwogICAgIH0KIAogICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CkBAIC0xNzMsNyArMTg3LDcgQEAKICAgICAgICAgLyogU2V0IHRoZSBrZXkgZm9yIGEgbXVsdGlwYXJ0IHN5bW1ldHJpYyBkZWNyeXB0aW9uIG9wZXJhdGlvbiAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0NJUEhFUl9ERUNSWVBUX1NFVFVQLCAmb3BlcmF0aW9uLAogICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2hhbmRsZSwgY2hlY2syW2ldLmtleV9hbGcpOwotICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9FTVBUWV9TTE9ULCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOwogICAgIH0KIAogICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzNC90ZXN0X2MwMzQuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM0L3Rlc3RfYzAzNC5jCmluZGV4IDY1YjY4MGMuLjk3YzViZWUgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM0L3Rlc3RfYzAzNC5jCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM0L3Rlc3RfYzAzNC5jCkBAIC05MiwxMSArOTIsMTYgQEAKICAgICAgICAgICAgIC8qIEFib3J0IGEgY2lwaGVyIG9wZXJhdGlvbiAqLwogICAgICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19DSVBIRVJfQUJPUlQsICZvcGVyYXRpb24pOwogICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CisKKyAgICAgICAgICAgIC8qIERlc3Ryb3kgdGhlIGtleSAqLworICAgICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19ERVNUUk9ZX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg5KSk7CisKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgLyogQ2hlY2sgdGhhdCBpZiBnZW5lcmF0ZWQgaXYgbGVuZ3RoIG1hdGNoIHRoZSBleHBlY3RlZCBsZW5ndGggKi8KLSAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoaXZfbGVuZ3RoLCBjaGVjazFbaV0uZXhwZWN0ZWRfaXZfbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoaXZfbGVuZ3RoLCBjaGVjazFbaV0uZXhwZWN0ZWRfaXZfbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEwKSk7CiAKICAgICAgICAgaXZfc3VtID0gMDsKICAgICAgICAgZm9yIChqID0gMDsgaiA8IGl2X2xlbmd0aDsgaisrKQpAQCAtMTA1LDE4ICsxMTAsMjIgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8qIENoZWNrIHRoYXQgaWYgZ2VuZXJhdGVkIGl2IGFyZSB6ZXJvICovCi0gICAgICAgIFRFU1RfQVNTRVJUX05PVF9FUVVBTChpdl9zdW0sIDAsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTApKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfTk9UX0VRVUFMKGl2X3N1bSwgMCwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMSkpOwogCiAgICAgICAgIC8qIEdlbmVyYXRpbmcgYW4gSVYgZm9yIGEgc3ltbWV0cmljIGVuY3J5cHRpb24gb3BlcmF0aW9uIHVzaW5nIHRoZSBzYW1lIG9wZXJhdG9yCiAgICAgICAgICAqIHNob3VsZCBmYWlsCiAgICAgICAgICAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0NJUEhFUl9HRU5FUkFURV9JViwgJm9wZXJhdGlvbiwgaXYsCiAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5pdl9zaXplLCAmaXZfbGVuZ3RoKTsKLSAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfQkFEX1NUQVRFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDExKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0JBRF9TVEFURSwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMikpOwogCiAgICAgICAgIC8qIEFib3J0IGEgY2lwaGVyIG9wZXJhdGlvbiAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0NJUEhFUl9BQk9SVCwgJm9wZXJhdGlvbik7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTIpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxMykpOworCisgICAgICAgIC8qIERlc3Ryb3kgdGhlIGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0RFU1RST1lfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTQpKTsKICAgICB9CiAKICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzUvdGVzdF9jMDM1LmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzNS90ZXN0X2MwMzUuYwppbmRleCAzNjhiNjk5Li4wMTBiMjc1IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzNS90ZXN0X2MwMzUuYworKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzNS90ZXN0X2MwMzUuYwpAQCAtODUsNyArODUsNyBAQAogICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOwogCiAgICAgICAgIC8qIFNldHRpbmcgYW4gSVYgZm9yIGEgc3ltbWV0cmljIGVuY3J5cHRpb24gb3BlcmF0aW9uIHVzaW5nIHRoZSBzYW1lIG9wZXJhdG9yCi0gICAgICAgICAqIHNob3VsZCBmYWlsCisgICAgICAgICAqIHNob3VsZCBmYWlsIGZvciBib3RoIHByZXZpb3VzIHN1Y2Nlc3MgYW5kIGZhaWx1cmUgY2FzZXMKICAgICAgICAgICovCiAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQ0lQSEVSX1NFVF9JViwgJm9wZXJhdGlvbiwgY2hlY2sxW2ldLml2LAogICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0uaXZfc2l6ZSk7CkBAIC05NCw2ICs5NCwxMCBAQAogICAgICAgICAvKiBBYm9ydCBhIGNpcGhlciBvcGVyYXRpb24gKi8KICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19DSVBIRVJfQUJPUlQsICZvcGVyYXRpb24pOwogICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKworICAgICAgICAvKiBEZXN0cm95IHRoZSBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19ERVNUUk9ZX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEwKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM2L3Rlc3RfYzAzNi5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzYvdGVzdF9jMDM2LmMKaW5kZXggNGE5MTdjNC4uYmY1OTY5YSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzYvdGVzdF9jMDM2LmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzYvdGVzdF9jMDM2LmMKQEAgLTI1LDEwICsyNSwxMiBAQAogY2xpZW50X3Rlc3RfdCB0ZXN0X2MwMzZfY3J5cHRvX2xpc3RbXSA9IHsKICAgICBOVUxMLAogICAgIHBzYV9jaXBoZXJfdXBkYXRlX3Rlc3QsCisgICAgcHNhX2NpcGhlcl91cGRhdGVfbmVnYXRpdmVfdGVzdCwKICAgICBOVUxMLAogfTsKIAogc3RhdGljIGludCAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCA9IDE7CitzdGF0aWMgdWludDhfdCAgICAgICAgICAgICAgICAgaW5wdXRbU0laRV8zMkJdOwogc3RhdGljIHVpbnQ4X3QgICAgICAgICAgICAgICAgIG91dHB1dFtTSVpFXzMyQl07CiBzdGF0aWMgcHNhX2NpcGhlcl9vcGVyYXRpb25fdCAgb3BlcmF0aW9uOwogCkBAIC0xMDcsMjUgKzEwOSw2NCBAQAogICAgICAgICAgICAgLyogQWJvcnQgYSBjaXBoZXIgb3BlcmF0aW9uICovCiAgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0NJUEhFUl9BQk9SVCwgJm9wZXJhdGlvbik7CiAgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEwKSk7CisKKyAgICAgICAgICAgIC8qIERlc3Ryb3kgdGhlIGtleSAqLworICAgICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19ERVNUUk9ZX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxMSkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAogICAgICAgICAvKiBDaGVjayBpZiB0aGUgb3V0cHV0IGxlbmd0aCBtYXRjaGVzIHRoZSBleHBlY3RlZCBsZW5ndGggKi8KLSAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwobGVuZ3RoLCBjaGVjazFbaV0uZXhwZWN0ZWRfb3V0cHV0X2xlbmd0aCwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMSkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChsZW5ndGgsIGNoZWNrMVtpXS5leHBlY3RlZF9vdXRwdXRfbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEyKSk7CiAKICAgICAgICAgLyogQ2hlY2sgaWYgdGhlIG91dHB1dCBkYXRhIG1hdGNoZXMgdGhlIGV4cGVjdGVkIGRhdGEgKi8KLSAgICAgICAgVEVTVF9BU1NFUlRfTUVNQ01QKG91dHB1dCwgY2hlY2sxW2ldLmV4cGVjdGVkX291dHB1dCwgbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEyKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX01FTUNNUChvdXRwdXQsIGNoZWNrMVtpXS5leHBlY3RlZF9vdXRwdXQsIGxlbmd0aCwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMykpOwogCiAgICAgICAgIC8qIEVuY3J5cHQgb3IgZGVjcnlwdCBhIG1lc3NhZ2UgZnJhZ21lbnQgaW4gYW4gaW52YWxpZCBjaXBoZXIgb3BlcmF0aW9uIHNob3VsZCBmYWlsICovCiAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQ0lQSEVSX1VQREFURSwgJmludmFsaWRfb3BlcmF0aW9uLAogICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0uaW5wdXQsIGNoZWNrMVtpXS5pbnB1dF9sZW5ndGgsIG91dHB1dCwgY2hlY2sxW2ldLm91dHB1dF9zaXplLAogICAgICAgICAgICAgICAgICAgICAmbGVuZ3RoKTsKLSAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfQkFEX1NUQVRFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEzKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0JBRF9TVEFURSwgVEVTVF9DSEVDS1BPSU5UX05VTSgxNCkpOwogCiAgICAgICAgIC8qIEFib3J0IGEgY2lwaGVyIG9wZXJhdGlvbiAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0NJUEhFUl9BQk9SVCwgJm9wZXJhdGlvbik7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTQpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxNSkpOworCisgICAgICAgIC8qIERlc3Ryb3kgdGhlIGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0RFU1RST1lfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTYpKTsKICAgICB9CiAKICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOwogfQorCitpbnQzMl90IHBzYV9jaXBoZXJfdXBkYXRlX25lZ2F0aXZlX3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgaSwgc3RhdHVzOworICAgIHBzYV9jaXBoZXJfb3BlcmF0aW9uX3QgIG9wZXJhdGlvbnNbXSA9IHtwc2FfY2lwaGVyX29wZXJhdGlvbl9pbml0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQV9DSVBIRVJfT1BFUkFUSU9OX0lOSVQsIHswfSB9OworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIG9wZXJhdGlvbl9jb3VudCA9IHNpemVvZihvcGVyYXRpb25zKS9zaXplb2Yob3BlcmF0aW9uc1swXSk7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgbGVuZ3RoOworCisgICAgbWVtc2V0KG91dHB1dCwgMCwgc2l6ZW9mKG91dHB1dCkpOworICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gIiwgZ190ZXN0X2NvdW50KyspOworICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIlRlc3QgcHNhX2NpcGhlcl91cGRhdGUgd2l0aG91dCBjaXBoZXIgc2V0dXBcbiIsIDApOworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5Ki8KKyAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lOSVQpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOworCisgICAgZm9yIChpID0gMDsgaSA8IG9wZXJhdGlvbl9jb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19DSVBIRVJfVVBEQVRFLCAmb3BlcmF0aW9uc1tpXSwgaW5wdXQsCisgICAgICAgICAgICAgICAgIHNpemVvZihpbnB1dCksIG91dHB1dCwgc2l6ZW9mKG91dHB1dCksICZsZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9CQURfU1RBVEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOworCisgICAgICAgIC8qIEFib3J0IGEgY2lwaGVyIG9wZXJhdGlvbiAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0NJUEhFUl9BQk9SVCwgJm9wZXJhdGlvbnNbaV0pOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKKyAgICB9CisKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzNi90ZXN0X2MwMzYuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM2L3Rlc3RfYzAzNi5oCmluZGV4IDA0NTI3MWEuLjYxZmU3ZTUgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM2L3Rlc3RfYzAzNi5oCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM2L3Rlc3RfYzAzNi5oCkBAIC0yNyw0ICsyNyw1IEBACiBleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2MwMzZfY3J5cHRvX2xpc3RbXTsKIAogaW50MzJfdCBwc2FfY2lwaGVyX3VwZGF0ZV90ZXN0KHNlY3VyaXR5X3QgY2FsbGVyKTsKK2ludDMyX3QgcHNhX2NpcGhlcl91cGRhdGVfbmVnYXRpdmVfdGVzdChzZWN1cml0eV90IGNhbGxlcik7CiAjZW5kaWYgLyogX1RFU1RfQzAzNl9DTElFTlRfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM2L3Rlc3RfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzYvdGVzdF9kYXRhLmgKaW5kZXggMTdmOWJmMC4uYzVlNGZiZSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzYvdGVzdF9kYXRhLmgKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzYvdGVzdF9kYXRhLmgKQEAgLTEwMSw2ICsxMDEsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBBUkNIX1RFU1RfQ0JDX05PX1BBRERJTkcKKyNpZmRlZiBBUkNIX1RFU1RfREVTXzFLRVkKIHsiVGVzdCBwc2FfY2lwaGVyX3VwZGF0ZSAtIEVuY3J5cHQgLSBERVMgQ0JDIChub3BhZClcbiIsIDYsIFBTQV9LRVlfVFlQRV9ERVMsCiB7MHgwMSwgMHgwMiwgMHgwNCwgMHgwNywgMHgwOCwgMHgwYiwgMHgwZCwgMHgwZX0sIERFU184Ql9LRVlfU0laRSwKICBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9BTEdfQ0JDX05PX1BBRERJTkcsCkBAIC0xMTAsNiArMTExLDcgQEAKIH0sCiAjZW5kaWYKICNlbmRpZgorI2VuZGlmCiAKICNpZmRlZiBBUkNIX1RFU1RfQ0JDX05PX1BBRERJTkcKICNpZmRlZiBBUkNIX1RFU1RfREVTXzJLRVkKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM3L3Rlc3RfYzAzNy5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzcvdGVzdF9jMDM3LmMKaW5kZXggZmEyYWI2Yy4uOGE3ZmRjOCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzcvdGVzdF9jMDM3LmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzcvdGVzdF9jMDM3LmMKQEAgLTExNCwyOSArMTE0LDM3IEBACiAgICAgICAgICAgICAvKiBBYm9ydCBhIGNpcGhlciBvcGVyYXRpb24gKi8KICAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQ0lQSEVSX0FCT1JULCAmb3BlcmF0aW9uKTsKICAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTEpKTsKKworICAgICAgICAgICAgLyogRGVzdHJveSB0aGUga2V5ICovCisgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0RFU1RST1lfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEyKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCiAgICAgICAgIC8qIENoZWNrIGlmIHRoZSBvdXRwdXQgbGVuZ3RoIG1hdGNoZXMgdGhlIGV4cGVjdGVkIGxlbmd0aCAqLwotICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChmaW5pc2hfbGVuZ3RoLCBjaGVjazFbaV0uZXhwZWN0ZWRfb3V0cHV0X2xlbmd0aCwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMikpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChmaW5pc2hfbGVuZ3RoLCBjaGVjazFbaV0uZXhwZWN0ZWRfb3V0cHV0X2xlbmd0aCwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMykpOwogCiAgICAgICAgIC8qIENoZWNrIGlmIHRoZSBvdXRwdXQgZGF0YSBtYXRjaGVzIHRoZSBleHBlY3RlZCBkYXRhICovCiAgICAgICAgIFRFU1RfQVNTRVJUX01FTUNNUChvdXRwdXQsIGNoZWNrMVtpXS5leHBlY3RlZF9vdXRwdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICh1cGRhdGVfbGVuZ3RoICsgZmluaXNoX2xlbmd0aCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBURVNUX0NIRUNLUE9JTlRfTlVNKDEzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBURVNUX0NIRUNLUE9JTlRfTlVNKDE0KSk7CiAKICAgICAgICAgLyogRmluaXNoIGVuY3J5cHRpbmcgb3IgZGVjcnlwdGluZyBhIG1lc3NhZ2UgdXNpbmcgYW4gaW52YWxpZCBvcGVyYXRpb24gc2hvdWxkIGZhaWwgKi8KICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19DSVBIRVJfRklOSVNILCAmaW52YWxpZF9vcGVyYXRpb24sIG91dHB1dCwKICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLm91dHB1dF9zaXplW1NMT1RfMl0sICZmaW5pc2hfbGVuZ3RoKTsKLSAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfQkFEX1NUQVRFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDE0KSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0JBRF9TVEFURSwgVEVTVF9DSEVDS1BPSU5UX05VTSgxNSkpOwogCiAgICAgICAgIC8qIEFib3J0IGEgY2lwaGVyIG9wZXJhdGlvbiAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0NJUEhFUl9BQk9SVCwgJm9wZXJhdGlvbik7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTUpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxNikpOwogCiAgICAgICAgIC8qIEFib3J0IGEgY2lwaGVyIG9wZXJhdGlvbiAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0NJUEhFUl9BQk9SVCwgJmludmFsaWRfb3BlcmF0aW9uKTsKLSAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxNikpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDE3KSk7CisKKyAgICAgICAgLyogRGVzdHJveSB0aGUga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fREVTVFJPWV9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxOCkpOwogICAgIH0KIAogICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzAzOC90ZXN0X2MwMzguYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM4L3Rlc3RfYzAzOC5jCmluZGV4IGI4ZDg4NDAuLjU0YjRiN2QgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM4L3Rlc3RfYzAzOC5jCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM4L3Rlc3RfYzAzOC5jCkBAIC05Nyw2ICs5NywxMCBAQAogICAgICAgICAvKiBNdWx0aXBsZSBhYm9ydCBjaXBoZXIgb3BlcmF0aW9uIHNob3VsZCByZXR1cm4gc3VjY2VzcyovCiAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQ0lQSEVSX0FCT1JULCAmb3BlcmF0aW9uKTsKICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg5KSk7CisKKyAgICAgICAgLyogRGVzdHJveSB0aGUga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fREVTVFJPWV9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxMCkpOwogICAgIH0KIAogICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CkBAIC0xMTcsOSArMTIxLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M2QsIDB4N2UsIDB4MTEsIDB4NzMsIDB4OTMsIDB4MTcsIDB4MmF9OwogICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGl2W10gPSB7MHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwgMHgyYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmEsIDB4MmF9OwotICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGtleV9sZW5ndGggPSBzaXplb2Yoa2V5X2RhdGEpL3NpemVvZihrZXlfZGF0YVswXSk7Ci0gICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgaW5wdXRfbGVuZ3RoID0gc2l6ZW9mKGlucHV0KS9zaXplb2YoaW5wdXRbMF0pOwotICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGl2X3NpemUgPSBzaXplb2YoaXYpL3NpemVvZihpdlswXSk7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAga2V5X2xlbmd0aCA9IHNpemVvZihrZXlfZGF0YSk7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgaW5wdXRfbGVuZ3RoID0gc2l6ZW9mKGlucHV0KTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBpdl9zaXplID0gc2l6ZW9mKGl2KTsKICAgICBpbnQzMl90ICAgICAgICAgICAgICAgICBzdGF0dXM7CiAKICAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLwpAQCAtMTczLDUgKzE3Nyw5IEBACiAgICAgICAgICAgICAgICAgaW5wdXRfbGVuZ3RoLCBvdXRwdXQsIFNJWkVfMzJCLCAmbGVuZ3RoKTsKICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9CQURfU1RBVEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOSkpOwogCisgICAgLyogRGVzdHJveSB0aGUga2V5ICovCisgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19ERVNUUk9ZX0tFWSwga2V5X2hhbmRsZSk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxMCkpOworCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM5L3Rlc3RfYzAzOS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzkvdGVzdF9jMDM5LmMKaW5kZXggMDA1M2ZkZC4uMzBhODMzZSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzkvdGVzdF9jMDM5LmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzkvdGVzdF9jMDM5LmMKQEAgLTEyOCw3ICsxMjgsMTAgQEAKICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CiAKICAgICAgICAgaWYgKGlzX2J1ZmZlcl9lbXB0eShjaGVjazFbaV0uc2FsdCwgY2hlY2sxW2ldLnNhbHRfbGVuZ3RoKSA9PSBUUlVFKQorICAgICAgICB7CiAgICAgICAgICAgICBzYWx0ID0gTlVMTDsKKyAgICAgICAgICAgIGNoZWNrMVtpXS5zYWx0X2xlbmd0aCA9IDA7CisgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2FsdCA9IGNoZWNrMVtpXS5zYWx0OwogCkBAIC0xMzksMTAgKzE0MiwxNiBAQAogICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOwogCiAgICAgICAgIGlmIChjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzICE9IFBTQV9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBEZXN0cm95IHRoZSBrZXkgKi8KKyAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fREVTVFJPWV9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOworCiAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogCiAgICAgICAgIC8qIENoZWNrIGlmIHRoZSBvdXRwdXQgbGVuZ3RoIG1hdGNoZXMgd2l0aCB0aGUgZXhwZWN0ZWQgb3V0cHV0IGxlbmd0aCAqLwotICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChsZW5ndGgsIGNoZWNrMVtpXS5leHBlY3RlZF9vdXRwdXRfbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwobGVuZ3RoLCBjaGVjazFbaV0uZXhwZWN0ZWRfb3V0cHV0X2xlbmd0aCwgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CiAKICAgICAgICAgLyogV2UgdGVzdCBlbmNyeXB0aW9uIGJ5IGNoZWNraW5nIHRoYXQgZW5jcnlwdC10aGVuLWRlY3J5cHQgZ2l2ZXMgYmFjawogICAgICAgICAgKiB0aGUgb3JpZ2luYWwgcGxhaW50ZXh0IGJlY2F1c2Ugb2YgdGhlIG5vbi1vcHRpb25hbCByYW5kb20KQEAgLTE1MiwxNCArMTYxLDE4IEBACiAgICAgICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FTWU1NVEVSSUNfREVDUllQVCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfaGFuZGxlLCBjaGVjazFbaV0ua2V5X2FsZywgb3V0cHV0LCBsZW5ndGgsIHNhbHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazFbaV0uc2FsdF9sZW5ndGgsIG91dHB1dCwgY2hlY2sxW2ldLm91dHB1dF9zaXplLCAmbGVuZ3RoKTsKLSAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg5KSk7CiAKICAgICAgICAgICAgIC8qIENoZWNrIGlmIHRoZSBvdXRwdXQgbGVuZ3RoIG1hdGNoZXMgd2l0aCB0aGUgaW5wdXQgbGVuZ3RoICovCi0gICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChsZW5ndGgsIGNoZWNrMVtpXS5pbnB1dF9sZW5ndGgsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOSkpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwobGVuZ3RoLCBjaGVjazFbaV0uaW5wdXRfbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEwKSk7CiAKICAgICAgICAgICAgIC8qIENoZWNrIGlmIHRoZSBvdXRwdXQgbWF0Y2hlcyB3aXRoIHRoZSBnaXZlbiBpbnB1dCBkYXRhICovCi0gICAgICAgICAgICBURVNUX0FTU0VSVF9NRU1DTVAob3V0cHV0LCBjaGVjazFbaV0uaW5wdXQsIGxlbmd0aCwgVEVTVF9DSEVDS1BPSU5UX05VTSgxMCkpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfTUVNQ01QKG91dHB1dCwgY2hlY2sxW2ldLmlucHV0LCBsZW5ndGgsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTEpKTsKICAgICAgICAgfQorCisgICAgICAgIC8qIERlc3Ryb3kgdGhlIGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0RFU1RST1lfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTIpKTsKICAgICB9CiAKICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOwpAQCAtMTc5LDkgKzE5Miw2IEBACiAKICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoZWNrczsgaSsrKQogICAgIHsKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9hc3ltbWV0cmljX2VuY3J5cHQgLSBJbnZhbGlkIGtleSBoYW5kbGVcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7Ci0KICAgICAgICAgLyogSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsCiAgICAgICAgICAqIHVzYWdlIG9mIHRoZSBrZXkKICAgICAgICAgICovCkBAIC0yMjMsNyArMjMzLDEwIEBACiAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOwogCiAgICAgICAgIGlmIChpc19idWZmZXJfZW1wdHkoY2hlY2sxW2ldLnNhbHQsIGNoZWNrMVtpXS5zYWx0X2xlbmd0aCkgPT0gVFJVRSkKKyAgICAgICAgewogICAgICAgICAgICAgc2FsdCA9IE5VTEw7CisgICAgICAgICAgICBjaGVjazFbaV0uc2FsdF9sZW5ndGggPSAwOworICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHNhbHQgPSBjaGVjazFbaV0uc2FsdDsKIApAQCAtMjMxLDcgKzI0NCw3IEBACiAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQVNZTU1URVJJQ19FTkNSWVBULCBjaGVjazJbaV0ua2V5X2hhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9hbGcsIGNoZWNrMltpXS5pbnB1dCwgY2hlY2syW2ldLmlucHV0X2xlbmd0aCwgc2FsdCwKICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLnNhbHRfbGVuZ3RoLCBvdXRwdXQsIGNoZWNrMltpXS5vdXRwdXRfc2l6ZSwgJmxlbmd0aCk7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0VNUFRZX1NMT1QsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9ET0VTX05PVF9FWElTVCwgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDM5L3Rlc3RfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzkvdGVzdF9kYXRhLmgKaW5kZXggNDg1MzgyNS4uNWJiNTEwOSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzkvdGVzdF9kYXRhLmgKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwMzkvdGVzdF9kYXRhLmgKQEAgLTE2NywxMyArMTY3LDEzIEBACiAgMTI4LCAxMDI0LCBQU0FfU1VDQ0VTUwogfSwKIAoteyJUZXN0IHBzYV9hc3ltbWV0cmljX2VuY3J5cHQgLSBTbWFsbCBvdXRwdXQgYnVmZmVyXG4iLCA1LCBQU0FfS0VZX1RZUEVfUlNBX1BVQkxJQ19LRVksCi17MH0sIDE2MiwgUFNBX0tFWV9VU0FHRV9FTkNSWVBUIHwgUFNBX0tFWV9VU0FHRV9ERUNSWVBULCBQU0FfQUxHX1JTQV9QS0NTMVYxNV9DUllQVCwKK3siVGVzdCBwc2FfYXN5bW1ldHJpY19lbmNyeXB0IC0gU21hbGwgb3V0cHV0IGJ1ZmZlclxuIiwgNSwgUFNBX0tFWV9UWVBFX1JTQV9LRVlQQUlSLAorezB9LCA2MTAsIFBTQV9LRVlfVVNBR0VfRU5DUllQVCB8IFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0FMR19SU0FfUEtDUzFWMTVfQ1JZUFQsCiB7MH0sIDAsCiB7MHhiYSwgMHg3OCwgMHgxNiwgMHhiZiwgMHg4ZiwgMHgwMSwgMHhjZiwgMHhlYSwgMHg0MSwgMHg0MSwgMHg0MCwgMHhkZSwgMHg1ZCwKICAweGFlLCAweDIyLCAweDIzLCAweGIwLCAweDAzLCAweDYxLCAweGEzLCAweDk2LCAweDE3LCAweDdhLCAweDljLCAweGI0LCAweDEwLAotIDB4ZmYsIDB4NjEsIDB4ZjIsIDB4MDAsIDB4MTUsIDB4YWR9LCAyMiwgMTEwLAotIDEyOCwgMTAyNCwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKKyAweGZmLCAweDYxLCAweGYyLCAweDAwLCAweDE1LCAweGFkfSwgMjIsIDEyMCwKKyAxMjgsIDEwMjQsIFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMCiB9LAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDQwL3Rlc3RfYzA0MC5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDAvdGVzdF9jMDQwLmMKaW5kZXggNjlkYzdlZi4uNzYwYWIxOSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDAvdGVzdF9jMDQwLmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDAvdGVzdF9jMDQwLmMKQEAgLTEyOCw3ICsxMjgsMTAgQEAKICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CiAKICAgICAgICAgaWYgKGlzX2J1ZmZlcl9lbXB0eShjaGVjazFbaV0uc2FsdCwgY2hlY2sxW2ldLnNhbHRfbGVuZ3RoKSA9PSBUUlVFKQorICAgICAgICB7CiAgICAgICAgICAgICBzYWx0ID0gTlVMTDsKKyAgICAgICAgICAgIGNoZWNrMVtpXS5zYWx0X2xlbmd0aCA9IDA7CisgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2FsdCA9IGNoZWNrMVtpXS5zYWx0OwogCkBAIC0xMzksMTMgKzE0MiwyMyBAQAogICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOwogCiAgICAgICAgIGlmIChjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzICE9IFBTQV9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBEZXN0cm95IHRoZSBrZXkgKi8KKyAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fREVTVFJPWV9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOworCiAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogCiAgICAgICAgIC8qIENoZWNrIGlmIHRoZSBvdXRwdXQgbGVuZ3RoIG1hdGNoZXMgd2l0aCB0aGUgZXhwZWN0ZWQgbGVuZ3RoICovCi0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGxlbmd0aCwgY2hlY2sxW2ldLmV4cGVjdGVkX291dHB1dF9sZW5ndGgsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChsZW5ndGgsIGNoZWNrMVtpXS5leHBlY3RlZF9vdXRwdXRfbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDgpKTsKIAogICAgICAgICAvKiBDaGVjayBpZiB0aGUgb3V0cHV0IG1hdGNoZXMgd2l0aCB0aGUgZXhwZWN0ZWQgZGF0YSAqLwotICAgICAgICBURVNUX0FTU0VSVF9NRU1DTVAob3V0cHV0LCBjaGVjazFbaV0uZXhwZWN0ZWRfb3V0cHV0LCBsZW5ndGgsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOworICAgICAgICBURVNUX0FTU0VSVF9NRU1DTVAob3V0cHV0LCBjaGVjazFbaV0uZXhwZWN0ZWRfb3V0cHV0LCBsZW5ndGgsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOSkpOworCisgICAgICAgIC8qIERlc3Ryb3kgdGhlIGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0RFU1RST1lfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTApKTsKICAgICB9CiAKICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOwpAQCAtMTY1LDkgKzE3OCw2IEBACiAKICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoZWNrczsgaSsrKQogICAgIHsKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9hc3ltbWV0cmljX2RlY3J5cHQgLSBJbnZhbGlkIGtleSBoYW5kbGVcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7Ci0KICAgICAgICAgLyogSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsCiAgICAgICAgICAqIHVzYWdlIG9mIHRoZSBrZXkKICAgICAgICAgICovCkBAIC0yMDksNyArMjE5LDEwIEBACiAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOwogCiAgICAgICAgIGlmIChpc19idWZmZXJfZW1wdHkoY2hlY2sxW2ldLnNhbHQsIGNoZWNrMVtpXS5zYWx0X2xlbmd0aCkgPT0gVFJVRSkKKyAgICAgICAgewogICAgICAgICAgICAgc2FsdCA9IE5VTEw7CisgICAgICAgICAgICBjaGVjazFbaV0uc2FsdF9sZW5ndGggPSAwOworICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHNhbHQgPSBjaGVjazFbaV0uc2FsdDsKIApAQCAtMjE3LDcgKzIzMCw3IEBACiAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQVNZTU1URVJJQ19ERUNSWVBULCBjaGVjazJbaV0ua2V5X2hhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9hbGcsIGNoZWNrMltpXS5pbnB1dCwgY2hlY2syW2ldLmlucHV0X2xlbmd0aCwgc2FsdCwKICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLnNhbHRfbGVuZ3RoLCBvdXRwdXQsIGNoZWNrMltpXS5vdXRwdXRfc2l6ZSwgJmxlbmd0aCk7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0VNUFRZX1NMT1QsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9ET0VTX05PVF9FWElTVCwgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDQxL3Rlc3RfYzA0MS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDEvdGVzdF9jMDQxLmMKaW5kZXggNTUxMDZmNy4uMTAxZTE2YSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDEvdGVzdF9jMDQxLmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDEvdGVzdF9jMDQxLmMKQEAgLTEyMCwxMyArMTIwLDIzIEBACiAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg2KSk7CiAKICAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIERlc3Ryb3kgdGhlIGtleSAqLworICAgICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19ERVNUUk9ZX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisKICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAKICAgICAgICAgLyogQ2hlY2sgaWYgdGhlIG91dHB1dCBsZW5ndGggbWF0Y2hlcyB3aXRoIHRoZSBleHBlY3RlZCBsZW5ndGggKi8KLSAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwobGVuZ3RoLCBjaGVjazFbaV0uZXhwZWN0ZWRfc2lnbmF0dXJlX2xlbmd0aCwgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGxlbmd0aCwgY2hlY2sxW2ldLmV4cGVjdGVkX3NpZ25hdHVyZV9sZW5ndGgsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOwogCiAgICAgICAgIC8qIENoZWNrIGlmIHRoZSBvdXRwdXQgbWF0Y2hlcyB3aXRoIHRoZSBleHBlY3RlZCBkYXRhICovCi0gICAgICAgIFRFU1RfQVNTRVJUX01FTUNNUChzaWduYXR1cmUsIGNoZWNrMVtpXS5leHBlY3RlZF9zaWduYXR1cmUsIGxlbmd0aCwgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CisgICAgICAgIFRFU1RfQVNTRVJUX01FTUNNUChzaWduYXR1cmUsIGNoZWNrMVtpXS5leHBlY3RlZF9zaWduYXR1cmUsIGxlbmd0aCwgVEVTVF9DSEVDS1BPSU5UX05VTSg5KSk7CisKKyAgICAgICAgLyogRGVzdHJveSB0aGUga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fREVTVFJPWV9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxMCkpOwogICAgIH0KIAogICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CkBAIC0xNDUsOCArMTU1LDYgQEAKIAogICAgIGZvciAoaSA9IDA7IGkgPCBudW1fY2hlY2tzOyBpKyspCiAgICAgewotICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2FzeW1tZXRyaWNfc2lnbiAtIEludmFsaWQga2V5IGhhbmRsZVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOwogICAgICAgICAvKiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwKICAgICAgICAgICogdXNhZ2Ugb2YgdGhlIGtleQogICAgICAgICAgKi8KQEAgLTE2OCw3ICsxNzYsNyBAQAogICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsIGNoZWNrMltpXS5zaWduYXR1cmVfc2l6ZSwgJmxlbmd0aCk7CiAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKIAotICAgICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgJWRdIFRlc3QgcHNhX2FzeW1tZXRyaWNfc2lnbiAtIHplcm8gYXMga2V5IGhhbmRsZVxuIiwKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9hc3ltbWV0cmljX3NpZ24gLSBaZXJvIGFzIGtleSBoYW5kbGVcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfdGVzdF9jb3VudCsrKTsKICAgICAgICAgLyogU2lnbiBhIGhhc2ggb3Igc2hvcnQgbWVzc2FnZSB3aXRoIGEgcHJpdmF0ZSBrZXkgKi8KICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BU1lNTVRFUklDX1NJR04sIDAsCkBAIC0xOTEsNyArMTk5LDcgQEAKICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BU1lNTVRFUklDX1NJR04sIGNoZWNrMltpXS5rZXlfaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2FsZywgY2hlY2syW2ldLmlucHV0LCBjaGVjazJbaV0uaW5wdXRfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsIGNoZWNrMltpXS5zaWduYXR1cmVfc2l6ZSwgJmxlbmd0aCk7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0VNUFRZX1NMT1QsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9ET0VTX05PVF9FWElTVCwgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDQyL3Rlc3RfYzA0Mi5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDIvdGVzdF9jMDQyLmMKaW5kZXggOTdmM2JlOS4uNDNlZDVlYyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDIvdGVzdF9jMDQyLmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDIvdGVzdF9jMDQyLmMKQEAgLTExNCw2ICsxMTQsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmtleV9hbGcsIGNoZWNrMVtpXS5pbnB1dCwgY2hlY2sxW2ldLmlucHV0X2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLnNpZ25hdHVyZSwgY2hlY2sxW2ldLnNpZ25hdHVyZV9zaXplKTsKICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBjaGVjazFbaV0uZXhwZWN0ZWRfc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKKworICAgICAgICAvKiBEZXN0cm95IGEga2V5IGFuZCByZXN0b3JlIHRoZSBzbG90IHRvIGl0cyBkZWZhdWx0IHN0YXRlICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fREVTVFJPWV9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKQEAgLTE3OCw3ICsxODIsNyBAQAogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FTWU1NVEVSSUNfVkVSSUZZLCBjaGVjazJbaV0ua2V5X2hhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmtleV9hbGcsIGNoZWNrMltpXS5pbnB1dCwgY2hlY2syW2ldLmlucHV0X2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLnNpZ25hdHVyZSwgY2hlY2syW2ldLnNpZ25hdHVyZV9zaXplKTsKLSAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfRU1QVFlfU0xPVCwgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNULCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKICAgICB9CiAKICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDMvdGVzdF9jMDQzLmMgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0My90ZXN0X2MwNDMuYwppbmRleCAyZDY2NTc0Li5jNjFhYWQ0IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0My90ZXN0X2MwNDMuYworKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0My90ZXN0X2MwNDMuYwpAQCAtODYsMjggKzg2LDM2IEBACiAgICAgICAgICAgICAvKiBBYm9ydCBhIGdlbmVyYXRvciAqLwogICAgICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRU5FUkFUT1JfQUJPUlQsICZnZW5lcmF0b3IpOwogICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CisKKyAgICAgICAgICAgIC8qIERlc3Ryb3kgYSBrZXkgYW5kIHJlc3RvcmUgdGhlIHNsb3QgdG8gaXRzIGRlZmF1bHQgc3RhdGUgKi8KKyAgICAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fREVTVFJPWV9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAogICAgICAgICAvKiBSZXRyaWV2ZSB0aGUgY3VycmVudCBjYXBhY2l0eSBvZiBhIGdlbmVyYXRvciAqLwogICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFVF9HRU5FUkFUT1JfQ0FQQUNJVFksICZnZW5lcmF0b3IsICZjYXBhY2l0eSk7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKIAogICAgICAgICAvKiBDaGVjayBpZiB0aGUgZ2VuZXJhdG9yIGNhcGFjaXR5IG1hdGNoZXMgd2l0aCB0aGUgZXhwZWN0ZWQgY2FwYWNpdHkgKi8KLSAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoY2FwYWNpdHksIGNoZWNrMVtpXS5leHBlY3RlZF9jYXBhY2l0eSwgVEVTVF9DSEVDS1BPSU5UX05VTSg5KSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGNhcGFjaXR5LCBjaGVjazFbaV0uZXhwZWN0ZWRfY2FwYWNpdHksIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTApKTsKIAogICAgICAgICAvKiBSZWFkIHNvbWUgZGF0YSBmcm9tIGEgZ2VuZXJhdG9yICovCiAgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VORVJBVE9SX1JFQUQsICZnZW5lcmF0b3IsIG91dHB1dCwKICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmV4cGVjdGVkX291dHB1dF9sZW5ndGgpOwotICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEwKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTEpKTsKIAogICAgICAgICAgLyogQ2hlY2sgaWYgdGhlIG91dHB1dCBtYXRjaGVzIHdpdGggdGhlIGV4cGVjdGVkIGRhdGEgKi8KICAgICAgICAgVEVTVF9BU1NFUlRfTUVNQ01QKG91dHB1dCwgY2hlY2sxW2ldLmV4cGVjdGVkX291dHB1dCwgY2hlY2sxW2ldLmV4cGVjdGVkX291dHB1dF9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICBURVNUX0NIRUNLUE9JTlRfTlVNKDExKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBURVNUX0NIRUNLUE9JTlRfTlVNKDEyKSk7CiAKICAgICAgICAgLyogQWJvcnQgYSBnZW5lcmF0b3IgKi8KICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRU5FUkFUT1JfQUJPUlQsICZnZW5lcmF0b3IpOwotICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEyKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTMpKTsKKworICAgICAgICAvKiBEZXN0cm95IGEga2V5IGFuZCByZXN0b3JlIHRoZSBzbG90IHRvIGl0cyBkZWZhdWx0IHN0YXRlICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fREVTVFJPWV9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxNCkpOwogICAgIH0KIAogICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CkBAIC0xNzIsNyArMTgwLDcgQEAKICAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfQUdSRUVNRU5ULCAmZ2VuZXJhdG9yLAogICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2hhbmRsZSwgY2hlY2syW2ldLnBlZXJfa2V5LCBjaGVjazJbaV0ucGVlcl9rZXlfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2FsZyk7Ci0gICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX0VSUk9SX0VNUFRZX1NMT1QsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9FUlJPUl9ET0VTX05PVF9FWElTVCwgVEVTVF9DSEVDS1BPSU5UX05VTSg3KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDQ0L3NvdXJjZS5tayBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDQ0L3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTY5NGNjCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDQvc291cmNlLm1rCkBAIC0wLDAgKzEsMjAgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfYzA0NC5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0NC90ZXN0X2MwNDQuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDQ0L3Rlc3RfYzA0NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNTk3ODkKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0NC90ZXN0X2MwNDQuYwpAQCAtMCwwICsxLDMwMiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzA0NC5oIgorI2luY2x1ZGUgInRlc3RfZGF0YS5oIgorI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKKworY2xpZW50X3Rlc3RfdCB0ZXN0X2MwNDRfY3J5cHRvX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIHBzYV9jb3B5X2tleV90ZXN0LAorICAgIHBzYV9jb3B5X2tleV9uZWdhdGl2ZV90ZXN0LAorICAgIE5VTEwsCit9OworCitzdGF0aWMgaW50IGdfdGVzdF9jb3VudCA9IDE7CitzdGF0aWMgdWludDhfdCBkYXRhW0JVRkZFUl9TSVpFXTsKKworaW50MzJfdCBwc2FfY29weV9rZXlfdGVzdChzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgICB1aW50MzJfdCAgICAgICAgIGxlbmd0aCwgaTsKKyAgICBjb25zdCB1aW50OF90ICAgICprZXlfZGF0YTsKKyAgICBwc2Ffa2V5X3BvbGljeV90IHBvbGljeSwgdGFyZ2V0X3BvbGljeSwgY29uc3RyYWludDsKKyAgICBwc2Ffa2V5X2hhbmRsZV90IHRhcmdldF9oYW5kbGUgPSAwOworICAgIHBzYV9rZXlfdHlwZV90ICAga2V5X3R5cGUsIHRhcmdldF90eXBlOworICAgIHBzYV9hbGdvcml0aG1fdCAgZXhwZWN0ZWRfa2V5X2FsZzsKKyAgICBwc2Ffa2V5X3VzYWdlX3QgIGV4cGVjdGVkX3VzYWdlOworICAgIHNpemVfdCAgICAgICAgICAgYml0cywgdGFyZ2V0X2JpdHM7CisgICAgaW50ICAgICAgICAgICAgICBudW1fY2hlY2tzID0gc2l6ZW9mKGNoZWNrMSkvc2l6ZW9mKGNoZWNrMVswXSk7CisgICAgaW50MzJfdCAgICAgICAgICBzdGF0dXMsIGV4cG9ydF9zdGF0dXM7CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CisKKyAgICAvKiBTZXQgdGhlIGtleSBkYXRhIGJ1ZmZlciB0byB0aGUgaW5wdXQgYmFzZSBvbiBhbGdvcml0aG0gKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoZWNrczsgaSsrKQorICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSAiLCBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgY2hlY2sxW2ldLnRlc3RfZGVzYywgMCk7CisKKyAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsCisgICAgICAgICAqIHVzYWdlIG9mIHRoZSBrZXkKKyAgICAgICAgICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9JTklULCAmcG9saWN5KTsKKworICAgICAgICBpZiAoUFNBX0tFWV9UWVBFX0lTX1JTQShjaGVjazFbaV0ua2V5X3R5cGUpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY2hlY2sxW2ldLmtleV90eXBlID09IFBTQV9LRVlfVFlQRV9SU0FfS0VZUEFJUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX2JpdF9sZW5ndGggPT0gQllURVNfVE9fQklUUygzODQpKQorICAgICAgICAgICAgICAgICAgICBrZXlfZGF0YSA9IHJzYV8zODRfa2V5cGFpcjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVjazFbaV0uZXhwZWN0ZWRfYml0X2xlbmd0aCA9PSBCWVRFU19UT19CSVRTKDI1NikpCisgICAgICAgICAgICAgICAgICAgIGtleV9kYXRhID0gcnNhXzI1Nl9rZXlwYWlyOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY2hlY2sxW2ldLmV4cGVjdGVkX2JpdF9sZW5ndGggPT0gQllURVNfVE9fQklUUygzODQpKQorICAgICAgICAgICAgICAgICAgICBrZXlfZGF0YSA9IHJzYV8zODRfa2V5ZGF0YTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVjazFbaV0uZXhwZWN0ZWRfYml0X2xlbmd0aCA9PSBCWVRFU19UT19CSVRTKDI1NikpCisgICAgICAgICAgICAgICAgICAgIGtleV9kYXRhID0gcnNhXzI1Nl9rZXlkYXRhOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChQU0FfS0VZX1RZUEVfSVNfRUNDKGNoZWNrMVtpXS5rZXlfdHlwZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChQU0FfS0VZX1RZUEVfSVNfRUNDX0tFWVBBSVIoY2hlY2sxW2ldLmtleV90eXBlKSkKKyAgICAgICAgICAgICAgICBrZXlfZGF0YSA9IGVjX2tleXBhaXI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAga2V5X2RhdGEgPSBlY19rZXlkYXRhOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGtleV9kYXRhID0gY2hlY2sxW2ldLmtleV9kYXRhOworCisgICAgICAgIC8qIFNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfU0VUX1VTQUdFLCAmcG9saWN5LCBjaGVjazFbaV0udXNhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfYWxnKTsKKworICAgICAgICAvKiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19BTExPQ0FURV9LRVksICZjaGVjazFbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOworCisgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsICZwb2xpY3kpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKKworICAgICAgICAvKiBJbXBvcnQgdGhlIGtleSBkYXRhIGludG8gdGhlIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU1QT1JUX0tFWSwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrMVtpXS5rZXlfdHlwZSwga2V5X2RhdGEsIGNoZWNrMVtpXS5rZXlfbGVuZ3RoKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg1KSk7CisKKyAgICAgICAgLyogR2V0IGJhc2ljIG1ldGFkYXRhIGFib3V0IGEga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fR0VUX0tFWV9JTkZPUk1BVElPTiwgY2hlY2sxW2ldLmtleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXlfdHlwZSwgJmJpdHMpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKKworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJnRhcmdldF9wb2xpY3kpOworCisgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgJnRhcmdldF9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKworICAgICAgICAvKiBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX1NFVF9VU0FHRSwgJnRhcmdldF9wb2xpY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLnRhcmdldF91c2FnZSwgY2hlY2sxW2ldLnRhcmdldF9rZXlfYWxnKTsKKworICAgICAgICAvKiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1ksIHRhcmdldF9oYW5kbGUsICZ0YXJnZXRfcG9saWN5KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CisKKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQsICZ0YXJnZXRfcG9saWN5KTsKKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0lOSVQsICZjb25zdHJhaW50KTsKKworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfU0VUX1VTQUdFLCAmY29uc3RyYWludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sxW2ldLmNvbnN0cmFpbnRfdXNhZ2UsIGNoZWNrMVtpXS5jb25zdHJhaW50X2tleV9hbGcpOworICAgICAgICAvKiBNYWtlIGEgY29weSBvZiBhIGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0NPUFlfS0VZLCBjaGVjazFbaV0ua2V5X2hhbmRsZSwgdGFyZ2V0X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29uc3RyYWludCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgY2hlY2sxW2ldLmV4cGVjdGVkX3N0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg5KSk7CisKKyAgICAgICAgaWYgKGNoZWNrMVtpXS5leHBlY3RlZF9zdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiBEZXN0cm95IHRoZSBzb3VyY2UgdG8gZW5zdXJlIHRoYXQgdGhpcyBkb2Vzbid0IGFmZmVjdCB0aGUgdGFyZ2V0ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fREVTVFJPWV9LRVksIGNoZWNrMVtpXS5rZXlfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxMCkpOworCisgICAgICAgIC8qIEdldCBiYXNpYyBtZXRhZGF0YSBhYm91dCBhIGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0dFVF9LRVlfSU5GT1JNQVRJT04sIHRhcmdldF9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhcmdldF90eXBlLCAmdGFyZ2V0X2JpdHMpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDExKSk7CisKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwodGFyZ2V0X3R5cGUsIGtleV90eXBlLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEyKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHRhcmdldF9iaXRzLCBiaXRzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEzKSk7CisKKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19HRVRfS0VZX1BPTElDWSwgdGFyZ2V0X2hhbmRsZSwgJnRhcmdldF9wb2xpY3kpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDE0KSk7CisKKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX0dFVF9VU0FHRSwgJnRhcmdldF9wb2xpY3ksICZleHBlY3RlZF91c2FnZSk7CisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9HRVRfQUxHT1JJVEhNLCAmdGFyZ2V0X3BvbGljeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXhwZWN0ZWRfa2V5X2FsZyk7CisKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoZXhwZWN0ZWRfdXNhZ2UsIGNoZWNrMVtpXS5leHBlY3RlZF91c2FnZSwgVEVTVF9DSEVDS1BPSU5UX05VTSgxNSkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChleHBlY3RlZF9rZXlfYWxnLCBjaGVjazFbaV0uZXhwZWN0ZWRfa2V5X2FsZywgVEVTVF9DSEVDS1BPSU5UX05VTSgxNikpOworCisgICAgICAgIGlmIChleHBlY3RlZF91c2FnZSAmIFBTQV9LRVlfVVNBR0VfRVhQT1JUKQorICAgICAgICAgICAgZXhwb3J0X3N0YXR1cyA9IFBTQV9TVUNDRVNTOworICAgICAgICBlbHNlCisgICAgICAgICAgICBleHBvcnRfc3RhdHVzID0gUFNBX0VSUk9SX05PVF9QRVJNSVRURUQ7CisKKyAgICAgICAgLyogRXhwb3J0IGEga2V5IGluIGJpbmFyeSBmb3JtYXQgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19FWFBPUlRfS0VZLCB0YXJnZXRfaGFuZGxlLCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCVUZGRVJfU0laRSwgJmxlbmd0aCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgZXhwb3J0X3N0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSgxNykpOworCisgICAgICAgIGlmIChleHBvcnRfc3RhdHVzICE9IFBTQV9TVUNDRVNTKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwobGVuZ3RoLCBjaGVjazFbaV0uZXhwZWN0ZWRfa2V5X2xlbmd0aCwgVEVTVF9DSEVDS1BPSU5UX05VTSgxOCkpOworCisgICAgICAgIGlmIChQU0FfS0VZX1RZUEVfSVNfVU5TVFJVQ1RVUkVEKGNoZWNrMVtpXS5rZXlfdHlwZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX01FTUNNUChkYXRhLCBjaGVjazFbaV0ua2V5X2RhdGEsIGxlbmd0aCwgVEVTVF9DSEVDS1BPSU5UX05VTSgxOSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKFBTQV9LRVlfVFlQRV9JU19SU0EoY2hlY2sxW2ldLmtleV90eXBlKSB8fCBQU0FfS0VZX1RZUEVfSVNfRUNDKGNoZWNrMVtpXS5rZXlfdHlwZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX01FTUNNUChkYXRhLCBrZXlfZGF0YSwgbGVuZ3RoLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIwKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOworICAgICAgICB9CisKKyAgICAgICAgLyogRGVzdHJveSB0aGUga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fREVTVFJPWV9LRVksIHRhcmdldF9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDIxKSk7CisgICAgfQorCisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworaW50MzJfdCBwc2FfY29weV9rZXlfbmVnYXRpdmVfdGVzdChzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgICBpbnQgICAgICAgICAgICAgIG51bV9jaGVja3MgPSBzaXplb2YoY2hlY2syKS9zaXplb2YoY2hlY2syWzBdKTsKKyAgICBpbnQzMl90ICAgICAgICAgIGksIHN0YXR1czsKKyAgICBwc2Ffa2V5X3BvbGljeV90IHBvbGljeSwgdGFyZ2V0X3BvbGljeSwgY29uc3RyYWludDsKKyAgICBwc2Ffa2V5X2hhbmRsZV90IHRhcmdldF9oYW5kbGU7CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkqLworICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fSU5JVCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2NoZWNrczsgaSsrKQorICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrICVkXSBUZXN0IHBzYV9jb3B5X2tleSB3aXRoIHVuYWxsb2NhdGVkIHRhcmdldCBrZXkgc2xvdFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisKKyAgICAgICAgLyogU2V0dGluZyB1cCB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIGVhY2ggY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT53ZF9yZXByb2dyYW1fdGltZXIoV0RfQ1JZUFRPX1RJTUVPVVQpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFZBTF9TVEFUVVNfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CisKKyAgICAgICAgLyogQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUxMT0NBVEVfS0VZLCAmY2hlY2syW2ldLmtleV9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKKworICAgICAgICAvKiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwKKyAgICAgICAgKiB1c2FnZSBvZiB0aGUga2V5CisgICAgICAgICovCisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9JTklULCAmcG9saWN5KTsKKyAgICAgICAgbWVtc2V0KCZ0YXJnZXRfaGFuZGxlLCAweERFQURERUFELCBzaXplb2YodGFyZ2V0X2hhbmRsZSkpOworCisgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KKyAgICAgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19LRVlfUE9MSUNZX1NFVF9VU0FHRSwgJnBvbGljeSwgY2hlY2syW2ldLnVzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X2FsZyk7CisKKyAgICAgICAgLyogSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0lNUE9SVF9LRVksIGNoZWNrMltpXS5rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0ua2V5X3R5cGUsIGNoZWNrMltpXS5rZXlfZGF0YSwgY2hlY2syW2ldLmtleV9sZW5ndGgpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDQpKTsKKworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVCwgJmNvbnN0cmFpbnQpOworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfU0VUX1VTQUdFLCAmY29uc3RyYWludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2syW2ldLmNvbnN0cmFpbnRfdXNhZ2UsIGNoZWNrMltpXS5jb25zdHJhaW50X2tleV9hbGcpOworCisgICAgICAgIC8qIE1ha2UgYSBjb3B5IG9mIGEga2V5IHdpdGggdW5hbGxvY2F0ZWQgdGFyZ2V0IGhhbmRsZSovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQ09QWV9LRVksIGNoZWNrMltpXS5rZXlfaGFuZGxlLCB0YXJnZXRfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25zdHJhaW50KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNSkpOworCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfY29weV9rZXkgd2l0aCB0YXJnZXQgY29udGFpbmluZyBrZXkgbWF0ZXJpYWxcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Rlc3RfY291bnQrKyk7CisgICAgICAgIHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fS0VZX1BPTElDWV9JTklULCAmdGFyZ2V0X3BvbGljeSk7CisKKyAgICAgICAgLyogQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0YXJnZXQga2V5ICovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQUxMT0NBVEVfS0VZLCAmdGFyZ2V0X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworCisgICAgICAgIC8qIFNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAqLworICAgICAgICB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfU0VUX1VTQUdFLCAmdGFyZ2V0X3BvbGljeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazJbaV0udGFyZ2V0X3VzYWdlLCBjaGVjazJbaV0udGFyZ2V0X2tleV9hbGcpOworCisgICAgICAgIC8qIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19TRVRfS0VZX1BPTElDWSwgdGFyZ2V0X2hhbmRsZSwgJnRhcmdldF9wb2xpY3kpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKworICAgICAgICAvKiBNYWtlIGEgY29weSBvZiBhIGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0NPUFlfS0VZLCBjaGVjazJbaV0ua2V5X2hhbmRsZSwgdGFyZ2V0X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29uc3RyYWludCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOworCisgICAgICAgIC8qIE1ha2UgYSBjb3B5IG9mIGEga2V5IGluIHRoZSBleGlzdGluZyB0YXJnZXQgc2xvdCovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQ09QWV9LRVksIGNoZWNrMltpXS5rZXlfaGFuZGxlLCB0YXJnZXRfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25zdHJhaW50KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfQUxSRUFEWV9FWElTVFMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOSkpOworCisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAlZF0gVGVzdCBwc2FfY29weV9rZXkgd2l0aCBubyBzb3VyY2UgaGFuZGxlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ190ZXN0X2NvdW50KyspOworICAgICAgICAvKiBEZXN0cm95IHRoZSBjb250ZW50cyBvZiBzb3VyY2UgYW5kIHRhcmdldCBzbG90cyAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0RFU1RST1lfS0VZLCBjaGVjazJbaV0ua2V5X2hhbmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTApKTsKKworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0RFU1RST1lfS0VZLCB0YXJnZXRfaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfU1VDQ0VTUywgVEVTVF9DSEVDS1BPSU5UX05VTSgxMSkpOworCisgICAgICAgIC8qIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdGFyZ2V0IGtleSAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSwgJnRhcmdldF9oYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIFBTQV9TVUNDRVNTLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEyKSk7CisKKyAgICAgICAgLyogU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdCAqLworICAgICAgICBzdGF0dXMgPSB2YWwtPmNyeXB0b19mdW5jdGlvbihWQUxfQ1JZUFRPX1NFVF9LRVlfUE9MSUNZLCB0YXJnZXRfaGFuZGxlLCAmdGFyZ2V0X3BvbGljeSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgUFNBX1NVQ0NFU1MsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTMpKTsKKworICAgICAgICAvKiBNYWtlIGEgY29weSBvZiBhIGtleSB3aXRoIG5vIHNvdXJjZSBtYXRlcmlhbCovCisgICAgICAgIHN0YXR1cyA9IHZhbC0+Y3J5cHRvX2Z1bmN0aW9uKFZBTF9DUllQVE9fQ09QWV9LRVksIGNoZWNrMltpXS5rZXlfaGFuZGxlLCB0YXJnZXRfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25zdHJhaW50KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTQpKTsKKyAgICB9CisKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDQvdGVzdF9jMDQ0LmggYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0NC90ZXN0X2MwNDQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTg3ZDNiCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDQvdGVzdF9jMDQ0LmgKQEAgLTAsMCArMSwzMSBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfQzA0NF9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfQzA0NF9DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jcnlwdG8uaCIKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8sIGMwNDQpCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLCB0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSwgdGVzdF9lbnRyeSkKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworZXh0ZXJuIGNsaWVudF90ZXN0X3QgdGVzdF9jMDQ0X2NyeXB0b19saXN0W107CisKK2ludDMyX3QgcHNhX2NvcHlfa2V5X3Rlc3Qoc2VjdXJpdHlfdCBjYWxsZXIpOworaW50MzJfdCBwc2FfY29weV9rZXlfbmVnYXRpdmVfdGVzdChzZWN1cml0eV90IGNhbGxlcik7CisjZW5kaWYgLyogX1RFU1RfQzA0NF9DTElFTlRfVEVTVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDQ0L3Rlc3RfZGF0YS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDQvdGVzdF9kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc3ODZkYgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9jcnlwdG8vdGVzdF9jMDQ0L3Rlc3RfZGF0YS5oCkBAIC0wLDAgKzEsMzQ4IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2NyeXB0by5oIgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgdGVzdF9kZXNjWzc1XTsKKyAgICBwc2Ffa2V5X2hhbmRsZV90ICAgICAgICBrZXlfaGFuZGxlOworICAgIHBzYV9rZXlfdHlwZV90ICAgICAgICAgIGtleV90eXBlOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIGtleV9kYXRhWzM0XTsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBrZXlfbGVuZ3RoOworICAgIHBzYV9rZXlfdXNhZ2VfdCAgICAgICAgIHVzYWdlOworICAgIHBzYV9rZXlfdXNhZ2VfdCAgICAgICAgIHRhcmdldF91c2FnZTsKKyAgICBwc2Ffa2V5X3VzYWdlX3QgICAgICAgICBjb25zdHJhaW50X3VzYWdlOworICAgIHBzYV9rZXlfdXNhZ2VfdCAgICAgICAgIGV4cGVjdGVkX3VzYWdlOworICAgIHBzYV9hbGdvcml0aG1fdCAgICAgICAgIGtleV9hbGc7CisgICAgcHNhX2FsZ29yaXRobV90ICAgICAgICAgdGFyZ2V0X2tleV9hbGc7CisgICAgcHNhX2FsZ29yaXRobV90ICAgICAgICAgY29uc3RyYWludF9rZXlfYWxnOworICAgIHBzYV9hbGdvcml0aG1fdCAgICAgICAgIGV4cGVjdGVkX2tleV9hbGc7CisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgZXhwZWN0ZWRfYml0X2xlbmd0aDsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBleHBlY3RlZF9rZXlfbGVuZ3RoOworICAgIHBzYV9zdGF0dXNfdCAgICAgICAgICAgIGV4cGVjdGVkX3N0YXR1czsKK30gdGVzdF9kYXRhOworCitzdGF0aWMgY29uc3QgdWludDhfdCByc2FfMzg0X2tleXBhaXJbMV07CitzdGF0aWMgY29uc3QgdWludDhfdCByc2FfMzg0X2tleWRhdGFbMV07CisKK3N0YXRpYyBjb25zdCB1aW50OF90IHJzYV8yNTZfa2V5cGFpcltdID0geworIDB4MzAsIDB4ODIsIDB4MDQsIDB4QTUsIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODIsIDB4MDEsIDB4MDEsIDB4MDAsIDB4QzAsCisgMHg5NSwgMHgwOCwgMHhFMSwgMHg1NywgMHg0MSwgMHhGMiwgMHg3MSwgMHg2RCwgMHhCNywgMHhEMiwgMHg0NSwgMHg0MSwgMHgyNywKKyAweDAxLCAweDY1LCAweEM2LCAweDQ1LCAweEFFLCAweEYyLCAweEJDLCAweDI0LCAweDMwLCAweEI4LCAweDk1LCAweENFLCAweDJGLAorIDB4NEUsIDB4RDYsIDB4RjYsIDB4MUMsIDB4ODgsIDB4QkMsIDB4N0MsIDB4OUYsIDB4RkIsIDB4QTgsIDB4NjcsIDB4N0YsIDB4RkUsCisgMHg1QywgMHg5QywgMHg1MSwgMHg3NSwgMHhGNywgMHg4QSwgMHhDQSwgMHgwNywgMHhFNywgMHgzNSwgMHgyRiwgMHg4RiwgMHhFMSwKKyAweEJELCAweDdCLCAweEMwLCAweDJGLCAweDdDLCAweEFCLCAweDY0LCAweEE4LCAweDE3LCAweEZDLCAweENBLCAweDVELCAweDdCLAorIDB4QkEsIDB4RTAsIDB4MjEsIDB4RTUsIDB4NzIsIDB4MkUsIDB4NkYsIDB4MkUsIDB4ODYsIDB4RDgsIDB4OTUsIDB4NzMsIDB4REEsCisgMHhBQywgMHgxQiwgMHg1MywgMHhCOSwgMHg1RiwgMHgzRiwgMHhENywgMHgxOSwgMHgwRCwgMHgyNSwgMHg0RiwgMHhFMSwgMHg2MywKKyAweDYzLCAweDUxLCAweDhCLCAweDBCLCAweDY0LCAweDNGLCAweEFELCAweDQzLCAweEI4LCAweEE1LCAweDFDLCAweDVDLCAweDM0LAorIDB4QjMsIDB4QUUsIDB4MDAsIDB4QTAsIDB4NjMsIDB4QzUsIDB4RjYsIDB4N0YsIDB4MEIsIDB4NTksIDB4NjgsIDB4NzgsIDB4NzMsCisgMHhBNiwgMHg4QywgMHgxOCwgMHhBOSwgMHgwMiwgMHg2RCwgMHhBRiwgMHhDMywgMHgxOSwgMHgwMSwgMHgyRSwgMHhCOCwgMHgxMCwKKyAweEUzLCAweEM2LCAweENDLCAweDQwLCAweEI0LCAweDY5LCAweEEzLCAweDQ2LCAweDMzLCAweDY5LCAweDg3LCAweDZFLCAweEM0LAorIDB4QkIsIDB4MTcsIDB4QTYsIDB4RjMsIDB4RTgsIDB4REQsIDB4QUQsIDB4NzMsIDB4QkMsIDB4N0IsIDB4MkYsIDB4MjEsIDB4QjUsCisgMHhGRCwgMHg2NiwgMHg1MSwgMHgwQywgMHhCRCwgMHg1NCwgMHhCMywgMHhFMSwgMHg2RCwgMHg1RiwgMHgxQywgMHhCQywgMHgyMywKKyAweDczLCAweEQxLCAweDA5LCAweDAzLCAweDg5LCAweDE0LCAweEQyLCAweDEwLCAweEI5LCAweDY0LCAweEMzLCAweDJBLCAweEQwLAorIDB4QTEsIDB4OTYsIDB4NEEsIDB4QkMsIDB4RTEsIDB4RDQsIDB4MUEsIDB4NUIsIDB4QzcsIDB4QTAsIDB4QzAsIDB4QzEsIDB4NjMsCisgMHg3OCwgMHgwRiwgMHg0NCwgMHgzNywgMHgzMCwgMHgzMiwgMHg5NiwgMHg4MCwgMHgzMiwgMHgyMywgMHg5NSwgMHhBMSwgMHg3NywKKyAweEJBLCAweDEzLCAweEQyLCAweDk3LCAweDczLCAweEUyLCAweDVELCAweDI1LCAweEM5LCAweDZBLCAweDBELCAweEMzLCAweDM5LAorIDB4NjAsIDB4QTQsIDB4QjQsIDB4QjAsIDB4NjksIDB4NDIsIDB4NDIsIDB4MDksIDB4RTksIDB4RDgsIDB4MDgsIDB4QkMsIDB4MzMsCisgMHgyMCwgMHhCMywgMHg1OCwgMHgyMiwgMHhBNywgMHhBQSwgMHhFQiwgMHhDNCwgMHhFMSwgMHhFNiwgMHg2MSwgMHg4MywgMHhDNSwKKyAweEQyLCAweDk2LCAweERGLCAweEQ5LCAweEQwLCAweDRGLCAweEFELCAweEQ3LCAweDAyLCAweDAzLCAweDAxLCAweDAwLCAweDAxLAorIDB4MDIsIDB4ODIsIDB4MDEsIDB4MDEsIDB4MDAsIDB4OUEsIDB4RDAsIDB4MzQsIDB4MEYsIDB4NTIsIDB4NjIsIDB4MDUsIDB4NTAsCisgMHgwMSwgMHhFRiwgMHg5RiwgMHhFRCwgMHg2NCwgMHg2RSwgMHhDMiwgMHhDNCwgMHhEQSwgMHgxQSwgMHhGMiwgMHg4NCwgMHhENywKKyAweDkyLCAweDEwLCAweDQ4LCAweDkyLCAweEM0LCAweEU5LCAweDZBLCAweEVCLCAweDhCLCAweDc1LCAweDZDLCAweEM2LCAweDc5LAorIDB4MzgsIDB4RjIsIDB4QzksIDB4NzIsIDB4NEEsIDB4ODYsIDB4NjQsIDB4NTQsIDB4OTUsIDB4NzcsIDB4Q0IsIDB4QzMsIDB4OUEsCisgMHg5RCwgMHhCNywgMHhENCwgMHgxRCwgMHhBNCwgMHgwMCwgMHhDOCwgMHg5RSwgMHg0RSwgMHhFNCwgMHhERCwgMHhDNywgMHhCQSwKKyAweDY3LCAweDE2LCAweEMxLCAweDc0LCAweEJDLCAweEE5LCAweEQ2LCAweDk0LCAweDhGLCAweDJCLCAweDMwLCAweDFBLCAweEZCLAorIDB4RUQsIDB4REYsIDB4MjEsIDB4MDUsIDB4MjMsIDB4RDksIDB4NEEsIDB4MzksIDB4QkQsIDB4OTgsIDB4NkIsIDB4NjUsIDB4OUEsCisgMHhCOCwgMHhEQywgMHhDNCwgMHg3RCwgMHhFRSwgMHhBNiwgMHg0MywgMHgxNSwgMHgyRSwgMHgzRCwgMHhCRSwgMHgxRCwgMHgyMiwKKyAweDYwLCAweDJBLCAweDczLCAweDMwLCAweEQ1LCAweDNFLCAweEQ4LCAweEEyLCAweEFDLCAweDg2LCAweDQzLCAweDJFLCAweEM0LAorIDB4RjUsIDB4NjQsIDB4NUUsIDB4M0YsIDB4ODksIDB4NzUsIDB4MEYsIDB4MTEsIDB4RDgsIDB4NTEsIDB4MjUsIDB4NEUsIDB4OUYsCisgMHhEOCwgMHhBQSwgMHhBMywgMHhDRSwgMHg2MCwgMHhCMywgMHhFMiwgMHg4QSwgMHhEOSwgMHg3RSwgMHgxQiwgMHhGMCwgMHg2NCwKKyAweENBLCAweDlBLCAweDVCLCAweDA1LCAweDBCLCAweDVCLCAweEFBLCAweENCLCAweEU1LCAweEUzLCAweDNGLCAweDZFLCAweDMyLAorIDB4MjIsIDB4MDUsIDB4RjMsIDB4RDAsIDB4RkEsIDB4RUYsIDB4NzQsIDB4NTIsIDB4ODEsIDB4RTIsIDB4NUYsIDB4NzQsIDB4RDMsCisgMHhCRCwgMHhGRiwgMHgzMSwgMHg4MywgMHg0NSwgMHg3NSwgMHhGQSwgMHg2MywgMHg3QSwgMHg5NywgMHgyRSwgMHhENiwgMHhCNiwKKyAweDE5LCAweEM2LCAweDkyLCAweDI2LCAweEU0LCAweDI4LCAweDA2LCAweDUwLCAweDUwLCAweDBFLCAweDc4LCAweDJFLCAweEE5LAorIDB4NzgsIDB4MEQsIDB4MTQsIDB4OTcsIDB4QjQsIDB4MTIsIDB4RDgsIDB4MzEsIDB4NDAsIDB4QUIsIDB4QTEsIDB4MDEsIDB4NDEsCisgMHhDMiwgMHgzMCwgMHhGOCwgMHgwNywgMHg1RiwgMHgxNiwgMHhFNCwgMHg2MSwgMHg3NywgMHhEMiwgMHg2MCwgMHhGMiwgMHg5RiwKKyAweDhELCAweEU4LCAweEY0LCAweEJBLCAweEVCLCAweDYzLCAweERFLCAweDJBLCAweDk3LCAweDgxLCAweEVGLCAweDRDLCAweDZDLAorIDB4RTYsIDB4NTUsIDB4MzQsIDB4NTEsIDB4MkIsIDB4MjgsIDB4MzQsIDB4RjQsIDB4NTMsIDB4MUMsIDB4QzQsIDB4NTgsIDB4MEEsCisgMHgzRiwgMHhCQiwgMHhBRiwgMHhCNSwgMHhGNywgMHg0QSwgMHg4NSwgMHg0MywgMHgyRCwgMHgzQywgMHhGMSwgMHg1OCwgMHg1OCwKKyAweDgxLCAweDAyLCAweDgxLCAweDgxLCAweDAwLCAweEYyLCAweDJDLCAweDU0LCAweDc2LCAweDM5LCAweDIzLCAweDYzLCAweEM5LAorIDB4MTAsIDB4MzIsIDB4QjcsIDB4OTMsIDB4QUQsIDB4QUYsIDB4QkUsIDB4MTksIDB4NzUsIDB4OTYsIDB4ODEsIDB4NjQsIDB4RTYsCisgMHhCNSwgMHhCOCwgMHg4OSwgMHg0MiwgMHg0MSwgMHhEMSwgMHg2RCwgMHhEMCwgMHgxQywgMHgxQiwgMHhGOCwgMHgxQiwgMHhBQywKKyAweDY5LCAweENCLCAweDM2LCAweDNDLCAweDY0LCAweDdELCAweERDLCAweEY0LCAweDE5LCAweEI4LCAweEMzLCAweDYwLCAweEIxLAorIDB4NTcsIDB4NDgsIDB4NUYsIDB4NTIsIDB4NEYsIDB4NTksIDB4M0EsIDB4NTUsIDB4N0YsIDB4MzIsIDB4QzAsIDB4MTksIDB4NDMsCisgMHg1MCwgMHgzRiwgMHhBRSwgMHhDRSwgMHg2RiwgMHgxNywgMHhGMywgMHgwRSwgMHg5RiwgMHg0MCwgMHhDQSwgMHg0RSwgMHhBRCwKKyAweDE1LCAweDNCLCAweEM5LCAweDc5LCAweEU5LCAweEMwLCAweDU5LCAweDM4LCAweDczLCAweDcwLCAweDlDLCAweDBBLCAweDdDLAorIDB4QzksIDB4M0EsIDB4NDgsIDB4MzIsIDB4QTcsIDB4RDgsIDB4NDksIDB4NzUsIDB4MEEsIDB4ODUsIDB4QzIsIDB4QzIsIDB4RkQsCisgMHgxNSwgMHg3MywgMHhEQSwgMHg5OSwgMHgwOSwgMHgyQSwgMHg2OSwgMHg5QSwgMHg5RiwgMHgwQSwgMHg3MSwgMHhCRiwgMHhCMCwKKyAweDA0LCAweEE2LCAweDhDLCAweDdBLCAweDVBLCAweDZGLCAweDQ4LCAweDVBLCAweDU0LCAweDNCLCAweEM2LCAweEIxLCAweDUzLAorIDB4MTcsIDB4REYsIDB4RTcsIDB4MDIsIDB4ODEsIDB4ODEsIDB4MDAsIDB4Q0IsIDB4OTMsIDB4REUsIDB4NzcsIDB4MTUsIDB4NUQsCisgMHhCNywgMHg1QywgMHg1QywgMHg3QywgMHhEOCwgMHg5MCwgMHhBOSwgMHg5OCwgMHgyRCwgMHhENiwgMHg2OSwgMHgwRSwgMHg2MywKKyAweEIzLCAweEEzLCAweERDLCAweEE2LCAweENDLCAweDhCLCAweDZBLCAweEE0LCAweEEyLCAweDEyLCAweDhDLCAweDhFLCAweDdCLAorIDB4NDgsIDB4MkMsIDB4QjIsIDB4NEIsIDB4MzcsIDB4REMsIDB4MDYsIDB4MTgsIDB4N0QsIDB4RUEsIDB4RkUsIDB4NzYsIDB4QTEsCisgMHhENCwgMHhBMSwgMHhFOSwgMHgzRiwgMHgwRCwgMHhDRCwgMHgxQiwgMHg1RiwgMHhBRiwgMHg1RiwgMHg5RSwgMHg5NiwgMHg1QiwKKyAweDVCLCAweDBGLCAweEExLCAweDdDLCAweEFGLCAweEIzLCAweDlCLCAweDkwLCAweERCLCAweDU3LCAweDczLCAweDNBLCAweEVELAorIDB4QjAsIDB4MjMsIDB4NDQsIDB4QUUsIDB4NDEsIDB4NEYsIDB4MUYsIDB4MDcsIDB4NDIsIDB4MTMsIDB4MjMsIDB4NEMsIDB4Q0IsCisgMHhGQSwgMHhGNCwgMHgxNCwgMHhBNCwgMHhENSwgMHhGNywgMHg5RSwgMHgzNiwgMHg3QywgMHg1QiwgMHg5RiwgMHhBOCwgMHgzQywKKyAweEMxLCAweDg1LCAweDVGLCAweDc0LCAweEQyLCAweDM5LCAweDJELCAweEZGLCAweEQwLCAweDg0LCAweERGLCAweEZCLCAweEIzLAorIDB4MjAsIDB4N0EsIDB4MkUsIDB4OUIsIDB4MTcsIDB4QUUsIDB4RTYsIDB4QkEsIDB4MEIsIDB4QUUsIDB4NUYsIDB4NTMsIDB4QTQsCisgMHg1MiwgMHhFRCwgMHgxQiwgMHhDNCwgMHg5MSwgMHgwMiwgMHg4MSwgMHg4MSwgMHgwMCwgMHhFQywgMHg5OCwgMHhEQSwgMHhCQiwKKyAweEQ1LCAweEZFLCAweEY5LCAweDUyLCAweDRBLCAweDdELCAweDAyLCAweDU1LCAweDQ5LCAweDZGLCAweDU1LCAweDZFLCAweDUyLAorIDB4MkYsIDB4ODQsIDB4QTMsIDB4MkIsIDB4QjMsIDB4ODYsIDB4NjIsIDB4QjMsIDB4NTQsIDB4RDIsIDB4NjMsIDB4NTIsIDB4REEsCisgMHhFMywgMHg4OCwgMHg3NiwgMHhBMCwgMHhFRiwgMHg4QiwgMHgxNSwgMHhBNSwgMHhEMywgMHgxOCwgMHgxNCwgMHg3MiwgMHg3NywKKyAweDVFLCAweEM3LCAweEEzLCAweDA0LCAweDFGLCAweDlFLCAweDE5LCAweDYyLCAweEI1LCAweDFCLCAweDFCLCAweDlFLCAweEMzLAorIDB4RjIsIDB4QjUsIDB4MzIsIDB4RjksIDB4NEMsIDB4QzEsIDB4QUEsIDB4RUIsIDB4MEMsIDB4MjYsIDB4N0QsIDB4RDQsIDB4NUYsCisgMHg0QSwgMHg1MSwgMHg1QywgMHhBNCwgMHg0NSwgMHgwNiwgMHg3MCwgMHg0NCwgMHhBNywgMHg1NiwgMHhDMCwgMHhENCwgMHgyMiwKKyAweDE0LCAweDc2LCAweDlFLCAweEQ4LCAweDYzLCAweDUwLCAweDg5LCAweDkwLCAweEQzLCAweEUyLCAweEJGLCAweDgxLCAweDk1LAorIDB4OTIsIDB4MzEsIDB4NDEsIDB4ODcsIDB4MzksIDB4MUEsIDB4NDMsIDB4MEIsIDB4MTgsIDB4QTUsIDB4NTMsIDB4MUYsIDB4MzksCisgMHgxQSwgMHg1RiwgMHgxRiwgMHg0MywgMHhCQywgMHg4NywgMHg2QSwgMHhERiwgMHg2RSwgMHhEMywgMHgyMiwgMHgwMCwgMHhGRSwKKyAweDIyLCAweDk4LCAweDcwLCAweDRFLCAweDFBLCAweDE5LCAweDI5LCAweDAyLCAweDgxLCAweDgxLCAweDAwLCAweDhBLCAweDQxLAorIDB4NTYsIDB4MjgsIDB4NTEsIDB4OUUsIDB4NUYsIDB4RDQsIDB4OUUsIDB4MEIsIDB4M0IsIDB4OTgsIDB4QTMsIDB4NTQsIDB4RjIsCisgMHg2QywgMHg1NiwgMHhENCwgMHhBQSwgMHhFOSwgMHg2OSwgMHgzMywgMHg4NSwgMHgyNCwgMHgwQywgMHhEQSwgMHhENCwgMHgwQywKKyAweDJELCAweEM0LCAweEJGLCAweDRGLCAweDAyLCAweDY5LCAweDM4LCAweDdDLCAweEQ0LCAweEU2LCAweERDLCAweDRDLCAweEVELAorIDB4RDcsIDB4MTYsIDB4MTEsIDB4QzMsIDB4M0UsIDB4MDAsIDB4RTcsIDB4QzMsIDB4MjYsIDB4QzAsIDB4NTEsIDB4MDIsIDB4REUsCisgMHhCQiwgMHg3NSwgMHg5QywgMHg2RiwgMHg1NiwgMHg5QywgMHg3QSwgMHhGMywgMHg4RSwgMHhFRiwgMHhDRiwgMHg4QSwgMHhDNSwKKyAweDJCLCAweEQyLCAweERBLCAweDA2LCAweDZBLCAweDQ0LCAweEM5LCAweDczLCAweEZFLCAweDZFLCAweDk5LCAweDg3LCAweEY4LAorIDB4NUIsIDB4QkUsIDB4RjEsIDB4N0MsIDB4RTYsIDB4NjUsIDB4QjUsIDB4NEYsIDB4NkMsIDB4RjAsIDB4QzksIDB4QzUsIDB4RkYsCisgMHgxNiwgMHhDQSwgMHg4QiwgMHgxQiwgMHgxNywgMHhFMiwgMHg1OCwgMHgzRCwgMHhBMiwgMHgzNywgMHhBQiwgMHgwMSwgMHhCQywKKyAweEJGLCAweDQwLCAweENFLCAweDUzLCAweDhDLCAweDhFLCAweEVELCAweEVGLCAweEVFLCAweDU5LCAweDlELCAweEUwLCAweDYzLAorIDB4RTYsIDB4N0MsIDB4NUUsIDB4RjUsIDB4OEUsIDB4NEIsIDB4RjEsIDB4M0IsIDB4QzEsIDB4MDIsIDB4ODEsIDB4ODAsIDB4NEQsCisgMHg0NSwgMHhGOSwgMHg0MCwgMHg4QywgMHhDNSwgMHg1QiwgMHhGNCwgMHgyQSwgMHgxQSwgMHg4QSwgMHhCNCwgMHhGMiwgMHgxQywKKyAweEFDLCAweDZCLCAweEU5LCAweDBDLCAweDU2LCAweDM2LCAweEI3LCAweDRFLCAweDcyLCAweDk2LCAweEQ1LCAweEU1LCAweDhBLAorIDB4RDIsIDB4RTIsIDB4RkYsIDB4RjEsIDB4RjEsIDB4MTgsIDB4MTMsIDB4M0QsIDB4ODYsIDB4MDksIDB4QjgsIDB4RDgsIDB4NzYsCisgMHhBNywgMHhDOSwgMHgxQywgMHg3MSwgMHg1MiwgMHg5NCwgMHgzMCwgMHg0MywgMHhFMCwgMHhGMSwgMHg3OCwgMHg3NCwgMHhGRCwKKyAweDYxLCAweDFCLCAweDRDLCAweDA5LCAweENDLCAweEU2LCAweDY4LCAweDJBLCAweDcxLCAweEFELCAweDFDLCAweERGLCAweDQzLAorIDB4QkMsIDB4NTYsIDB4REIsIDB4QTUsIDB4QTQsIDB4QkUsIDB4MzUsIDB4NzAsIDB4QTQsIDB4NUUsIDB4Q0YsIDB4NEYsIDB4RkMsCisgMHgwMCwgMHg1NSwgMHg5OSwgMHgzQSwgMHgzRCwgMHgyMywgMHhDRiwgMHg2NywgMHg1QSwgMHhGNSwgMHgyMiwgMHhGOCwgMHhCNSwKKyAweDI5LCAweEQwLCAweDQ0LCAweDExLCAweEVCLCAweDM1LCAweDJFLCAweDQ2LCAweEJFLCAweEZELCAweDhFLCAweDE4LCAweEIyLAorIDB4NUYsIDB4QTgsIDB4QkYsIDB4MTksIDB4MzIsIDB4QTEsIDB4RjUsIDB4REMsIDB4MDMsIDB4RTYsIDB4N0MsIDB4OUEsIDB4MUYsCisgMHgwQywgMHg3QywgMHhBOSwgMHhCMCwgMHgwRSwgMHgyMSwgMHgzNywgMHgzQiwgMHhGMSwgMHhCMH07CisKK3N0YXRpYyBjb25zdCB1aW50OF90IHJzYV8yNTZfa2V5ZGF0YVtdID0geworIDB4MzAsIDB4ODIsIDB4MDEsIDB4MEEsCisgMHgwMiwgMHg4MiwgMHgwMSwgMHgwMSwgMHgwMCwgMHhEQiwgMHgxQywgMHg3RiwgMHgyRSwgMHgwQiwgMHhDRCwgMHhCRiwgMHhDRSwgMHhEMSwKKyAweDc1LCAweDEwLCAweEEwLCAweEEyLCAweEI4LCAweENFLCAweDdELCAweEFBLCAweEUyLCAweDA1LCAweEUwLCAweDdBLCAweEQ4LCAweDQ0LAorIDB4NjMsIDB4OEYsIDB4QjUsIDB4QkQsIDB4QzAsIDB4QjAsIDB4MTksIDB4QjksIDB4MzcsIDB4QjgsIDB4MTksIDB4NEEsIDB4MEUsIDB4RjEsCisgMHg1RCwgMHg3NCwgMHg4MCwgMHg2NywgMHg0NiwgMHg4NywgMHgwNiwgMHhERSwgMHg1QiwgMHg3RiwgMHgwNiwgMHgwMywgMHhCRCwgMHhDMSwKKyAweDhELCAweDVFLCAweDA3LCAweDE1LCAweEQ0LCAweDVCLCAweEY0LCAweERDLCAweEU1LCAweENGLCAweDNELCAweEY5LCAweEMxLCAweDExLAorIDB4MkMsIDB4QUUsIDB4NkEsIDB4QjksIDB4OEEsIDB4QkQsIDB4MUQsIDB4NjcsIDB4NjYsIDB4MTcsIDB4RUEsIDB4NEUsIDB4QkQsIDB4REIsCisgMHgxNSwgMHg5QSwgMHg4MiwgMHg4NywgMHhFNCwgMHhGMCwgMHg3OCwgMHhDMywgMHhBMywgMHg4NSwgMHg4NywgMHhCMCwgMHhGRCwgMHg5RiwKKyAweEE5LCAweDk5LCAweDVGLCAweEUzLCAweDMzLCAweEVDLCAweENDLCAweEVBLCAweDBCLCAweEI1LCAweDYxLCAweDVFLCAweEYxLCAweDQ5LAorIDB4N0UsIDB4M0YsIDB4QTMsIDB4MkQsIDB4RUEsIDB4MDEsIDB4MEMsIDB4Q0MsIDB4NDIsIDB4OUEsIDB4NzYsIDB4OUIsIDB4QzQsIDB4RDAsCisgMHgzNywgMHhEMywgMHhCMSwgMHgxNywgMHgwMSwgMHg2MSwgMHgwMSwgMHgxNiwgMHg1OSwgMHg3RSwgMHgxQywgMHgxNywgMHhDMywgMHg1MywKKyAweEZELCAweEQxLCAweDcyLCAweENCLCAweDRDLCAweDYwLCAweDE1LCAweERBLCAweDdELCAweEUyLCAweEVBLCAweEFELCAweDUwLCAweEVGLAorIDB4OEUsIDB4RTIsIDB4OEIsIDB4RDQsIDB4NkEsIDB4NzcsIDB4NTUsIDB4RDYsIDB4NzAsIDB4RDksIDB4NkIsIDB4QkIsIDB4RjEsIDB4RUUsCisgMHgzOSwgMHgwNCwgMHgzOCwgMHhBMywgMHhCRCwgMHhFMiwgMHhEMSwgMHhFMCwgMHg2NiwgMHg2QiwgMHhFMiwgMHg5QywgMHg0NywgMHg5OSwKKyAweEU5LCAweDI4LCAweEU2LCAweEI2LCAweEZDLCAweDJFLCAweENBLCAweDY3LCAweDQzLCAweDg0LCAweEU4LCAweEQ1LCAweDgzLCAweEQ2LAorIDB4OUQsIDB4OTgsIDB4NkIsIDB4MDEsIDB4M0UsIDB4ODEsIDB4REMsIDB4M0MsIDB4N0EsIDB4Q0EsIDB4RjksIDB4RjMsIDB4OUMsIDB4RjcsCisgMHhENiwgMHgyOCwgMHgxQiwgMHgyNywgMHg3OCwgMHg3QywgMHhDMywgMHhEMCwgMHhENSwgMHg2MywgMHhBNywgMHg4MSwgMHgzNCwgMHg4OSwKKyAweEFELCAweDI1LCAweDZBLCAweEJELCAweEYyLCAweEVBLCAweEVELCAweEZBLCAweDU3LCAweEZDLCAweEU1LCAweDM0LCAweEM2LCAweEMxLAorIDB4MEYsIDB4NzEsIDB4MkQsIDB4RDIsIDB4MDgsIDB4MTAsIDB4MUIsIDB4QUQsIDB4NDQsIDB4NDEsIDB4RTAsIDB4RkUsIDB4NzksIDB4QTAsCisgMHg2MywgMHg5MywgMHg4QSwgMHhCMSwgMHg1RCwgMHhFOSwgMHhCMCwgMHhFRSwgMHg2RiwgMHgwMiwgMHgwMywgMHgwMSwgMHgwMCwgMHgwMX07CisKK3N0YXRpYyBjb25zdCB1aW50OF90IGVjX2tleWRhdGFbXSA9IHsKKyAweDA0LCAweGRlLCAweGE1LCAweGU0LCAweDVkLCAweDBlLCAweGEzLCAweDdmLCAweGM1LCAweDY2LCAweDIzLCAweDJhLCAweDUwLCAweDhmLAorIDB4NGEsIDB4ZDIsIDB4MGUsIDB4YTEsIDB4M2QsIDB4NDcsIDB4ZTQsIDB4YmYsIDB4NWYsIDB4YTQsIDB4ZDUsIDB4NGEsIDB4NTcsIDB4YTAsCisgMHhiYSwgMHgwMSwgMHgyMCwgMHg0MiwgMHgwOCwgMHg3MCwgMHg5NywgMHg0OSwgMHg2ZSwgMHhmYywgMHg1OCwgMHgzZiwgMHhlZCwgMHg4YiwKKyAweDI0LCAweGE1LCAweGI5LCAweGJlLCAweDlhLCAweDUxLCAweGRlLCAweDA2LCAweDNmLCAweDVhLCAweDAwLCAweGE4LCAweGI2LCAweDk4LAorIDB4YTEsIDB4NmYsIDB4ZDcsIDB4ZjIsIDB4OWIsIDB4NTQsIDB4ODUsIDB4ZjMsIDB4MjB9OworCitzdGF0aWMgY29uc3QgdWludDhfdCBlY19rZXlwYWlyW10gPSB7CisgMHg2OCwgMHg0OSwgMHhmOSwgMHg3ZCwgMHgxMCwgMHg2NiwgMHhmNiwgMHg5OSwgMHg3NywgMHg1OSwgMHg2MywgMHg3YywgMHg3ZSwgMHgzOCwKKyAweDk5LCAweDQ2LCAweDRjLCAweGVlLCAweDNlLCAweGM3LCAweGFjLCAweDk3LCAweDA2LCAweDUzLCAweGEwLCAweGJlLCAweDA3LCAweDQyfTsKKworc3RhdGljIHRlc3RfZGF0YSBjaGVjazFbXSA9IHsKKyNpZmRlZiBBUkNIX1RFU1RfQ0lQRVJfTU9ERV9DVFIKKyNpZmRlZiBBUkNIX1RFU1RfQUVTXzEyOAoreyJUZXN0IHBzYV9jb3B5X2tleSAxNiBCeXRlIEFFU1xuIiwgMSwgUFNBX0tFWV9UWVBFX0FFUywKK3sweDQ5LCAweDhFLCAweEM3LCAweDdELCAweDAxLCAweDk1LCAweDBELCAweDk0LCAweDJDLCAweDE2LCAweEE1LCAweDNFLCAweDk5LAorIDB4NUYsIDB4QzksIDB4Nzd9LAorIEFFU18xNkJfS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsCisgUFNBX0FMR19DVFIsIFBTQV9BTEdfQ1RSLCBQU0FfQUxHX0NUUiwgUFNBX0FMR19DVFIsCisgQllURVNfVE9fQklUUyhBRVNfMTZCX0tFWV9TSVpFKSwgQUVTXzE2Ql9LRVlfU0laRSwgUFNBX1NVQ0NFU1MKK30sCisjZW5kaWYKKworI2lmZGVmIEFSQ0hfVEVTVF9BRVNfMTkyCit7IlRlc3QgcHNhX2NvcHlfa2V5IDI0IEJ5dGUgQUVTXG4iLCAyLCBQU0FfS0VZX1RZUEVfQUVTLAorezB4MjQsIDB4MTMsIDB4NjEsIDB4NDcsIDB4NjEsIDB4QjgsIDB4QzgsIDB4RjAsIDB4REYsIDB4QUIsIDB4NUEsIDB4MEUsIDB4ODcsCisgMHg0MCwgMHhBQywgMHhBMywgMHg5MCwgMHg3NywgMHg4MywgMHg1MiwgMHgzMSwgMHg3NCwgMHhGOSwgMHgwNX0sCisgQUVTXzI0Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0VYUE9SVCB8IFBTQV9LRVlfVVNBR0VfRU5DUllQVCwgUFNBX0tFWV9VU0FHRV9FWFBPUlQgfCBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsCisgUFNBX0tFWV9VU0FHRV9FWFBPUlQgfCBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsIFBTQV9LRVlfVVNBR0VfRVhQT1JUIHwgUFNBX0tFWV9VU0FHRV9FTkNSWVBULAorIFBTQV9BTEdfQ1RSLCBQU0FfQUxHX0NUUiwgUFNBX0FMR19DVFIsIFBTQV9BTEdfQ1RSLAorIEJZVEVTX1RPX0JJVFMoQUVTXzI0Ql9LRVlfU0laRSksIEFFU18yNEJfS0VZX1NJWkUsIFBTQV9TVUNDRVNTCit9LAorI2VuZGlmCisKKyNpZmRlZiBBUkNIX1RFU1RfQUVTXzI1NgoreyJUZXN0IHBzYV9jb3B5X2tleSAzMiBCeXRlIEFFU1xuIiwgMywgUFNBX0tFWV9UWVBFX0FFUywKK3sweEVBLCAweEQ1LCAweEU2LCAweEM4LCAweDUxLCAweEY5LCAweEVDLCAweEJCLCAweDlCLCAweDU3LCAweDdDLCAweEVELCAweEQyLAorIDB4NEIsIDB4ODIsIDB4ODQsIDB4OUYsIDB4OUYsIDB4RTYsIDB4NzMsIDB4MjEsIDB4M0QsIDB4MUEsIDB4MDUsIDB4QzksIDB4RUQsCisgMHhERiwgMHgyNSwgMHgxNywgMHg2OCwgMHg4NiwgMHhBRX0sCisgQUVTXzMyQl9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0VYUE9SVCB8IFBTQV9LRVlfVVNBR0VfREVDUllQVCwgUFNBX0tFWV9VU0FHRV9FWFBPUlQgfCBQU0FfS0VZX1VTQUdFX0VOQ1JZUFQsCisgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9LRVlfVVNBR0VfRVhQT1JULAorIFBTQV9BTEdfQ1RSLCBQU0FfQUxHX0NUUiwgUFNBX0FMR19DVFIsIFBTQV9BTEdfQ1RSLAorIEJZVEVTX1RPX0JJVFMoQUVTXzMyQl9LRVlfU0laRSksIEFFU18zMkJfS0VZX1NJWkUsIFBTQV9TVUNDRVNTCit9LAorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIEFSQ0hfVEVTVF9SU0FfUEtDUzFWMTVfU0lHTl9SQVcKKyNpZmRlZiBBUkNIX1RFU1RfUlNBXzIwNDgKK3siVGVzdCBwc2FfY29weV9rZXkgMjA0OCBSU0EgcHVibGljIGtleVxuIiwgNCwgUFNBX0tFWV9UWVBFX1JTQV9QVUJMSUNfS0VZLAorIHswfSwKKyAyNzAsCisgUFNBX0tFWV9VU0FHRV9FWFBPUlQgfCBQU0FfS0VZX1VTQUdFX1NJR04sIFBTQV9LRVlfVVNBR0VfRVhQT1JUIHwgUFNBX0tFWV9VU0FHRV9TSUdOLAorIFBTQV9LRVlfVVNBR0VfRVhQT1JUIHwgUFNBX0tFWV9VU0FHRV9FTkNSWVBULCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwKKyBQU0FfQUxHX1JTQV9QS0NTMVYxNV9TSUdOX1JBVywgUFNBX0FMR19SU0FfUEtDUzFWMTVfU0lHTl9SQVcsCisgUFNBX0FMR19SU0FfUEtDUzFWMTVfU0lHTl9SQVcsIFBTQV9BTEdfUlNBX1BLQ1MxVjE1X1NJR05fUkFXLAorIDIwNDgsIDI3MCwgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY29weV9rZXkgd2l0aCBSU0EgMjA0OCBrZXlwYWlyXG4iLCA1LCBQU0FfS0VZX1RZUEVfUlNBX0tFWVBBSVIsCisgezB9LAorIDExOTMsCisgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9LRVlfVVNBR0VfRVhQT1JULAorIFBTQV9LRVlfVVNBR0VfRVhQT1JUIHwgUFNBX0tFWV9VU0FHRV9WRVJJRlksIFBTQV9LRVlfVVNBR0VfRVhQT1JULAorIFBTQV9BTEdfUlNBX1BLQ1MxVjE1X1NJR05fUkFXLCBQU0FfQUxHX1JTQV9QS0NTMVYxNV9TSUdOX1JBVywKKyBQU0FfQUxHX1JTQV9QS0NTMVYxNV9TSUdOX1JBVywgUFNBX0FMR19SU0FfUEtDUzFWMTVfU0lHTl9SQVcsCisgMjA0OCwgMTE5MywgUFNBX1NVQ0NFU1MKK30sCisKK3siVGVzdCBwc2FfY29weV9rZXkgd2l0aCBJbmNvbXBhdGlibGUgdGFyZ2V0IHBvbGljeShzb3VyY2UgYW5kIHRhcmdldClcbiIsCisgMTIsIFBTQV9LRVlfVFlQRV9SU0FfS0VZUEFJUiwKKyB7MH0sCisgMTE5MywKKyBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwKKyBQU0FfQUxHX1JTQV9QS0NTMVYxNV9TSUdOKFBTQV9BTEdfQU5ZX0hBU0gpLCBQU0FfQUxHX1JTQV9QU1MoUFNBX0FMR19BTllfSEFTSCksCisgLTEsIC0xLAorIDIwNDgsIDExOTMsIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCit9LAorCit7IlRlc3QgcHNhX2NvcHlfa2V5IHdpdGggSW5jb21wYXRpYmxlIGNvbnN0cmFpbnRcbiIsIDYsIFBTQV9LRVlfVFlQRV9SU0FfS0VZUEFJUiwKKyB7MH0sCisgMTE5MywKKyBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwKKyBQU0FfQUxHX1JTQV9QS0NTMVYxNV9TSUdOKFBTQV9BTEdfQU5ZX0hBU0gpLCBQU0FfQUxHX1JTQV9QS0NTMVYxNV9TSUdOKFBTQV9BTEdfQU5ZX0hBU0gpLAorIFBTQV9BTEdfUlNBX1BTUyhQU0FfQUxHX0FOWV9IQVNIKSwgLTEsCisgMjA0OCwgMTE5MywgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQKK30sCisKK3siVGVzdCBwc2FfY29weV9rZXkgd2l0aCB1bmV4cG9ydCBzb3VyY2Uga2V5IHVzYWdlXG4iLCA3LCBQU0FfS0VZX1RZUEVfUlNBX0tFWVBBSVIsCisgezB9LAorIDExOTMsCisgUFNBX0tFWV9VU0FHRV9TSUdOLCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwKKyBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgMCwKKyBQU0FfQUxHX1JTQV9QS0NTMVYxNV9TSUdOX1JBVywgUFNBX0FMR19SU0FfUEtDUzFWMTVfU0lHTl9SQVcsCisgUFNBX0FMR19SU0FfUEtDUzFWMTVfU0lHTl9SQVcsIFBTQV9BTEdfUlNBX1BLQ1MxVjE1X1NJR05fUkFXLAorIDIwNDgsIDExOTMsIFBTQV9TVUNDRVNTCit9LAorCisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQVJDSF9URVNUX0NJUEVSX01PREVfQ1RSCisjaWZkZWYgQVJDSF9URVNUX0RFU18xS0VZCit7IlRlc3QgcHNhX2NvcHlfa2V5IHdpdGggREVTIDY0IGJpdCBrZXlcbiIsIDgsIFBTQV9LRVlfVFlQRV9ERVMsCisgezB4NzAsIDB4MjQsIDB4NTUsIDB4MEMsIDB4MTQsIDB4OUQsIDB4RUQsIDB4Mjl9LAorIERFU184Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwKKyBQU0FfQUxHX0NUUiwgUFNBX0FMR19DVFIsIFBTQV9BTEdfQ1RSLCBQU0FfQUxHX0NUUiwKKyBCWVRFU19UT19CSVRTKERFU184Ql9LRVlfU0laRSksIERFU184Ql9LRVlfU0laRSwgUFNBX1NVQ0NFU1MKK30sCisjZW5kaWYKKworI2lmZGVmIEFSQ0hfVEVTVF9ERVNfMktFWQoreyJUZXN0IHBzYV9jb3B5X2tleSB3aXRoIFRyaXBsZSBERVMgMi1LZXlcbiIsIDksIFBTQV9LRVlfVFlQRV9ERVMsCit7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGfSwKKyBERVMzXzJLRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwKKyBQU0FfQUxHX0NUUiwgUFNBX0FMR19DVFIsIFBTQV9BTEdfQ1RSLCBQU0FfQUxHX0NUUiwKKyBCWVRFU19UT19CSVRTKERFUzNfMktFWV9TSVpFKSwgREVTM18yS0VZX1NJWkUsIFBTQV9TVUNDRVNTCit9LAorI2VuZGlmCisKKyNpZmRlZiBBUkNIX1RFU1RfREVTXzNLRVkKK3siVGVzdCBwc2FfY29weV9rZXkgd2l0aCBUcmlwbGUgREVTIDMtS2V5XG4iLCAxMCwgUFNBX0tFWV9UWVBFX0RFUywKK3sweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweEFCLCAweENELCAweEVGLAorIDB4RjEsIDB4RTAsIDB4RDMsIDB4QzIsIDB4QjUsIDB4QTQsIDB4OTcsIDB4ODYsCisgMHhGRSwgMHhEQywgMHhCQSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMH0sCisgREVTM18zS0VZX1NJWkUsCisgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsCisgUFNBX0FMR19DVFIsIFBTQV9BTEdfQ1RSLCBQU0FfQUxHX0NUUiwgUFNBX0FMR19DVFIsCisgQllURVNfVE9fQklUUyhERVMzXzNLRVlfU0laRSksIERFUzNfM0tFWV9TSVpFLCBQU0FfU1VDQ0VTUworfSwKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBBUkNIX1RFU1RfRUNEU0EKKyNpZmRlZiBBUkNIX1RFU1RfRUNDX0NVUlZFX1NFQ1AyNTZSMQoreyJUZXN0IHBzYV9jb3B5X2tleSB3aXRoIEVDIFB1YmxpYyBrZXlcbiIsIDExLAorIFBTQV9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWShQU0FfRUNDX0NVUlZFX1NFQ1AyNTZSMSksCisgezB9LAorIDY1LAorIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9LRVlfVVNBR0VfRVhQT1JULAorIFBTQV9BTEdfRUNEU0FfQU5ZLCBQU0FfQUxHX0VDRFNBX0FOWSwgUFNBX0FMR19FQ0RTQV9BTlksIFBTQV9BTEdfRUNEU0FfQU5ZLAorIDI1NiwgNjUsIFBTQV9TVUNDRVNTCit9LAorI2VuZGlmCisKKyNpZmRlZiBBUkNIX1RFU1RfRUNDX0NVUlZFX1NFQ1AyMjRSMQoreyJUZXN0IHBzYV9jb3B5X2tleSB3aXRoIEVDIGtleXBhaXJcbiIsIDEyLAorIFBTQV9LRVlfVFlQRV9FQ0NfS0VZUEFJUihQU0FfRUNDX0NVUlZFX1NFQ1AyMjRSMSksCisgezB9LAorIDI4LAorIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9LRVlfVVNBR0VfRVhQT1JULAorIFBTQV9BTEdfRUNEU0FfQU5ZLCBQU0FfQUxHX0VDRFNBX0FOWSwgUFNBX0FMR19FQ0RTQV9BTlksIFBTQV9BTEdfRUNEU0FfQU5ZLAorIDIyNCwgMjgsIFBTQV9TVUNDRVNTCit9LAorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIEFSQ0hfVEVTVF9DSVBFUl9NT0RFX0NUUgorI2lmZGVmIEFSQ0hfVEVTVF9BRVMKK3siVGVzdCBwc2FfY29weV9rZXkgd2l0aCBJbmNvbXBhdGlibGUgdGFyZ2V0IHBvbGljeVxuIiwgMTMsIFBTQV9LRVlfVFlQRV9BRVMsCit7MHg0OSwgMHg4RSwgMHhDNywgMHg3RCwgMHgwMSwgMHg5NSwgMHgwRCwgMHg5NCwgMHgyQywgMHgxNiwgMHhBNSwgMHgzRSwgMHg5OSwKKyAweDVGLCAweEM5LCAweDc3fSwKKyBBRVNfMTZCX0tFWV9TSVpFLAorIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9LRVlfVVNBR0VfRVhQT1JULAorIFBTQV9BTEdfQ1RSLCBQU0FfQUxHX0NCQ19OT19QQURESU5HLCBQU0FfQUxHX0NCQ19OT19QQURESU5HLCBQU0FfQUxHX0NCQ19OT19QQURESU5HLAorIEJZVEVTX1RPX0JJVFMoQUVTXzE2Ql9LRVlfU0laRSksIEFFU18xNkJfS0VZX1NJWkUsIFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UCit9LAorI2VuZGlmCisjZW5kaWYKK307CisKK3N0YXRpYyB0ZXN0X2RhdGEgY2hlY2syW10gPSB7CisjaWZkZWYgQVJDSF9URVNUX0NJUEVSX01PREVfQ1RSCisjaWZkZWYgQVJDSF9URVNUX0FFU18xMjgKK3siVGVzdCBwc2FfY29weV9rZXkgbmVnYXRpdmUgY2FzZXNcbiIsIDE0LCBQU0FfS0VZX1RZUEVfQUVTLAorezB4NDksIDB4OEUsIDB4QzcsIDB4N0QsIDB4MDEsIDB4OTUsIDB4MEQsIDB4OTQsIDB4MkMsIDB4MTYsIDB4QTUsIDB4M0UsIDB4OTksCisgMHg1RiwgMHhDOSwgMHg3N30sCisgQUVTXzE2Ql9LRVlfU0laRSwKKyBQU0FfS0VZX1VTQUdFX0VYUE9SVCwgUFNBX0tFWV9VU0FHRV9FWFBPUlQsIFBTQV9LRVlfVVNBR0VfRVhQT1JULCBQU0FfS0VZX1VTQUdFX0VYUE9SVCwKKyBQU0FfQUxHX0NUUiwgUFNBX0FMR19DVFIsIFBTQV9BTEdfQ1RSLCBQU0FfQUxHX0NUUiwKKyBCWVRFU19UT19CSVRTKEFFU18xNkJfS0VZX1NJWkUpLCBBRVNfMTZCX0tFWV9TSVpFLCBQU0FfU1VDQ0VTUworfSwKKyNlbmRpZgorI2VuZGlmCit9OwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDQvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0X2MwNDQvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZWJjNWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RfYzA0NC90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfYzA0NC5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0NSWVBUT19CQVNFLCA0NCkKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIGNyeXB0byBrZXkgbWFuYWdlbWVudCBBUElzXG4iCitURVNUX1BVQkxJU0goVEVTVF9OVU0sIHRlc3RfZW50cnkpOwordmFsX2FwaV90ICp2YWwgPSBOVUxMOworcHNhX2FwaV90ICpwc2EgPSBOVUxMOworCit2b2lkIHRlc3RfZW50cnkodmFsX2FwaV90ICp2YWxfYXBpLCBwc2FfYXBpX3QgKnBzYV9hcGkpCit7CisgICAgaW50MzJfdCAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgIHZhbCA9IHZhbF9hcGk7CisgICAgcHNhID0gcHNhX2FwaTsKKworICAgIC8qIHRlc3QgaW5pdCAqLworICAgIHZhbC0+dGVzdF9pbml0KFRFU1RfTlVNLCBURVNUX0RFU0MsIFRFU1RfRklFTEQoVEVTVF9JU09MQVRJT05fTDEsIFdEX0hJR0hfVElNRU9VVCkpOworICAgIGlmICghSVNfVEVTVF9TVEFSVCh2YWwtPmdldF9zdGF0dXMoKSkpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBFeGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluIHRlc3RbbnVtXV9jcnlwdG9fbGlzdCBmcm9tIE5vbi1zZWN1cmUgc2lkZSovCisgICAgc3RhdHVzID0gdmFsLT5leGVjdXRlX25vbl9zZWN1cmVfdGVzdHMoVEVTVF9OVU0sIHRlc3RfYzA0NF9jcnlwdG9fbGlzdCwgRkFMU0UpOworCisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT5jcnlwdG9fZnVuY3Rpb24oVkFMX0NSWVBUT19GUkVFKTsKKyAgICB2YWwtPnRlc3RfZXhpdCgpOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2NyeXB0by90ZXN0c3VpdGUuZGIgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RzdWl0ZS5kYgppbmRleCA2NjE3MGVlLi5lYmU2ODM5IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RzdWl0ZS5kYgorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvY3J5cHRvL3Rlc3RzdWl0ZS5kYgpAQCAtNjMsNSArNjMsNiBAQAogdGVzdF9jMDQxCiB0ZXN0X2MwNDIKIHRlc3RfYzA0MwordGVzdF9jMDQ0CiAKIChFTkQpCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwMi90ZXN0X2l0c19kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwMi90ZXN0X2l0c19kYXRhLmgKaW5kZXggMzI1ZTg2Mi4uMzAzYjI1ZiAxMDA3NTUKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDIvdGVzdF9pdHNfZGF0YS5oCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDAyL3Rlc3RfaXRzX2RhdGEuaApAQCAtMTE5LDYgKzExOSw5IEBACiAgVkFMX0lUU19TRVQsIFBTQV9JVFNfRVJST1JfV1JJVEVfT05DRSAgLyogU2V0dGluZyBmbGFnIHRvIHplcm8gZm9yIFVJRCBzaG91bGQgZmFpbCAqLwogfSwKIHsKKyBWQUxfSVRTX1JFTU9WRSwgUFNBX0lUU19FUlJPUl9XUklURV9PTkNFIC8qIFN0b3JhZ2Ugc2hvdWxkIG5vdCBiZSByZW1vdmVkICovCit9LAorewogIFZBTF9JVFNfR0VUX0lORk8sIFBTQV9JVFNfU1VDQ0VTUyAgLyogQ2hlY2sgdGhhdCB0aGUgV1JJVEVfT05DRSBmbGFnIGlzIHByZXNlcnZlZCAqLwogfSwKIHsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA0L3Rlc3RfczAwNC5jIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDQvdGVzdF9zMDA0LmMKaW5kZXggMDBmNDI0NS4uOWRiMjRhNyAxMDA3NTUKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDQvdGVzdF9zMDA0LmMKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDQvdGVzdF9zMDA0LmMKQEAgLTQyLDExICs0MiwxMSBAQAogICAgIHVpbnQzMl90IHN0YXR1cyxqOwogCiAgICAgLyogU2V0IGRhdGEgZm9yIFVJRCAqLwotICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDA0X2RhdGFbMV0uYXBpLCB1aWQgKyAxLCBURVNUX0JVRkZfU0laRSwgd3JpdGVfYnVmZiwwKTsKKyAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwNF9kYXRhWzFdLmFwaSwgdWlkLCBURVNUX0JVRkZfU0laRSwgd3JpdGVfYnVmZiwwKTsKICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDRfZGF0YVsxXS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOwogCiAgICAgLyogQ2FsbCBnZXQgZnVuY3Rpb24gYW5kIGNoZWNrIHRoZSBkYXRhIGNvbnNpc3RlbmN5ICovCi0gICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDRfZGF0YVsyXS5hcGksIHVpZCArIDEsIDAsIFRFU1RfQlVGRl9TSVpFLCByZWFkX2J1ZmYpOworICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDA0X2RhdGFbMl0uYXBpLCB1aWQsIDAsIFRFU1RfQlVGRl9TSVpFLCByZWFkX2J1ZmYpOwogICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAwNF9kYXRhWzJdLnN0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSgyKSk7CiAgICAgVEVTVF9BU1NFUlRfTUVNQ01QKHJlYWRfYnVmZiwgd3JpdGVfYnVmZiwgVEVTVF9CVUZGX1NJWkUsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMykpOwogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwNi90ZXN0X3MwMDYuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA2L3Rlc3RfczAwNi5jCmluZGV4IDFjNzA2NmIuLmQxZDgxYmMgMTAwNzU1Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA2L3Rlc3RfczAwNi5jCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA2L3Rlc3RfczAwNi5jCkBAIC03Myw3ICs3Myw3IEBACiAgICAgICAgewogICAgICAgICAgIHRlc3Rfc3RhdHVzID0gcHNhX3NzdF9yZW1vdmVfYXBpKHVpZCwgVEVTVF9CVUZGX1NJWkUsIHdyaXRlX2J1ZmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxhZyAmICh+UFNBX1NTVF9GTEFHX1dSSVRFX09OQ0UpKSk7Ci0JICAgICAgaWYgKHRlc3Rfc3RhdHVzICE9IFZBTF9TVEFUVVNfU1VDQ0VTUykKKyAgICAgICAgICBpZiAodGVzdF9zdGF0dXMgIT0gVkFMX1NUQVRVU19TVUNDRVNTKQogICAgICAgICAgICAgIHJldHVybiB0ZXN0X3N0YXR1czsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoc3RhdHVzID09IHMwMDZfZGF0YVswXS5zdGF0dXMpCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwOS90ZXN0X2l0c19kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwOS90ZXN0X2l0c19kYXRhLmgKaW5kZXggYTRmMGI3ZS4uODBlN2ZiMSAxMDA3NTUKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDkvdGVzdF9pdHNfZGF0YS5oCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA5L3Rlc3RfaXRzX2RhdGEuaApAQCAtMzMsMjUgKzMzLDMxIEBACiAgMCwgMCAvKiBUaGlzIGlzIGR1bW15IGZvciBpbmRleDAgKi8KIH0sCiB7Ci0gVkFMX0lUU19TRVQsIFBTQV9JVFNfRVJST1JfSU5WQUxJRF9BUkdVTUVOVFMgLyogQ2FsbCBzZXQgQVBJIHdpdGggMCB3cml0ZSBidWZmZXIgKi8KKyBWQUxfSVRTX1NFVCwgUFNBX0lUU19TVUNDRVNTIC8qIENhbGwgc2V0IEFQSSB3aXRoIE5VTEwgd3JpdGUgYnVmZmVyIGFuZCAwIGxlbmd0aCAqLwogfSwKIHsKLSBWQUxfSVRTX0dFVF9JTkZPLCBQU0FfSVRTX0VSUk9SX1VJRF9OT1RfRk9VTkQgLyogQ2FsbCB0byBnZXRfaW5mbyBBUEkgc2hvdWxkIGZhaWwgKi8KKyBWQUxfSVRTX0dFVF9JTkZPLCBQU0FfSVRTX1NVQ0NFU1MgLyogVmVyaWZ5IFVJRCBpcyBjcmVhdGVkICovCiB9LAogewotIFZBTF9JVFNfU0VULCBQU0FfSVRTX1NVQ0NFU1MgLyogQ3JlYXRlIHN0b3JhZ2Ugb2YgemVybyBzaXplICovCisgVkFMX0lUU19HRVQsIFBTQV9JVFNfU1VDQ0VTUyAvKiBDYWxsIGdldCBBUEkgd2l0aCBOVUxMIHdyaXRlIGJ1ZmZlciBhbmQgMCBsZW5ndGggKi8KIH0sCiB7Ci0gVkFMX0lUU19TRVQsIFBTQV9JVFNfRVJST1JfSU5WQUxJRF9BUkdVTUVOVFMgLyogVHJ5IHRvIHNldCAwIGJ1ZmZlciBmb3IgcHJldmlvdXMgY3JlYXRlZCBzdG9yYWdlICovCisgVkFMX0lUU19SRU1PVkUsIFBTQV9JVFNfU1VDQ0VTUyAvKiBSZW1vdmUgdGhlIHN0b3JhZ2UgZW50aXR5ICovCit9LAoreworIFZBTF9JVFNfR0VUX0lORk8sIFBTQV9JVFNfRVJST1JfVUlEX05PVF9GT1VORCAvKiBWZXJpZnkgVUlEIGlzIHJlbW92ZWQgKi8KK30sCit7CisgVkFMX0lUU19TRVQsIFBTQV9JVFNfU1VDQ0VTUyAvKiBDcmVhdGUgc3RvcmFnZSBvZiB6ZXJvIHNpemUgYW5kIHZhbGlkIHdyaXRlIGJ1ZmZlciAqLwogfSwKIHsKICBWQUxfSVRTX0dFVF9JTkZPLCBQU0FfSVRTX1NVQ0NFU1MgLyogQ2FsbCBnZXRfaW5mbyBBUEkgdG8gY2hlY2sgZGF0YSBzaXplICovCiB9LAogewotIDAsIDAgLyogVGhpcyBpcyBkdW1teSBmb3IgaW5kZXg2ICovCisgMCwgMCAvKiBUaGlzIGlzIGR1bW15IGZvciBpbmRleDggKi8KIH0sCiB7Ci0gVkFMX0lUU19HRVQsIFBTQV9JVFNfRVJST1JfSU5WQUxJRF9BUkdVTUVOVFMgLyogQ2FsbCBnZXQgQVBJIHdpdGggMCByZWFkIGJ1ZmZlciAqLworIFZBTF9JVFNfR0VULCBQU0FfSVRTX1NVQ0NFU1MgLyogQ2FsbCBnZXQgQVBJIHdpdGggMCBsZW5ndGggYW5kIE5VTEwgcmVhZCBidWZmZXIgKi8KIH0sCiB7CiAgVkFMX0lUU19TRVQsIFBTQV9JVFNfU1VDQ0VTUyAvKiBJbmNyZWFzZSB0aGUgYXNzZXQgc2l6ZSAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDkvdGVzdF9wc19kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwOS90ZXN0X3BzX2RhdGEuaAppbmRleCA5ODI1NjFjLi4xMjliY2EwIDEwMDc1NQotLS0gYS9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwOS90ZXN0X3BzX2RhdGEuaAorKysgYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwOS90ZXN0X3BzX2RhdGEuaApAQCAtMzMsMjUgKzMzLDMxIEBACiAgMCwgMCAvKiBUaGlzIGlzIGR1bW15IGZvciBpbmRleDAgKi8KIH0sCiB7Ci0gVkFMX1BTX1NFVCwgUFNBX1BTX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgLyogQ2FsbCBzZXQgQVBJIHdpdGggMCB3cml0ZSBidWZmZXIgKi8KKyBWQUxfUFNfU0VULCBQU0FfUFNfU1VDQ0VTUyAvKiBDYWxsIHNldCBBUEkgd2l0aCBOVUxMIHdyaXRlIGJ1ZmZlciBhbmQgMCBsZW5ndGggKi8KIH0sCiB7Ci0gVkFMX1BTX0dFVF9JTkZPLCBQU0FfUFNfRVJST1JfVUlEX05PVF9GT1VORCAvKiBDYWxsIHRvIGdldF9pbmZvIEFQSSBzaG91bGQgZmFpbCAqLworIFZBTF9QU19HRVRfSU5GTywgUFNBX1BTX1NVQ0NFU1MgLyogVmVyaWZ5IFVJRCBpcyBjcmVhdGVkICovCiB9LAogewotIFZBTF9QU19TRVQsIFBTQV9QU19TVUNDRVNTIC8qIENyZWF0ZSBzdG9yYWdlIG9mIHplcm8gc2l6ZSAqLworIFZBTF9QU19HRVQsIFBTQV9QU19TVUNDRVNTIC8qIENhbGwgZ2V0IEFQSSB3aXRoIE5VTEwgd3JpdGUgYnVmZmVyIGFuZCAwIGxlbmd0aCAqLwogfSwKIHsKLSBWQUxfUFNfU0VULCBQU0FfUFNfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCAvKiBUcnkgdG8gc2V0IDAgYnVmZmVyIGZvciBwcmV2aW91cyBjcmVhdGVkIHN0b3JhZ2UgKi8KKyBWQUxfUFNfUkVNT1ZFLCBQU0FfUFNfU1VDQ0VTUyAvKiBSZW1vdmUgdGhlIHN0b3JhZ2UgZW50aXR5ICovCit9LAoreworIFZBTF9QU19HRVRfSU5GTywgUFNBX1BTX0VSUk9SX1VJRF9OT1RfRk9VTkQgLyogVmVyaWZ5IFVJRCBpcyByZW1vdmVkICovCit9LAoreworIFZBTF9QU19TRVQsIFBTQV9QU19TVUNDRVNTIC8qIENyZWF0ZSBzdG9yYWdlIG9mIHplcm8gc2l6ZSBhbmQgdmFsaWQgd3JpdGUgYnVmZmVyICovCiB9LAogewogIFZBTF9QU19HRVRfSU5GTywgUFNBX1BTX1NVQ0NFU1MgLyogQ2FsbCBnZXRfaW5mbyBBUEkgdG8gY2hlY2sgZGF0YSBzaXplICovCiB9LAogewotIDAsIDAgLyogVGhpcyBpcyBkdW1teSBmb3IgaW5kZXg2ICovCisgMCwgMCAvKiBUaGlzIGlzIGR1bW15IGZvciBpbmRleDggKi8KIH0sCiB7Ci0gVkFMX1BTX0dFVCwgUFNBX1BTX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgLyogQ2FsbCBnZXQgQVBJIHdpdGggMCByZWFkIGJ1ZmZlciAqLworIFZBTF9QU19HRVQsIFBTQV9QU19TVUNDRVNTIC8qIENhbGwgZ2V0IEFQSSB3aXRoIDAgbGVuZ3RoIGFuZCBOVUxMIHJlYWQgYnVmZmVyICovCiB9LAogewogIFZBTF9QU19TRVQsIFBTQV9QU19TVUNDRVNTIC8qIEluY3JlYXNlIHRoZSBhc3NldCBzaXplICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAwOS90ZXN0X3MwMDkuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA5L3Rlc3RfczAwOS5jCmluZGV4IGExYjU0MjQuLjQ1NjdjNjYgMTAwNzU1Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA5L3Rlc3RfczAwOS5jCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA5L3Rlc3RfczAwOS5jCkBAIC0yOCw3ICsyOCw3IEBACiAKIGNsaWVudF90ZXN0X3QgdGVzdF9zMDA5X3NzdF9saXN0W10gPSB7CiAgICAgTlVMTCwKLSAgICBwc2Ffc3N0X2ludmFsaWRfYXJndW1lbnRzX2NoZWNrLAorICAgIHBzYV9zc3RfemVyb19sZW5ndGhfY2hlY2ssCiAgICAgTlVMTCwKIH07CiAKQEAgLTM2LDcgKzM2LDcgQEAKIHN0YXRpYyB1aW50OF90IHdyaXRlX2J1ZmZbVEVTVF9CVUZGX1NJWkVdID0gezB4OTksIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MjMsIDB4RjYsIDB4MDcsIDB4MDgsIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBELCAweDcwLCAweEExLCAweEZGLCAweEZGLCAweDE0LCAweDczLCAweDQ2LCAweDk3LCAweEU4LCAweEREfTsKIAotaW50MzJfdCBwc2Ffc3N0X2ludmFsaWRfYXJndW1lbnRzX2NoZWNrKHNlY3VyaXR5X3QgY2FsbGVyKQoraW50MzJfdCBwc2Ffc3N0X3plcm9fbGVuZ3RoX2NoZWNrKHNlY3VyaXR5X3QgY2FsbGVyKQogewogICAgIHVpbnQzMl90IHN0YXR1czsKIApAQCAtNDUsMzggKzQ1LDQ4IEBACiAgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDlfZGF0YVsxXS5hcGksIHVpZCwgMCwgTlVMTCwgMCk7CiAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDA5X2RhdGFbMV0uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDEpKTsKIAotICAgIC8qIENhbGwgdGhlIGdldF9pbmZvIGZ1bmN0aW9uIGFuZCBtYXRjaCB0aGUgYXR0cmlidXRlcyAqLworICAgIC8qIENhbGwgdGhlIGdldF9pbmZvIGZ1bmN0aW9uIHRvIHZlcmlmeSBVSUQgY3JlYXRlZCAqLwogICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDA5X2RhdGFbMl0uYXBpLCB1aWQsICZpbmZvKTsKICAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDlfZGF0YVsyXS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMikpOwogCi0gICAgLyogU2V0IGRhdGEgZm9yIFVJRCB3aXRoIGxlbmd0aCAwIGFuZCB2YWxpZCB3cml0ZSBidWZmZXIgKi8KLSAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMl0gQ3JlYXRlIFVJRCB3aXRoIHplcm8gZGF0YSBsZW5ndGhcbiIsIDApOwotICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDA5X2RhdGFbM10uYXBpLCB1aWQsIDAsIHdyaXRlX2J1ZmYsIDApOworICAgIC8qIENhbGwgZ2V0IEFQSSB3aXRoIE5VTEwgcmVhZCBidWZmZXIgKi8KKyAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMl0gQ2FsbCBnZXQgQVBJIHdpdGggTlVMTCByZWFkIGJ1ZmZlciBhbmQgZGF0YSBsZW5ndGggMFxuIiwgMCk7CisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDlfZGF0YVszXS5hcGksIHVpZCwgMCwgMCwgTlVMTCk7CiAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDA5X2RhdGFbM10uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDMpKTsKIAotICAgIC8qIFNldCBkYXRhIGZvciBVSUQgd2l0aCBsZW5ndGggMCBhbmQgTlVMTCBwb2ludGVyICovCi0gICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDNdIFRyeSB0byBzZXQgTlVMTCBidWZmZXIgZm9yIGV4aXN0aW5nIFVJRFxuIiwgMCk7Ci0gICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDlfZGF0YVs0XS5hcGksIHVpZCwgMCwgTlVMTCwgMCk7CisgICAgLyogUmVtb3ZlIHRoZSBVSUQgKi8KKyAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgM10gUmVtb3ZlIHRoZSBVSURcbiIsIDApOworICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDA5X2RhdGFbNF0uYXBpLCB1aWQpOwogICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAwOV9kYXRhWzRdLnN0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSg0KSk7CiAKLSAgICAvKiBDYWxsIHRoZSBnZXRfaW5mbyBmdW5jdGlvbiBhbmQgbWF0Y2ggdGhlIGF0dHJpYnV0ZXMgKi8KKyAgICAvKiBDYWxsIHRoZSBnZXRfaW5mbyBmdW5jdGlvbiB0byB2ZXJpZnkgVUlEIGlzIHJlbW92ZWQgKi8KKyAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgNF0gQ2FsbCBnZXRfaW5mbyBBUEkgdG8gdmVyaWZ5IFVJRCByZW1vdmVkXG4iLCAwKTsKICAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwOV9kYXRhWzVdLmFwaSwgdWlkLCAmaW5mbyk7CiAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDA5X2RhdGFbNV0uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDUpKTsKLSAgICBURVNUX0FTU0VSVF9FUVVBTChpbmZvLnNpemUsIDAsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNikpOworCisgICAgLyogQ3JlYXRlIFVJRCB3aXRoIGxlbmd0aCAwIGFuZCB2YWxpZCB3cml0ZSBidWZmZXIgKi8KKyAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgNV0gQ3JlYXRlIFVJRCB3aXRoIHplcm8gZGF0YV9sZW4gYW5kIHZhbGlkIHdyaXRlIGJ1ZmZlclxuIiwgMCk7CisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDlfZGF0YVs2XS5hcGksIHVpZCwgMCwgd3JpdGVfYnVmZiwgMCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDA5X2RhdGFbNl0uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDYpKTsKKworICAgIC8qIENhbGwgdGhlIGdldF9pbmZvIGZ1bmN0aW9uIGFuZCBtYXRjaCB0aGUgYXR0cmlidXRlcyAqLworICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDA5X2RhdGFbN10uYXBpLCB1aWQsICZpbmZvKTsKKyAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDlfZGF0YVs3XS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oNykpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKGluZm8uc2l6ZSwgMCwgVEVTVF9DSEVDS1BPSU5UX05VTSg4KSk7CiAKICAgICAvKiBDYWxsIGdldCBBUEkgd2l0aCBOVUxMIHJlYWQgYnVmZmVyIGFuZCB2YWxpZCBVSUQgKi8KLSAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgNF0gQ2FsbCBnZXQgQVBJIHdpdGggTlVMTCByZWFkIGJ1ZmZlciBhbmQgZGF0YSBsZW5ndGggMFxuIiwgMCk7Ci0gICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDlfZGF0YVs3XS5hcGksIHVpZCwgMCwgMCwgTlVMTCk7Ci0gICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDA5X2RhdGFbN10uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDcpKTsKKyAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgOF0gQ2FsbCBnZXQgQVBJIHdpdGggTlVMTCByZWFkIGJ1ZmZlciBhbmQgZGF0YSBsZW5ndGggMFxuIiwgMCk7CisgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDlfZGF0YVs5XS5hcGksIHVpZCwgMCwgMCwgTlVMTCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDA5X2RhdGFbOV0uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKIAogICAgIC8qIENoYW5nZSB0aGUgbGVuZ3RoIHRvIHRlc3RfYnVmZl9zaXplICovCi0gICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDVdIEluY3JlYXNlIHRoZSBsZW5ndGhcbiIsIDApOwotICAgIHN0YXR1cyA9IFNTVF9GVU5DVElPTihzMDA5X2RhdGFbOF0uYXBpLCB1aWQsIFRFU1RfQlVGRl9TSVpFLCB3cml0ZV9idWZmLCAwKTsKLSAgICBURVNUX0FTU0VSVF9FUVVBTChzdGF0dXMsIHMwMDlfZGF0YVs4XS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oOCkpOworICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayA5XSBJbmNyZWFzZSB0aGUgbGVuZ3RoXG4iLCAwKTsKKyAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwOV9kYXRhWzEwXS5hcGksIHVpZCwgVEVTVF9CVUZGX1NJWkUsIHdyaXRlX2J1ZmYsIDApOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAwOV9kYXRhWzEwXS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMTApKTsKIAogICAgIC8qIFJlbW92ZSB0aGUgVUlEICovCi0gICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMDlfZGF0YVs5XS5hcGksIHVpZCk7Ci0gICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDA5X2RhdGFbOV0uc3RhdHVzLCBURVNUX0NIRUNLUE9JTlRfTlVNKDkpKTsKKyAgICBzdGF0dXMgPSBTU1RfRlVOQ1RJT04oczAwOV9kYXRhWzExXS5hcGksIHVpZCk7CisgICAgVEVTVF9BU1NFUlRfRVFVQUwoc3RhdHVzLCBzMDA5X2RhdGFbMTFdLnN0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSgxMSkpOwogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDA5L3Rlc3RfczAwOS5oIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDkvdGVzdF9zMDA5LmgKaW5kZXggZGIwODRjZi4uMTFiMzJkMSAxMDA3NTUKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDkvdGVzdF9zMDA5LmgKKysrIGIvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMDkvdGVzdF9zMDA5LmgKQEAgLTMxLDYgKzMxLDYgQEAKIGV4dGVybiBwc2FfYXBpX3QgKnBzYTsKIGV4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfczAwOV9zc3RfbGlzdFtdOwogCi1pbnQzMl90IHBzYV9zc3RfaW52YWxpZF9hcmd1bWVudHNfY2hlY2soc2VjdXJpdHlfdCBjYWxsZXIpOworaW50MzJfdCBwc2Ffc3N0X3plcm9fbGVuZ3RoX2NoZWNrKHNlY3VyaXR5X3QgY2FsbGVyKTsKIAogI2VuZGlmIC8qIF9URVNUX1MwMDlfQ0xJRU5UX1RFU1RTX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAxMC90ZXN0X2l0c19kYXRhLmggYi9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAxMC90ZXN0X2l0c19kYXRhLmgKaW5kZXggN2IxYjZkMy4uMWE4MTFiMSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2Rldl9hcGlzL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS90ZXN0X3MwMTAvdGVzdF9pdHNfZGF0YS5oCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDEwL3Rlc3RfaXRzX2RhdGEuaApAQCAtMjksNyArMjksNyBAQAogCiBzdGF0aWMgY29uc3QgdGVzdF9kYXRhIHMwMTBfZGF0YVtdID0gewogewotICBWQUxfSVRTX1NFVCwgUFNBX0lUU19TVUNDRVNTIC8qIENyZWF0ZSB3aXRoIFVJRCB2YWx1ZSB6ZXJvIHNob3VsZCBmYWlsICovCisgIFZBTF9JVFNfU0VULCBQU0FfSVRTX0VSUk9SX0lOVkFMSURfQVJHVU1FTlRTIC8qIENyZWF0ZSB3aXRoIFVJRCB2YWx1ZSB6ZXJvIHNob3VsZCBmYWlsICovCiB9LAogfTsKICNlbmRpZiAvKiBfVEVTVF9TMDEwX0lUU19EQVRBX1RFU1RTX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAxMC90ZXN0X3BzX2RhdGEuaCBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDEwL3Rlc3RfcHNfZGF0YS5oCmluZGV4IGU4OGVkOWIuLmZiMDZkZWIgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDEwL3Rlc3RfcHNfZGF0YS5oCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDEwL3Rlc3RfcHNfZGF0YS5oCkBAIC0yOSw3ICsyOSw3IEBACiAKIHN0YXRpYyBjb25zdCB0ZXN0X2RhdGEgczAxMF9kYXRhW10gPSB7CiB7Ci0gVkFMX1BTX1NFVCwgUFNBX1BTX1NVQ0NFU1MgLyogQ3JlYXRlIHdpdGggVUlEIHZhbHVlIHplcm8gc2hvdWxkIGZhaWwgKi8KKyBWQUxfUFNfU0VULCBQU0FfUFNfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCAvKiBDcmVhdGUgd2l0aCBVSUQgdmFsdWUgemVybyBzaG91bGQgZmFpbCAqLwogfSwKIH07CiAjZW5kaWYgLyogX1RFU1RfUzAxMF9QU19EQVRBX1RFU1RTX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZGV2X2FwaXMvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3Rlc3RfczAxMC90ZXN0X3MwMTAuYyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDEwL3Rlc3RfczAxMC5jCmluZGV4IGM3NGJhZDMuLjhlNTU2Y2UgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDEwL3Rlc3RfczAxMC5jCisrKyBiL2FwaS10ZXN0cy9kZXZfYXBpcy9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvdGVzdF9zMDEwL3Rlc3RfczAxMC5jCkBAIC00Miw3ICs0Miw3IEBACiAgICAgLyogU2V0IHdpdGggVUlEIHZhbHVlIHplcm8gc2hvdWxkIGZhaWwgKi8KICAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMV0gQ3JlYXRpbmcgc3RvcmFnZSB3aXRoIFVJRCAwIHNob3VsZCBmYWlsXG4iLCAwICk7CiAgICAgc3RhdHVzID0gU1NUX0ZVTkNUSU9OKHMwMTBfZGF0YVswXS5hcGksIHVpZCwgVEVTVF9CVUZGX1NJWkUsIHdyaXRlX2J1ZmYsIDApOwotICAgIFRFU1RfQVNTRVJUX05PVF9FUVVBTChzdGF0dXMsIHMwMTBfZGF0YVswXS5zdGF0dXMsIFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMSkpOworICAgIFRFU1RfQVNTRVJUX0VRVUFMKHN0YXR1cywgczAxMF9kYXRhWzBdLnN0YXR1cywgVEVTVF9DSEVDS1BPSU5UX05VTSgxKSk7CiAKICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2RvY3MvQXJtX1BTQV9BUElzX0FyY2hfVGVzdF9WYWxpZGF0aW9uX01ldGhvZG9sb2d5LnBkZiBiL2FwaS10ZXN0cy9kb2NzL0FybV9QU0FfQVBJc19BcmNoX1Rlc3RfVmFsaWRhdGlvbl9NZXRob2RvbG9neS5wZGYKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAxZWM1Yjc5Li5iMjJhNzI0Ci0tLSBhL2FwaS10ZXN0cy9kb2NzL0FybV9QU0FfQVBJc19BcmNoX1Rlc3RfVmFsaWRhdGlvbl9NZXRob2RvbG9neS5wZGYKKysrIGIvYXBpLXRlc3RzL2RvY3MvQXJtX1BTQV9BUElzX0FyY2hfVGVzdF9WYWxpZGF0aW9uX01ldGhvZG9sb2d5LnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZG9jcy9wb3J0aW5nX2d1aWRlX2Rldl9hcGlzLm1kIGIvYXBpLXRlc3RzL2RvY3MvcG9ydGluZ19ndWlkZV9kZXZfYXBpcy5tZAppbmRleCA1NWU1MzZmLi44MzQ5MTIzIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZG9jcy9wb3J0aW5nX2d1aWRlX2Rldl9hcGlzLm1kCisrKyBiL2FwaS10ZXN0cy9kb2NzL3BvcnRpbmdfZ3VpZGVfZGV2X2FwaXMubWQKQEAgLTEsMjEgKzEsMTkgQEAKIAotIyBQb3J0aW5nIEd1aWRlIC0gRGV2ZWxvcGVyIEFQSXMgQXJjaGl0ZWN0dXJlIFRlc3QgU3VpdGUKKyMgUG9ydGluZyBHdWlkZTogRGV2ZWxvcGVyIEFQSXMgQXJjaGl0ZWN0dXJlIFRlc3QgU3VpdGUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICMjIEludHJvZHVjdGlvbgotVGhlIEFyY2hpdGVjdHVyZSB0ZXN0IHN1aXRlIGNvbnRhaW5zIGEgcGxhdGZvcm0gYWJzdHJhY3Rpb24gbGF5ZXIgKFBBTCkgd2hpY2ggYWJzdHJhY3RzIHBsYXRmb3JtIHNwZWNpZmljIGluZm9ybWF0aW9uIGZyb20gdGhlIHRlc3RzLgotIC0gVGhlIFBBTCBsYXllciBpbnRlcmZhY2UgZnVuY3Rpb25zIG5lZWQgdG8gYmUgaW1wbGVtZW50ZWQvcG9ydGVkIHRvIHRoZSB0YXJnZXQgcGxhdGZvcm0uCi0gLSBUaGUgdGFyZ2V0IGNvbmZpZyBmaWxlIG11c3QgYmUgY3JlYXRlZC91cGRhdGVkIHRvIG1hdGNoIHRoZSBkZXRhaWxzIG9mIHRoZSB0YXJnZXQgcGxhdGZvcm0uCitUaGUgYXJjaGl0ZWN0dXJlIHRlc3Qgc3VpdGUgY29udGFpbnMgdGhlICpQbGF0Zm9ybSBBYnN0cmFjdGlvbiBMYXllciogKFBBTCkgd2hpY2ggYWJzdHJhY3RzIHBsYXRmb3JtLXNwZWNpZmljIGluZm9ybWF0aW9uIGZyb20gdGhlIHRlc3RzLiBZb3UgbXVzdCBpbXBsZW1lbnQgYW5kIHBvcnQgdGhlIFBBTCBpbnRlcmZhY2UgZnVuY3Rpb25zIHRvIHlvdXIgdGFyZ2V0IHBsYXRmb3JtLiBDcmVhdGUgYW5kIHVwZGF0ZSB0aGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gZmlsZSB0byBtYXRjaCB0aGUgZGV0YWlscyBvZiB0aGlzIHRhcmdldCBwbGF0Zm9ybS4KIAotVGhpcyBkb2N1bWVudCBwcm92aWRlcyBkZXRhaWxzIG9uIHRoZSBwb3J0aW5nIHN0ZXBzIGFuZCB0aGUgUEFMIEFQSXMuCitUaGlzIGRvY3VtZW50IHByb3ZpZGVzIHRoZSBwb3J0aW5nIHN0ZXBzIGFuZCB0aGUgbGlzdCBvZiBQQUwgQVBJcy4KIAogIyMgUG9ydGluZyBzdGVwcwogCiAjIyMgVGFyZ2V0IGNvbmZpZ3VyYXRpb24KIAotWW91IG11c3QgcG9wdWxhdGUgeW91ciBzeXN0ZW0gY29uZmlndXJhdGlvbiBhbmQgcHJvdmlkZSBpdCBhcyBhbiBpbnB1dCB0byB0ZXN0IHN1aXRlLiBUaGlzIGlzIGNhcHR1cmVkIGluIGEgc2luZ2xlIHN0YXRpYyBpbnB1dCBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCBpcyBuYW1lZCBhcyB0YXJnZXQuY2ZnLiBUaGlzIGZpbGUgaXMgYXZhaWxhYmxlIGF0IGFwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzLzxwbGF0Zm9ybV9uYW1lPi8uIDxiciAvPgorWW91IG11c3QgcG9wdWxhdGUgeW91ciBzeXN0ZW0gY29uZmlndXJhdGlvbiBhbmQgcHJvdmlkZSBpdCBhcyBhbiBpbnB1dCB0byB0aGUgdGVzdCBzdWl0ZS4gVGhlIHN5c3RlbSBjb25maWd1cmF0aW9uIGlzIGNhcHR1cmVkIGluIGEgc2luZ2xlIHN0YXRpYyBpbnB1dCBjb25maWd1cmF0aW9uIGZpbGUgY2FsbGVkICoqdGFyZ2V0LmNmZyoqLCBhdmFpbGFibGUgYXQgKiphcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy88cGxhdGZvcm1fbmFtZT4vKiouIDxiciAvPgogCi1BbiBleGFtcGxlIG9mIHRoZSBpbnB1dCBjb25maWd1cmF0aW9uIGZpbGUgaXMgYXMgc2hvd24uCitBbiBleGFtcGxlIGlucHV0IGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBhcyBzaG93bi4KIAogICAgIC8vIFVBUlQgZGV2aWNlIGluZm8KICAgICB1YXJ0Lm51bT0xOwpAQCAtMzEsNDIgKzI5LDQyIEBACiAgICAgd2F0Y2hkb2cuMC5pbnRyX2lkID0gMHhGRjsKICAgICB3YXRjaGRvZy4wLnBlcm1pc3Npb24gPSBUWVBFX1JFQURfV1JJVEU7CiAKLSAgTW9yZSBkZXRhaWxzIG9uIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGlucHV0IGNhbiBiZSBvYnRhaW5lZCBmcm9tIHZhbC9jb21tb24vdmFsX3RhcmdldC5oLgorICBGb3IgZGV0YWlscyBvbiB0aGUgc3RydWN0dXJlIG9mIHRoZSBpbnB1dCwgcmVmZXIgdG8gKip2YWwvY29tbW9uL3ZhbF90YXJnZXQuaCoqLgogCiAjIyMgQWRkaW5nIGEgbmV3IHRhcmdldAogCi0gIC0gQ3JlYXRlIGEgbmV3IGRpcmVjdG9yeSBpbiBwbGF0Zm9ybS90YXJnZXRzLzxwbGF0Zm9ybV9uYW1lPi4gRm9yIHJlZmVyZW5jZSwgc2VlIHRoZSBleGlzdGluZyBwbGF0Zm9ybSB0Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200IGRpcmVjdG9yeS4KLSAgLSBjcCAtcmYgcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200LyBwbGF0Zm9ybS90YXJnZXRzLzxwbGF0Zm9ybV9uYW1lPi8KLSAgLSBVcGRhdGUgcGxhdGZvcm0vdGFyZ2V0cy88cGxhdGZvcm1fbmFtZT4vdGFyZ2V0LmNmZyB3aXRoIHlvdXIgcGxhdGZvcm0gZGV0YWlsLiBSZWZlciB2YWwvY29tbW9uL3ZhbF90YXJnZXQuaCBmb3Igc3RydWN0dXJlIGRldGFpbHMuCi0gIC0gVXBkYXRlIHBsYXRmb3JtL3RhcmdldHMvPHBsYXRmb3JtX25hbWU+L01ha2VmaWxlIGFwcHJvcHJpYXRlbHkgdG8gc2VsZWN0IGNvcnJlY3QgaW5zdGFuY2VzIG9mIFBBTCBmaWxlcyBmb3IgY29tcGlsYXRpb24uIFRvIGNvbXBpbGUgZGV2X2FwaXMgc3VpdGVzLCB5b3UgbXVzdCBzZXQgUFNBX0lQQ19JTVBMRU1FTlRFRCB0byAwLiBUaGlzIHNlbGVjdHMgdGhlIG5vbi1zZWN1cmUgUEFMIGluc3RhbmNlcyBmb3IgdGhlIGRyaXZlciBzZXJ2aWNlcyBhbmQgZWxpbWluYXRlcyBJUEMgZGVwZW5kZW5jeSBmb3IgZGV2X2FwaXMgdGVzdHMuCi0gIC0gUmVmZXIgIlBBTCBBUEkgbGlzdCIgc2VjdGlvbiB0byB2aWV3IGxpc3Qgb2YgUEFMIEFQSXMgdGhhdCBtdXN0IGJlIHBvcnRlZCBmb3IgeW91ciB0YXJnZXQgcGxhdGZvcm0uIFRoZXNlIEFQSXMgZGVmaW5pdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiBuc3BlLzxzdWl0ZV9uYW1lPi9wYWxfXCpcX2ludGYuYy4gVGhlc2UgQVBJcyBhcmUgd3JpdHRlbiBmb3IgdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNCBwbGF0Zm9ybS4gWW91IGNhbiByZXVzZSB0aGUgY29kZSBpZiBpdCB3b3JrcyBmb3IgeW91ciBwbGF0Zm9ybS4gT3RoZXJ3aXNlIHlvdSBtdXN0IHBvcnQgdGhlbSBmb3IgeW91ciBwbGF0Zm9ybSBzcGVjaWZpYyBwZXJpcGhlcmFscy4KLSAgLSBVcGRhdGUgQ3J5cHRvIGNvbmZpZ3VyYXRpb24gZmlsZSAtIG5zcGUvY3J5cHRvL3BhbF9jcnlwdG9fY29uZmlnLmggdG8gZW5hYmxlL2Rpc2FibGUgY3J5cHRvIGZlYXR1cmVzIHNlbGVjdGl2ZWx5IGZvciBjcnlwdG8gdGVzdCBzdWl0ZQotICAtIFRoZSBwbGF0Zm9ybSBtYWtlIGZpbGUgaXMgaW52b2tlZCBhcyBwYXJ0IG9mIHRlc3Qgc3VpdGUgYnVpbGQgdG9vbCguL3NldHVwLnNoKSBzdGVwIGFuZCBpdCBjcmVhdGVzIDxidWlsZF9kaXI+L0JVSUxEL3BsYXRmb3JtL3BhbF9uc3BlLmEgYXJjaGl2ZS4KKyAgMS4gQ3JlYXRlIGEgbmV3IGRpcmVjdG9yeSBpbiAqKnBsYXRmb3JtL3RhcmdldHMvPHBsYXRmb3JtX25hbWU+KiouIEZvciByZWZlcmVuY2UsIHNlZSB0aGUgZXhpc3RpbmcgcGxhdGZvcm0gKip0Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200KiogZGlyZWN0b3J5LgorICAyLiBFeGVjdXRlIGBjcCAtcmYgcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200LyBwbGF0Zm9ybS90YXJnZXRzLzxwbGF0Zm9ybV9uYW1lPi9gLgorICAzLiBVcGRhdGUgKipwbGF0Zm9ybS90YXJnZXRzLzxwbGF0Zm9ybV9uYW1lPi90YXJnZXQuY2ZnKiogd2l0aCB5b3VyIHBsYXRmb3JtIGRldGFpbHMuIFJlZmVyIHRvICoqdmFsL2NvbW1vbi92YWxfdGFyZ2V0LmgqKiBmb3Igc3RydWN0dXJlIGRldGFpbHMuCisgIDQuIFVwZGF0ZSAqKnBsYXRmb3JtL3RhcmdldHMvPHBsYXRmb3JtX25hbWU+L01ha2VmaWxlKiogYXBwcm9wcmlhdGVseSB0byBzZWxlY3QgdGhlIGNvcnJlY3QgaW5zdGFuY2VzIG9mIFBBTCBmaWxlcyBmb3IgY29tcGlsYXRpb24uIFRvIGNvbXBpbGUgKipkZXZfYXBpcyoqIHN1aXRlcywgeW91IG11c3Qgc2V0ICoqUFNBX0lQQ19JTVBMRU1FTlRFRCoqIHRvIDAuIFRoaXMgc2VsZWN0cyB0aGUgTm9uLXNlY3VyZSBQQUwgaW5zdGFuY2VzIGZvciB0aGUgZHJpdmVyIHNlcnZpY2VzIGFuZCBlbGltaW5hdGVzIElQQyBkZXBlbmRlbmN5IGZvciBkZXZfYXBpcyB0ZXN0cy4KKyAgNS4gUmVmZXIgdG8gdGhlICoqTGlzdCBvZiBQQUwgQVBJcyoqIHNlY3Rpb24gdG8gdmlldyB0aGUgbGlzdCBvZiBQQUwgQVBJcyB0aGF0IG11c3QgYmUgcG9ydGVkIGZvciB5b3VyIHRhcmdldCBwbGF0Zm9ybS4gVGhlc2UgQVBJIGRlZmluaXRpb25zIGFyZSBhdmFpbGFibGUgaW4gKipuc3BlLzxzdWl0ZV9uYW1lPi9wYWxfXCpcX2ludGYuYyoqLiBUaGVzZSBBUElzIGFyZSB3cml0dGVuIGZvciB0Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200IHBsYXRmb3JtLiBZb3UgY2FuIHJldXNlIHRoZSBjb2RlIGlmIGl0IHdvcmtzIGZvciB5b3VyIHBsYXRmb3JtLiBPdGhlcndpc2UsIHlvdSBtdXN0IHBvcnQgdGhlbSBmb3IgeW91ciBwbGF0Zm9ybS1zcGVjaWZpYyBwZXJpcGhlcmFscy4KKyAgNi4gVXBkYXRlIENyeXB0byBjb25maWd1cmF0aW9uIGZpbGUgKipuc3BlL2NyeXB0by9wYWxfY3J5cHRvX2NvbmZpZy5oKiogdG8gZW5hYmxlIG9yIGRpc2FibGUgQ3J5cHRvIGZlYXR1cmVzIHNlbGVjdGl2ZWx5IGZvciB0aGUgQ3J5cHRvIHRlc3Qgc3VpdGUuCiAKICoqTm90ZSoqOgotVGVzdCBzdWl0ZSBuZWVkcyBhY2Nlc3MgdG8gdGhlIGZvbGxvd2luZyBwZXJpcGhlcmFsczo8YnIgXD4KLSAgLSBPbmUgVUFSVCB0byBwcmludCBuc3BlIGFuZCBzcGUgbWVzc2FnZXMKLSAgLSBPbmUgV2F0Y2hkb2cgdGltZXIgdG8gaGVscCByZWNvdmVyeSBmcm9tIGFueSBmYXRhbCBlcnJvciBjb25kaXRpb25zCistIFRoZSBwbGF0Zm9ybSBtYWtlZmlsZSBpcyBpbnZva2VkIGFzIHBhcnQgb2YgdGVzdCBzdWl0ZSBidWlsZCB0b29sICgqKi4vc2V0dXAuc2gqKikgc3RlcCBhbmQgaXQgY3JlYXRlcyAqKjxidWlsZF9kaXI+L0JVSUxEL3BsYXRmb3JtL3BhbF9uc3BlLmEqKiBhcmNoaXZlLgorLSBUaGUgdGVzdCBzdWl0ZSByZXF1aXJlcyBhY2Nlc3MgdGhlIGZvbGxvd2luZyBwZXJpcGhlcmFsczoKKyAgLSBPbmUgVUFSVCB0byBwcmludCBOU1BFIGFuZCBTUEUgbWVzc2FnZXMKKyAgLSBPbmUgV2F0Y2hkb2cgdGltZXIgdG8gaGVscCByZWNvdmVyIGZyb20gYW55IGZhdGFsIGVycm9yIGNvbmRpdGlvbnMKICAgLSBOb24tdm9sYXRpbGUgbWVtb3J5IHN1cHBvcnQgdG8gcHJlc2VydmUgdGVzdCBzdGF0dXMgb3ZlciB3YXRjaGRvZyB0aW1lciByZXNldAogCiAKLSMjIFBBTCBBUEkgbGlzdAotU2luY2UgdGVzdCBzdWl0ZSBpcyBhZ25vc3RpYyB0byB2YXJpb3VzIHN5c3RlbSB0YXJnZXRzLCBiZWZvcmUgYnVpbGRpbmcgdGhlIHRlc3RzLCB5b3UgbXVzdCBwb3J0IGJlbG93IFBBTCBOU1BFIEFQSXMuIFRoZXNlIGZ1bmN0aW9ucyB3aWxsIHJlcXVpcmUgaW1wbGVtZW50YXRpb24gZm9yIHlvdXIgdGFyZ2V0IHBsYXRmb3JtLiA8YnIgLz4KKyMjIExpc3Qgb2YgUEFMIEFQSXMKK1NpbmNlIHRoZSB0ZXN0IHN1aXRlIGlzIGFnbm9zdGljIHRvIHZhcmlvdXMgc3lzdGVtIHRhcmdldHMsIHlvdSBtdXN0IHBvcnQgdGhlIGZvbGxvd2luZyBQQUwgTlNQRSBBUElzIGJlZm9yZSBidWlsZGluZyB0aGUgdGVzdHMuIEltcGxlbWVudCB0aGVzZSBmdW5jdGlvbnMgZm9yIHlvdXIgdGFyZ2V0IHBsYXRmb3JtLiA8YnIgLz4KIAogfCBObyB8IFByb3RvdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8LS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKLXwgMDEgfCBpbnQgcGFsX3NwaV9yZWFkKGFkZHJfdCBhZGRyLCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBsZW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCBwZXJpcGhlcmFscyB1c2luZyBTUEkgY29tbWFuZHMgICAgICAgICAgICAgICAgIHwgYWRkciA6IGFkZHJlc3Mgb2YgdGhlIHBlcmlwaGVyYWw8YnIvPmRhdGEgOiByZWFkIGJ1ZmZlcjxici8+bGVuICA6IGxlbmd0aCBvZiB0aGUgcmVhZCBidWZmZXIgaW4gYnl0ZXM8YnIvPiAgICAgICAgICAgICAgICAgICAgfAotfCAwMiB8IGludCBwYWxfdWFydF9pbml0X25zKHVpbnQzMl90IHVhcnRfYmFzZV9hZGRyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIFVBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1YXJ0IGJhc2UgYWRkcjxici8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IDAzIHwgaW50IHBhbF9wcmludF9ucyhjaGFyICpzdHIsIHVpbnQzMl90IGRhdGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIGlucHV0IHN0cmluZyBhbmQgd3JpdGVzIGJ5dGVzIGludG8gVUFSVCBUWCBGSUZPfCBzdHIgICAgICA6IElucHV0IFN0cmluZzxici8+ZGF0YSAgICAgOiBWYWx1ZSBmb3IgZm9ybWF0IHNwZWNpZmllcjxici8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IDA0IHwgaW50IHBhbF93ZF90aW1lcl9pbml0X25zKGFkZHJfdCBiYXNlX2FkZHIsIHVpbnQzMl90IHRpbWVfdXMsIHVpbnQzMl90IHRpbWVyX3RpY2tfdXMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW5pdGlhbGl6ZXMgYW4gaGFyZHdhcmUgd2F0Y2hkb2cgdGltZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJhc2VfYWRkciAgICAgICA6IEJhc2UgYWRkcmVzcyBvZiB0aGUgd2F0Y2hkb2cgbW9kdWxlPGJyLz50aW1lX3VzICAgICAgICAgOiBUaW1lIGluIG1pY3JvIHNlY29uZHM8YnIvPnRpbWVyX3RpY2tfdXMgICA6IE51bWJlciBvZiB0aWNrcyBwZXIgbWljcm8gc2Vjb25kPGJyLz58Cit8IDAxIHwgaW50IHBhbF9zcGlfcmVhZChhZGRyX3QgYWRkciwgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbGVuKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUmVhZHMgcGVyaXBoZXJhbHMgdXNpbmcgU1BJIGNvbW1hbmRzICAgICAgICAgICAgICAgICB8IGFkZHIgOiBBZGRyZXNzIG9mIHRoZSBwZXJpcGhlcmFsPGJyLz5kYXRhIDogUmVhZCBidWZmZXI8YnIvPmxlbiAgOiBMZW5ndGggb2YgdGhlIHJlYWQgYnVmZmVyIGluIGJ5dGVzPGJyLz4gICAgICAgICAgICAgICAgICAgIHwKK3wgMDIgfCBpbnQgcGFsX3VhcnRfaW5pdF9ucyh1aW50MzJfdCB1YXJ0X2Jhc2VfYWRkcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbml0aWFsaXplcyB0aGUgVUFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFVBUlQgYmFzZSBhZGRyZXNzPGJyLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMDMgfCBpbnQgcGFsX3ByaW50X25zKGNoYXIgKnN0ciwgaW50MzJfdCBkYXRhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBhcnNlcyB0aGUgaW5wdXQgc3RyaW5nIGFuZCB3cml0ZXMgYnl0ZXMgaW50byBVQVJUIFRYIEZJRk98IHN0ciAgICAgIDogSW5wdXQgU3RyaW5nPGJyLz5kYXRhICAgICA6IFZhbHVlIGZvciBmb3JtYXQgc3BlY2lmaWVyPGJyLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMDQgfCBpbnQgcGFsX3dkX3RpbWVyX2luaXRfbnMoYWRkcl90IGJhc2VfYWRkciwgdWludDMyX3QgdGltZV91cywgdWludDMyX3QgdGltZXJfdGlja191cyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbml0aWFsaXplcyBhIGhhcmR3YXJlIHdhdGNoZG9nIHRpbWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYXNlX2FkZHIgICAgICAgOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIHdhdGNoZG9nIG1vZHVsZTxici8+dGltZV91cyAgICAgICAgIDogVGltZSBpbiBtaWNybyBzZWNvbmRzPGJyLz50aW1lcl90aWNrX3VzICAgOiBOdW1iZXIgb2YgdGlja3MgcGVyIG1pY3JvIHNlY29uZDxici8+fAogfCAwNSB8IGludCBwYWxfd2RfdGltZXJfZW5hYmxlX25zKGFkZHJfdCBiYXNlX2FkZHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVuYWJsZXMgYSBoYXJkd2FyZSB3YXRjaGRvZyB0aW1lciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYXNlX2FkZHIgICAgICAgOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIHdhdGNoZG9nIG1vZHVsZTxici8+fAogfCAwNiB8IGludCBwYWxfd2RfdGltZXJfZGlzYWJsZV9ucyhhZGRyX3QgYmFzZV9hZGRyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERpc2FibGVzIGEgaGFyZHdhcmUgd2F0Y2hkb2cgdGltZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYXNlX2FkZHIgIDogQmFzZSBhZGRyZXNzIG9mIHRoZSB3YXRjaGRvZyBtb2R1bGU8YnIvPiAgICB8Ci18IDA3IHwgaW50IHBhbF9udm1lbV9yZWFkX25zKGFkZHJfdCBiYXNlLCB1aW50MzJfdCBvZmZzZXQsIHZvaWQgKmJ1ZmZlciwgaW50IHNpemUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUmVhZHMgZnJvbSBnaXZlbiBub24tdm9sYXRpbGUgYWRkcmVzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJhc2UgICAgOiBCYXNlIGFkZHJlc3Mgb2YgbnZtZW08YnIvPm9mZnNldCAgOiBPZmZzZXQ8YnIvPmJ1ZmZlciAgOiBQb2ludGVyIHRvIHNvdXJjZSBhZGRyZXNzPGJyLz5zaXplICAgIDogTnVtYmVyIG9mIGJ5dGVzPGJyLz4gICAgICAgICAgICAgICAgICAgICB8Cit8IDA3IHwgaW50IHBhbF9udm1lbV9yZWFkX25zKGFkZHJfdCBiYXNlLCB1aW50MzJfdCBvZmZzZXQsIHZvaWQgKmJ1ZmZlciwgaW50IHNpemUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUmVhZHMgZnJvbSB0aGUgZ2l2ZW4gbm9uLXZvbGF0aWxlIGFkZHJlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYXNlICAgIDogQmFzZSBhZGRyZXNzIG9mIG52bWVtPGJyLz5vZmZzZXQgIDogT2Zmc2V0PGJyLz5idWZmZXIgIDogUG9pbnRlciB0byBzb3VyY2UgYWRkcmVzczxici8+c2l6ZSAgICA6IE51bWJlciBvZiBieXRlczxici8+ICAgICAgICAgICAgICAgICAgICAgfAogfCAwOCB8IGludCBwYWxfbnZtZW1fd3JpdGVfbnMoYWRkcl90IGJhc2UsIHVpbnQzMl90IG9mZnNldCwgdm9pZCAqYnVmZmVyLCBpbnQgc2l6ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFdyaXRlcyBpbnRvIGdpdmVuIG5vbi12b2xhdGlsZSBhZGRyZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYXNlICAgIDogQmFzZSBhZGRyZXNzIG9mIG52bWVtPGJyLz5vZmZzZXQgIDogT2Zmc2V0PGJyLz5idWZmZXIgIDogUG9pbnRlciB0byBzb3VyY2UgYWRkcmVzczxici8+c2l6ZSAgICA6IE51bWJlciBvZiBieXRlczxici8+ICAgICAgICAgICAgICAgICAgICAgfAotfCAwOSB8IGludDMyX3QgcGFsX2NyeXB0b19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgY3J5cHRvIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICB8IHR5cGUgICAgOiBmdW5jdGlvbiBjb2RlPGJyLz52YWxpc3QgIDogdmFyaWFibGUgYXJndW1lbnQgbGlzdDxici8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IDEwIHwgdWludDMyX3QgcGFsX2l0c19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgaW50ZXJuYWwgdHJ1c3RlZCBzdG9yYWdlICBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgfCB0eXBlICAgIDogZnVuY3Rpb24gY29kZTxici8+dmFsaXN0ICA6IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3Q8YnIvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAxMSB8IHVpbnQzMl90IHBhbF9wc19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgcHJvdGVjdGVkIHN0b3JhZ2UgIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICB8IHR5cGUgICAgOiBmdW5jdGlvbiBjb2RlPGJyLz52YWxpc3QgIDogdmFyaWFibGUgYXJndW1lbnQgbGlzdDxici8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IDEyIHwgaW50MzJfdCBwYWxfYXR0ZXN0YXRpb25fZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUaGlzIEFQSSB3aWxsIGNhbGwgdGhlIHJlcXVlc3RlZCBpbml0aWFsIGF0dGVzdGF0aW9uICBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgfCB0eXBlICAgIDogZnVuY3Rpb24gY29kZTxici8+dmFsaXN0ICA6IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3Q8YnIvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAwOSB8IGludDMyX3QgcGFsX2NyeXB0b19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbHMgdGhlIHJlcXVlc3RlZCBDcnlwdG8gZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgIHwgdHlwZSAgICA6IEZ1bmN0aW9uIGNvZGU8YnIvPnZhbGlzdCAgOiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0PGJyLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTAgfCB1aW50MzJfdCBwYWxfaXRzX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxscyB0aGUgcmVxdWVzdGVkIEludGVybmFsIFRydXN0ZWQgU3RvcmFnZSAgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgIHwgdHlwZSAgICA6IEZ1bmN0aW9uIGNvZGU8YnIvPnZhbGlzdCAgOiBWYXJpYWJsZSBhcmd1bWVudCBsaXN0PGJyLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMTEgfCB1aW50MzJfdCBwYWxfcHNfZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGxzIHRoZSByZXF1ZXN0ZWQgUHJvdGVjdGVkIFN0b3JhZ2UgIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICB8IHR5cGUgICAgOiBGdW5jdGlvbiBjb2RlPGJyLz52YWxpc3QgIDogVmFyaWFibGUgYXJndW1lbnQgbGlzdDxici8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEyIHwgaW50MzJfdCBwYWxfYXR0ZXN0YXRpb25fZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxscyB0aGUgcmVxdWVzdGVkIEluaXRpYWwgQXR0ZXN0YXRpb24gIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICB8IHR5cGUgICAgOiBGdW5jdGlvbiBjb2RlPGJyLz52YWxpc3QgIDogVmFyaWFibGUgYXJndW1lbnQgbGlzdDxici8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAKICMjIExpY2Vuc2UKIEFybSBQU0EgdGVzdCBzdWl0ZSBpcyBkaXN0cmlidXRlZCB1bmRlciBBcGFjaGUgdjIuMCBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2RvY3MvcG9ydGluZ19ndWlkZV9mZi5tZCBiL2FwaS10ZXN0cy9kb2NzL3BvcnRpbmdfZ3VpZGVfZmYubWQKaW5kZXggN2Y2ZjlmMC4uYWRjZWIzNyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2RvY3MvcG9ydGluZ19ndWlkZV9mZi5tZAorKysgYi9hcGktdGVzdHMvZG9jcy9wb3J0aW5nX2d1aWRlX2ZmLm1kCkBAIC0xLDIxICsxLDE5IEBACiAKLSMgUG9ydGluZyBHdWlkZSAtIFBTQS1GRiBBcmNoaXRlY3R1cmUgVGVzdCBTdWl0ZQorIyBQb3J0aW5nIEd1aWRlOiBQU0EtRkYgQXJjaGl0ZWN0dXJlIFRlc3QgU3VpdGUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICMjIEludHJvZHVjdGlvbgotVGhlIEFyY2hpdGVjdHVyZSB0ZXN0IHN1aXRlIGNvbnRhaW5zIGEgcGxhdGZvcm0gYWJzdHJhY3Rpb24gbGF5ZXIgKFBBTCkgd2hpY2ggYWJzdHJhY3RzIHBsYXRmb3JtIHNwZWNpZmljIGluZm9ybWF0aW9uIGZyb20gdGhlIHRlc3RzLgotIC0gVGhlIFBBTCBsYXllciBpbnRlcmZhY2UgZnVuY3Rpb25zIG5lZWQgdG8gYmUgaW1wbGVtZW50ZWQvcG9ydGVkIHRvIHRoZSB0YXJnZXQgcGxhdGZvcm0uCi0gLSBUaGUgdGFyZ2V0IGNvbmZpZyBmaWxlIG11c3QgYmUgY3JlYXRlZC91cGRhdGVkIHRvIG1hdGNoIHRoZSBkZXRhaWxzIG9mIHRoZSB0YXJnZXQgcGxhdGZvcm0uCitUaGUgYXJjaGl0ZWN0dXJlIHRlc3Qgc3VpdGUgY29udGFpbnMgYSAqUGxhdGZvcm0gQWJzdHJhY3Rpb24gTGF5ZXIqIChQQUwpIHdoaWNoIGFic3RyYWN0cyBwbGF0Zm9ybS1zcGVjaWZpYyBpbmZvcm1hdGlvbiBmcm9tIHRoZSB0ZXN0cy4gWW91IG11c3QgaW1wbGVtZW50IGFuZCBwb3J0IHRoZSBQQUwgaW50ZXJmYWNlIGZ1bmN0aW9ucyB0byB5b3VyIHRhcmdldCBwbGF0Zm9ybS4gQ3JlYXRlIGFuZCB1cGRhdGUgdGhlIHRhcmdldCBjb25maWd1cmF0aW9uIGZpbGUgdG8gbWF0Y2ggdGhlIGRldGFpbHMgb2YgdGhpcyB0YXJnZXQgcGxhdGZvcm0uCiAKLVRoaXMgZG9jdW1lbnQgcHJvdmlkZXMgZGV0YWlscyBvbiB0aGUgcG9ydGluZyBzdGVwcyBhbmQgdGhlIFBBTCBBUElzLgorVGhpcyBkb2N1bWVudCBwcm92aWRlcyB0aGUgcG9ydGluZyBzdGVwcyBhbmQgdGhlIGxpc3Qgb2YgUEFMIEFQSXMuCiAKICMjIFBvcnRpbmcgc3RlcHMKIAogIyMjIFRhcmdldCBjb25maWd1cmF0aW9uCiAKLVlvdSBtdXN0IHBvcHVsYXRlIHlvdXIgc3lzdGVtIGNvbmZpZ3VyYXRpb24gYW5kIHByb3ZpZGUgaXQgYXMgYW4gaW5wdXQgdG8gdGVzdCBzdWl0ZS4gVGhpcyBpcyBjYXB0dXJlZCBpbiBhIHNpbmdsZSBzdGF0aWMgaW5wdXQgY29uZmlndXJhdGlvbiBmaWxlIHRoYXQgaXMgbmFtZWQgYXMgdGFyZ2V0LmNmZy4gVGhpcyBmaWxlIGlzIGF2YWlsYWJsZSBhdCBhcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy88cGxhdGZvcm1fbmFtZT4vLiA8YnIgLz4KK1lvdSBtdXN0IHBvcHVsYXRlIHlvdXIgc3lzdGVtIGNvbmZpZ3VyYXRpb24gYW5kIHByb3ZpZGUgaXQgYXMgYW4gaW5wdXQgdG8gdGVzdCBzdWl0ZS4gVGhlIHN5c3RlbSBjb25maWd1cmF0aW9uIGlzIGNhcHR1cmVkIGluIGEgc2luZ2xlIHN0YXRpYyBpbnB1dCBjb25maWd1cmF0aW9uIGZpbGUgY2FsbGVkICoqdGFyZ2V0LmNmZyoqLCBhdmFpbGFibGUgYXQgKiphcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy88cGxhdGZvcm1fbmFtZT4vKiouIDxiciAvPgogCi1BbiBleGFtcGxlIG9mIHRoZSBpbnB1dCBjb25maWd1cmF0aW9uIGZpbGUgaXMgYXMgc2hvd24uCitBbiBleGFtcGxlIGlucHV0IGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBhcyBzaG93bi4KIAogICAgIC8vIFVBUlQgZGV2aWNlIGluZm8KICAgICB1YXJ0Lm51bT0xOwpAQCAtMzEsNTAgKzI5LDUyIEBACiAgICAgd2F0Y2hkb2cuMC5pbnRyX2lkID0gMHhGRjsKICAgICB3YXRjaGRvZy4wLnBlcm1pc3Npb24gPSBUWVBFX1JFQURfV1JJVEU7CiAKLSAgTW9yZSBkZXRhaWxzIG9uIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGlucHV0IGNhbiBiZSBvYnRhaW5lZCBmcm9tIHZhbC9jb21tb24vdmFsX3RhcmdldC5oLgorICBGb3IgZGV0YWlscyBvbiB0aGUgc3RydWN0dXJlIG9mIHRoZSBpbnB1dCwgcmVmZXIgdG8gKip2YWwvY29tbW9uL3ZhbF90YXJnZXQuaCoqLgogCiAjIyMgQWRkaW5nIGEgbmV3IHRhcmdldAogCi0gIC0gQ3JlYXRlIGEgbmV3IGRpcmVjdG9yeSBpbiBwbGF0Zm9ybS90YXJnZXRzLzxwbGF0Zm9ybV9uYW1lPi4gRm9yIHJlZmVyZW5jZSwgc2VlIHRoZSBleGlzdGluZyBwbGF0Zm9ybSB0Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200IGRpcmVjdG9yeS4KLSAgLSBjcCAtcmYgcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200LyBwbGF0Zm9ybS90YXJnZXRzLzxwbGF0Zm9ybV9uYW1lPi8KLSAgLSBVcGRhdGUgcGxhdGZvcm0vdGFyZ2V0cy88cGxhdGZvcm1fbmFtZT4vdGFyZ2V0LmNmZyB3aXRoIHlvdXIgcGxhdGZvcm0gZGV0YWlsLiBSZWZlciB2YWwvY29tbW9uL3ZhbF90YXJnZXQuaCBmb3Igc3RydWN0dXJlIGRldGFpbHMuCi0gIC0gVXBkYXRlIHRoZSBwbGF0Zm9ybSBpbmZvcm1hdGlvbiBhdmFpbGFibGUgaW4gbWFuaWZlc3QgZmlsZXMgbG9jYXRlZCBpbiAgcGxhdGZvcm0vdGFyZ2V0cy88cGxhdGZvcm1fbmFtZT4vbWFuaWZlc3RzLyBkaXJlY3Rvcnkgd2l0aCB5b3VyIHBsYXRmb3JtIGluZm9ybWF0aW9uLiBUaGUgcGxhdGZvcm0gZGV0YWlsIG11c3QgbWF0Y2ggd2l0aCBkZXZpY2UgZGV0YWlsIHByb3ZpZGVkIGluIHRoZSB0YXJnZXQuY2ZnIGZpbGUuCi0gIC0gVXBkYXRlIHBsYXRmb3JtL3RhcmdldHMvPHBsYXRmb3JtX25hbWU+L01ha2VmaWxlIGFwcHJvcHJpYXRlbHkgdG8gc2VsZWN0IGNvcnJlY3QgaW5zdGFuY2VzIG9mIFBBTCBmaWxlcyBmb3IgY29tcGlsYXRpb24uIFRvIGNvbXBpbGUgSVBDIHRlc3RzLCB5b3UgbXVzdCBzZXQgUFNBX0lQQ19JTVBMRU1FTlRFRCB0byAxIGFuZCByZW1haW5pbmcgRGV2ZWxvcGVyIEFQSXMgcmVsYXRlZCB2YXJpYWJsZXMgdG8gMC4gVGhpcyBzZWxlY3RzIHRoZSBzZWN1cmUgUEFMIGluc3RhbmNlcyBmb3IgdGhlIGRyaXZlciBzZXJ2aWNlcyBhbmQgZWxpbWluYXRlcyBkZXZfYXBpcyBkZXBlbmRlbmN5IGZvciBJUEMgdGVzdHMuCi0gIC0gUmVmZXIgIlBBTCBBUEkgbGlzdCIgc2VjdGlvbiB0byB2aWV3IGxpc3Qgb2YgUEFMIEFQSXMgdGhhdCBtdXN0IGJlIHBvcnRlZCBmb3IgeW91ciB0YXJnZXQgcGxhdGZvcm0uIFRoZXNlIEFQSXMgZGVmaW5pdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiBuc3BlLzxzdWl0ZV9uYW1lPi9wYWxfXCpcX2ludGYuYyBhbmQgc3BlL3BhbF9cKl9pbnRmLmMgZmlsZXMuIFRoZXNlIEFQSXMgYXJlIHdyaXR0ZW4gZm9yIHRndF9mZl9tYmVkb3NfZnZwX21wczJfbTQgcGxhdGZvcm0uIFlvdSBjYW4gcmV1c2UgdGhlIGNvZGUgaWYgaXQgd29ya3MgZm9yIHlvdXIgcGxhdGZvcm0uIE90aGVyd2lzZSB5b3UgbXVzdCBwb3J0IHRoZW0gZm9yIHlvdXIgcGxhdGZvcm0gc3BlY2lmaWMgcGVyaXBoZXJhbHMuCi0gIC0gVGhlIHBsYXRmb3JtIG1ha2UgZmlsZSBpcyBpbnZva2VkIGFzIHBhcnQgb2YgdGVzdCBzdWl0ZSBidWlsZCB0b29sKC4vc2V0dXAuc2gpIHN0ZXAgYW5kIGl0IGNyZWF0ZXMgPGJ1aWxkX2Rpcj4vQlVJTEQvcGxhdGZvcm0vcGFsX25zcGUuYSBhcmNoaXZlIGZvciBOUFNFIGZpbGVzIGFuZCByZXNwZWN0aXZlIG9iamVjdCBmb3IgU1BFIGZpbGVzIGF0IDxidWlsZF9kaXI+L0JVSUxEL3BsYXRmb3JtL3NwZS9cKlxfZHJpdmVyX3NwLm8uIExhdGVyLCB0aGVzZSBTUEUgb2JqZWN0cyBhcmUgdXNlZCBieSBzcGJ1aWxkLm1rIHRvIGNyZWF0ZSBhcHByb3ByaWF0ZSBTUEUgcGFydGl0aW9uIGFyY2hpdmUgZmlsZS4KKyAgMS4gQ3JlYXRlIGEgbmV3IGRpcmVjdG9yeSBpbiAqKnBsYXRmb3JtL3RhcmdldHMvPHBsYXRmb3JtX25hbWU+KiouIEZvciByZWZlcmVuY2UsIHNlZSB0aGUgZXhpc3RpbmcgcGxhdGZvcm0gdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNCBkaXJlY3RvcnkuCisgIDIuIEV4ZWN1dGUgYGNwIC1yZiBwbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvIHBsYXRmb3JtL3RhcmdldHMvPHBsYXRmb3JtX25hbWU+L2AuCisgIDMuIFVwZGF0ZSAqKnBsYXRmb3JtL3RhcmdldHMvPHBsYXRmb3JtX25hbWU+L3RhcmdldC5jZmcqKiB3aXRoIHlvdXIgdGFyZ2V0IHBsYXRmb3JtIGRldGFpbHMuIFJlZmVyIHRvICoqdmFsL2NvbW1vbi92YWxfdGFyZ2V0LmgqKiBmb3Igc3RydWN0dXJlIGRldGFpbHMuCisgIDQuIFVwZGF0ZSB0aGUgcGxhdGZvcm0gaW5mb3JtYXRpb24gYXZhaWxhYmxlIGluIG1hbmlmZXN0IGZpbGVzIGxvY2F0ZWQgaW4gICoqcGxhdGZvcm0vdGFyZ2V0cy88cGxhdGZvcm1fbmFtZT4vbWFuaWZlc3RzLyoqIGRpcmVjdG9yeSB3aXRoIHlvdXIgcGxhdGZvcm0gaW5mb3JtYXRpb24uIFRoZSBwbGF0Zm9ybSBkZXRhaWxzIG11c3QgbWF0Y2ggdGhlIGRldmljZSBkZXRhaWxzIHByb3ZpZGVkIGluIHRoZSB0YXJnZXQuY2ZnIGZpbGUuCisgIDUuIFVwZGF0ZSAqKnBsYXRmb3JtL3RhcmdldHMvPHBsYXRmb3JtX25hbWU+L01ha2VmaWxlKiogYXBwcm9wcmlhdGVseSB0byBzZWxlY3QgdGhlIGNvcnJlY3QgaW5zdGFuY2VzIG9mIFBBTCBmaWxlcyBmb3IgY29tcGlsYXRpb24uIFRvIGNvbXBpbGUgSVBDIHRlc3RzLCB5b3UgbXVzdCBzZXQgUFNBX0lQQ19JTVBMRU1FTlRFRCB0byAxIGFuZCB0aGUgcmVtYWluaW5nIERldmVsb3BlciBBUElzIHJlbGF0ZWQgdmFyaWFibGVzIHRvIDAuIFRoaXMgc2VsZWN0cyB0aGUgU2VjdXJlIFBBTCBpbnN0YW5jZXMgZm9yIHRoZSBkcml2ZXIgc2VydmljZXMgYW5kIGVsaW1pbmF0ZXMgZGV2X2FwaXMgZGVwZW5kZW5jeSBmb3IgSVBDIHRlc3RzLgorICA2LiBSZWZlciB0byB0aGUgKipMaXN0IG9mIFBBTCBBUElzKiogc2VjdGlvbiB0byB2aWV3IHRoZSBsaXN0IG9mIFBBTCBBUElzIHRoYXQgbXVzdCBiZSBwb3J0ZWQgZm9yIHlvdXIgdGFyZ2V0IHBsYXRmb3JtLiBUaGVzZSBBUEkgZGVmaW5pdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiAqKm5zcGUvPHN1aXRlX25hbWU+L3BhbF9cKlxfaW50Zi5jKiogYW5kICoqc3BlL3BhbF9cKlxfaW50Zi5jKiogZmlsZXMuIFRoZXNlIEFQSXMgYXJlIHdyaXR0ZW4gZm9yICoqdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNCoqIHBsYXRmb3JtLiBZb3UgY2FuIHJldXNlIHRoZSBjb2RlIGlmIGl0IHdvcmtzIGZvciB5b3VyIHBsYXRmb3JtLiBPdGhlcndpc2UsIHlvdSBtdXN0IHBvcnQgdGhlbSBmb3IgeW91ciBwbGF0Zm9ybS1zcGVjaWZpYyBwZXJpcGhlcmFscy4KIAogKipOb3RlKio6Ci0gIFRlc3Qgc3VpdGUgbmVlZHMgYWNjZXNzIHRvIHRoZSBmb2xsb3dpbmcgcGVyaXBoZXJhbHMuIFdoZW4gUFNBX0lQQ19JTVBMRU1FTlRFRCBpcyBzZXQgdG8gMSwgZHJpdmVyIGZ1bmN0aW9uYWxpdGllcyBhcmUgaW1wbGVtZW50ZWQgYXMgUm9ULXNlcnZpY2VzIGluIGRyaXZlciBwYXJ0aXRpb24uIE90aGVyIFNlY3VyZSBwYXJ0aXRpb25zIGFuZCBub24tc2VjdXJlIGNvZGUgY2FsbHMgdG8gdGhlc2UgUm9ULXNlcnZpY2VzIHRvIGdldCBhcHByb3ByaWF0ZSBkcml2ZXIgc2VydmljZXMuCi0gIC0gT25lIFVBUlQgdG8gcHJpbnQgbnNwZSBhbmQgc3BlIG1lc3NhZ2VzCi0gIC0gT25lIFdhdGNoZG9nIHRpbWVyIHRvIGhlbHAgcmVjb3ZlcnkgZnJvbSBhbnkgZmF0YWwgZXJyb3IgY29uZGl0aW9ucworLSBUaGUgcGxhdGZvcm0gbWFrZWZpbGUgaXMgaW52b2tlZCBhcyBwYXJ0IG9mIHRlc3Qgc3VpdGUgYnVpbGQgdG9vbCAoKiouL3NldHVwLnNoKiopIHN0ZXAgYW5kIGl0IGNyZWF0ZXMgKio8YnVpbGRfZGlyPi9CVUlMRC9wbGF0Zm9ybS9wYWxfbnNwZS5hKiogYXJjaGl2ZSBmb3IgTlBTRSBmaWxlcyBhbmQgcmVzcGVjdGl2ZSBvYmplY3QgZm9yIFNQRSBmaWxlcyBhdCAqKjxidWlsZF9kaXI+L0JVSUxEL3BsYXRmb3JtL3NwZS9cKlxfZHJpdmVyX3NwLm8qKi4gVGhlc2UgU1BFIG9iamVjdHMgYXJlIHVzZWQgYnkgKipzcGJ1aWxkLm1rKiogdG8gY3JlYXRlIHRoZSAgYXBwcm9wcmlhdGUgU1BFIHBhcnRpdGlvbiBhcmNoaXZlIGZpbGUuCistIFRoZSB0ZXN0IHN1aXRlIHJlcXVpcmVzIGFjY2VzcyB0byB0aGUgcGVyaXBoZXJhbHMgbWVudGlvbmVkIGJlbG93LiBXaGVuIFBTQV9JUENfSU1QTEVNRU5URUQgaXMgc2V0IHRvIDEsIGRyaXZlciBmdW5jdGlvbmFsaXRpZXMgYXJlIGltcGxlbWVudGVkIGFzIFJvVC1zZXJ2aWNlcyBpbiBkcml2ZXIgcGFydGl0aW9uLiBPdGhlciBTZWN1cmUgcGFydGl0aW9ucyBhbmQgTm9uLXNlY3VyZSBjb2RlIGNhbGxzIHRvIHRoZXNlIFJvVC1zZXJ2aWNlcyB0byBnZXQgYXBwcm9wcmlhdGUgZHJpdmVyIHNlcnZpY2VzLgorICAtIE9uZSBVQVJUIHRvIHByaW50IE5TUEUgb3IgU1BFIG1lc3NhZ2VzIGFuZCB0byBjb3ZlciBzZWN1cmUgcGFydGl0aW9uIGludGVycnVwdCBoYW5kbGluZyBzY2VuYXJpb3MKKyAgLSBPbmUgV2F0Y2hkb2cgdGltZXIgdG8gaGVscCByZWNvdmVyIGZyb20gYW55IGZhdGFsIGVycm9yIGNvbmRpdGlvbnMKICAgLSBOb24tdm9sYXRpbGUgbWVtb3J5IHN1cHBvcnQgdG8gcHJlc2VydmUgdGVzdCBzdGF0dXMgb3ZlciB3YXRjaGRvZyB0aW1lciByZXNldAogCisjIyBMaXN0IG9mIFBBTCBBUElzCiAKLSMjIFBBTCBBUEkgbGlzdAotU2luY2UgVGVzdCBzdWl0ZSBpcyBhZ25vc3RpYyB0byB2YXJpb3VzIHN5c3RlbSB0YXJnZXRzLCBiZWZvcmUgYnVpbGRpbmcgdGhlIHRlc3RzLCB5b3UgbXVzdCBwb3J0IGJlbG93IFBBTCBBUElzLiBUaGVzZSBmdW5jdGlvbnMgd2lsbCByZXF1aXJlIGltcGxlbWVudGF0aW9uIGZvciB5b3VyIHRhcmdldCBwbGF0Zm9ybS4gPGJyIC8+CitTaW5jZSB0aGUgdGVzdCBzdWl0ZSBpcyBhZ25vc3RpYyB0byB2YXJpb3VzIHN5c3RlbSB0YXJnZXRzLCB5b3UgbXVzdCBwb3J0IHRoZSBmb2xsb3dpbmcgUEFMIE5TUEUgQVBJcyBiZWZvcmUgYnVpbGRpbmcgdGhlIHRlc3RzLiBJbXBsZW1lbnQgdGhlc2UgZnVuY3Rpb25zIGZvciB5b3VyIHRhcmdldCBwbGF0Zm9ybS4gPGJyIC8+CiAKLS0gRm9sbG93aW5nIGFyZSB0aGUgbGlzdCBvZiBQQUwgQVBJcyB1c2VkIGluIE5TUEU6IDxiciAvPgorVGhlIGZvbGxvd2luZyBpcyB0aGUgbGlzdCBvZiBQQUwgQVBJcyB1c2VkIGluIE5TUEU6IDxiciAvPgogCiB8IE5vIHwgUHJvdG90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBhcmFtZXRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwtLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAotfCAwMSB8IGludCBwYWxfc3BpX3JlYWQoYWRkcl90IGFkZHIsIHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IGxlbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIHBlcmlwaGVyYWxzIHVzaW5nIFNQSSBjb21tYW5kcyAgICAgICAgICAgICAgICAgfCBhZGRyIDogYWRkcmVzcyBvZiB0aGUgcGVyaXBoZXJhbDxici8+ZGF0YSA6IHJlYWQgYnVmZmVyPGJyLz5sZW4gIDogbGVuZ3RoIG9mIHRoZSByZWFkIGJ1ZmZlciBpbiBieXRlczxici8+ICAgICAgICAgICAgICAgICAgICB8Cit8IDAxIHwgaW50IHBhbF9zcGlfcmVhZChhZGRyX3QgYWRkciwgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbGVuKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUmVhZHMgcGVyaXBoZXJhbHMgdXNpbmcgU1BJIGNvbW1hbmRzICAgICAgICAgICAgICAgICB8IGFkZHIgOiBBZGRyZXNzIG9mIHRoZSBwZXJpcGhlcmFsPGJyLz5kYXRhIDogUmVhZCBidWZmZXI8YnIvPmxlbiAgOiBMZW5ndGggb2YgdGhlIHJlYWQgYnVmZmVyIGluIGJ5dGVzPGJyLz4gICAgICAgICAgICAgICAgICAgIHwKIAotLSBGb2xsb3dpbmcgYXJlIHRoZSBsaXN0IG9mIFBBTCBBUElzIHVzZWQgaW4gU1BFOiA8YnIgLz4KK1RoZSBmb2xsb3dpbmcgaXMgdGhlIGxpc3Qgb2YgUEFMIEFQSXMgdXNlZCBpbiBTUEU6IDxiciAvPgogCiB8IE5vIHwgUHJvdG90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfC0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKLXwgMDEgfCB2b2lkIHBhbF91YXJ0X2luaXQoYWRkcl90IHVhcnRfYmFzZV9hZGRyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSB1YXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1YXJ0X2Jhc2VfYWRkciA6IEJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVDxici8+ICAgICAgICAgICB8Ci18IDAyIHwgdm9pZCBwYWxfcHJpbnQoY2hhciAqc3RyLCB1aW50MzJfdCBkYXRhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIGlucHV0IHN0cmluZyBhbmQgd3JpdGVzIGJ5dGUgYnkgYnl0ZSB0byBwcmludCAgICAgICAgICAgIHwgc3RyICAgICAgICAgICAgOiBJbnB1dCBTdHJpbmc8YnIvPmRhdGEgICAgICAgICAgIDogVmFsdWUgZm9yIEZvcm1hdCBzcGVjaWZpZXI8YnIvPiAgICAgICAgICAgICAgICAgICAgICAgfAotfCAwMyB8IGludCAgcGFsX3dkX3RpbWVyX2luaXQoYWRkcl90IGJhc2VfYWRkciwgdWludDMyX3QgdGltZV91cywgdWludDMyX3QgdGltZXJfdGlja191cyk7fCBJbml0aWFsaXplcyBhbiBoYXJkd2FyZSB3YXRjaGRvZyB0aW1lciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYXNlX2FkZHIgICAgICAgOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIHdhdGNoZG9nIG1vZHVsZTxici8+dGltZV91cyAgICAgICAgIDogVGltZSBpbiBtaWNybyBzZWNvbmRzPGJyLz50aW1lcl90aWNrX3VzICAgOiBOdW1iZXIgb2YgdGlja3MgcGVyIG1pY3JvIHNlY29uZDxici8+fAorfCAwMSB8IHZvaWQgcGFsX3VhcnRfaW5pdChhZGRyX3QgdWFydF9iYXNlX2FkZHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEluaXRpYWxpemVzIHRoZSBVQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1YXJ0X2Jhc2VfYWRkciA6IEJhc2UgYWRkcmVzcyBvZiB0aGUgVUFSVDxici8+ICAgICAgICAgICB8Cit8IDAyIHwgdm9pZCBwYWxfcHJpbnQoY2hhciAqc3RyLCBpbnQzMl90IGRhdGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQYXJzZXMgdGhlIGlucHV0IHN0cmluZyBhbmQgd3JpdGVzIGJ5dGUgYnkgYnl0ZSB0byBwcmludCAgICAgICAgICAgIHwgc3RyICAgICAgICAgICAgOiBJbnB1dCBTdHJpbmc8YnIvPmRhdGEgICAgICAgICAgIDogVmFsdWUgZm9yIEZvcm1hdCBzcGVjaWZpZXI8YnIvPiAgICAgICAgICAgICAgICAgICAgICAgfAorfCAwMyB8IGludCAgcGFsX3dkX3RpbWVyX2luaXQoYWRkcl90IGJhc2VfYWRkciwgdWludDMyX3QgdGltZV91cywgdWludDMyX3QgdGltZXJfdGlja191cyk7fCBJbml0aWFsaXplcyBhIGhhcmR3YXJlIHdhdGNoZG9nIHRpbWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJhc2VfYWRkciAgICAgICA6IEJhc2UgYWRkcmVzcyBvZiB0aGUgd2F0Y2hkb2cgbW9kdWxlPGJyLz50aW1lX3VzICAgICAgICAgOiBUaW1lIGluIG1pY3JvIHNlY29uZHM8YnIvPnRpbWVyX3RpY2tfdXMgICA6IE51bWJlciBvZiB0aWNrcyBwZXIgbWljcm8gc2Vjb25kPGJyLz58CiB8IDA0IHwgaW50ICBwYWxfd2RfdGltZXJfZW5hYmxlKGFkZHJfdCBiYXNlX2FkZHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRW5hYmxlcyBhIGhhcmR3YXJlIHdhdGNoZG9nIHRpbWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmFzZV9hZGRyICAgICA6IEJhc2UgYWRkcmVzcyBvZiB0aGUgd2F0Y2hkb2cgbW9kdWxlPGJyLz4gfAogfCAwNSB8IGludCAgcGFsX3dkX3RpbWVyX2Rpc2FibGUoYWRkcl90IGJhc2VfYWRkcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERpc2FibGVzIGEgaGFyZHdhcmUgd2F0Y2hkb2cgdGltZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJhc2VfYWRkciAgICAgOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIHdhdGNoZG9nIG1vZHVsZTxici8+IHwKIHwgMDYgfCBpbnQgIHBhbF93ZF90aW1lcl9pc19lbmFibGVkKGFkZHJfdCBiYXNlX2FkZHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDaGVja3Mgd2hldGhlciBoYXJkd2FyZSB3YXRjaGRvZyB0aW1lciBpcyBlbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYXNlX2FkZHIgICAgIDogQmFzZSBhZGRyZXNzIG9mIHRoZSB3YXRjaGRvZyBtb2R1bGU8YnIvPiB8Ci18IDA3IHwgaW50ICBwYWxfbnZtZW1fd3JpdGUoYWRkcl90IGJhc2UsIHVpbnQzMl90IG9mZnNldCwgdm9pZCAqYnVmZmVyLCBpbnQgc2l6ZSk7ICAgICAgIHwgV3JpdGVzICdzaXplJyBieXRlcyBmcm9tIGJ1ZmZlciBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYXQgYSBnaXZlbiAnYmFzZSArIG9mZnNldCd8IGJhc2UgICAgICA6IEJhc2UgYWRkcmVzcyBvZiBOViBNRU08YnIvPm9mZnNldCAgICA6IE9mZnNldDxici8+YnVmZmVyICAgIDogUG9pbnRlciB0byBzb3VyY2UgYWRkcmVzczxici8+c2l6ZSAgICAgIDogTnVtYmVyIG9mIGJ5dGVzPGJyLz4gICAgICAgICAgICAgICAgICB8Cit8IDA3IHwgaW50ICBwYWxfbnZtZW1fd3JpdGUoYWRkcl90IGJhc2UsIHVpbnQzMl90IG9mZnNldCwgdm9pZCAqYnVmZmVyLCBpbnQgc2l6ZSk7ICAgICAgIHwgV3JpdGVzICdzaXplIGJ5dGVzIGZyb20gYnVmZmVyIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBhdCBhIGdpdmVuICdiYXNlICsgb2Zmc2V0J3wgYmFzZSAgICAgIDogQmFzZSBhZGRyZXNzIG9mIE5WIE1FTTxici8+b2Zmc2V0ICAgIDogT2Zmc2V0PGJyLz5idWZmZXIgICAgOiBQb2ludGVyIHRvIHNvdXJjZSBhZGRyZXNzPGJyLz5zaXplICAgICAgOiBOdW1iZXIgb2YgYnl0ZXM8YnIvPiAgICAgICAgICAgICAgICAgIHwKIHwgMDggfCBpbnQgIHBhbF9udm1lbV9yZWFkKGFkZHJfdCBiYXNlLCB1aW50MzJfdCBvZmZzZXQsIHZvaWQgKmJ1ZmZlciwgaW50IHNpemUpOyAgICAgICB8IFJlYWRzICdzaXplJyBieXRlcyBmcm9tIG5vbi12b2xhdGlsZSBtZW1vcnkgYXQgYSBnaXZlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJhc2UgICAgICA6IEJhc2UgYWRkcmVzcyBvZiBOViBNRU08YnIvPm9mZnNldCAgICA6IE9mZnNldDxici8+YnVmZmVyICAgIDogUG9pbnRlciB0byBzb3VyY2UgYWRkcmVzczxici8+c2l6ZSAgICAgIDogTnVtYmVyIG9mIGJ5dGVzPGJyLz4gICAgICAgICAgICAgICAgICB8Cit8IDA5IHwgdm9pZCBwYWxfZ2VuZXJhdGVfaW50ZXJydXB0KHZvaWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUcmlnZ2VyIGludGVycnVwdCBmb3IgSVJRIHNpZ25hbCBhc3NpZ25lZCB0byBkcml2ZXIgcGFydGl0aW9uICAgICAgICAgICAgICAgICAgICAgIHwgTm9uZSB8Cit8IDEwIHwgdm9pZCBwYWxfZGlzYWJsZV9pbnRlcnJ1cHQodm9pZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgdGhhdCB3YXMgZ2VuZXJhdGVkIHVzaW5nIHBhbF9nZW5lcmF0ZV9pbnRlcnJ1cHQgQVBJLiAgICAgICAgICAgICAgfCBOb25lIHwKIAogIyMgTGljZW5zZQogQXJtIFBTQSB0ZXN0IHN1aXRlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIEFwYWNoZSB2Mi4wIExpY2Vuc2UuCiAKIC0tLS0tLS0tLS0tLS0tCiAKLSpDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuKgorKkNvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBhbmQgQ29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLioKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kb2NzL3BzYV9hdHRlc3RhdGlvbl90ZXN0bGlzdC5tZCBiL2FwaS10ZXN0cy9kb2NzL3BzYV9hdHRlc3RhdGlvbl90ZXN0bGlzdC5tZAppbmRleCBkOGQ3ZjEwLi40NzhiNDk0IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZG9jcy9wc2FfYXR0ZXN0YXRpb25fdGVzdGxpc3QubWQKKysrIGIvYXBpLXRlc3RzL2RvY3MvcHNhX2F0dGVzdGF0aW9uX3Rlc3RsaXN0Lm1kCkBAIC00LDcgKzQsNyBAQAogfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKIHwgdGVzdF9hMDAxIHwgUFNBX0FUVEVTVF9FUlJfU1VDQ0VTUyAgICAgICAgICAgICAgIHwgcHNhX2luaXRpYWxfYXR0ZXN0X2dldF90b2tlbigpPGJyIC8+cHNhX2luaXRpYWxfYXR0ZXN0X2dldF90b2tlbl9zaXplKCkgfCAxLiBQcm92aWRlIGNvcnJlY3QgaW5wdXRzIHRvIEFQSSB3aXRoIGRlc2NyaWJlZCBjaGFsbGVuZ2Ugc2l6ZXMgIDxiciAvPjIuIEV4cGVjdCBBUEkgdG8gcmV0dXJuIHRoaXMgZGVmaW5lIGFzIHJldHVybiB2YWx1ZSBlYWNoIHRpbWUgIDxiciAvPjMuIFZlcmlmeSB0aGUgdG9rZW4gfCAxLiBDaGFsbGVuZ2Vfc2l6ZSA9IDMyIDxiciAvPjIuIENoYWxsZW5nZV9zaXplID0gNDggPGJyIC8+My4gQ2hhbGxlbmdlX3NpemUgPSA2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgIHwgUFNBX0FUVEVTVF9FUlJfSU5WQUxJRF9JTlBVVCAgICAgICAgIHwgcHNhX2luaXRpYWxfYXR0ZXN0X2dldF90b2tlbigpPGJyIC8+cHNhX2luaXRpYWxfYXR0ZXN0X2dldF90b2tlbl9zaXplKCkgfCAxLiBQcm92aWRlIGRlc2NyaWJlZCBjaGFsbGVuZ2Ugc2l6ZXMgdG8gdGhlIEFQSSBhbG9uZyB3aXRoIG90aGVyIHZhbGlkIHBhcmFtZXRlcnMgPGJyIC8+Mi4gRXhwZWN0IEFQSSB0byByZXR1cm4gdGhpcyBkZWZpbmUgYXMgcmV0dXJuIHZhbHVlIGVhY2ggdGltZSAgICAgICAgICAgfCAxLiBDaGFsbGVuZ2Vfc2l6ZSBpcyB6ZXJvIDxiciAvPjIuIEludmFsaWQgY2hhbGxlbmdlIHNpemUgYmV0d2VlbiAwIGFuZCAzMiA8YnIgLz4zLiBJbnZhbGlkIGNoYWxsZW5nZSBzaXplIGJldHdlZW4gMzIgYW5kIDY0ICA8YnIgLz40LiBDaGFsbGVuZ2Vfc2l6ZSBpcyBncmVhdGVyIHRoYW4gTUFYX0NIQUxMRU5HRV9TSVpFIHwKLXwgICAgICAgICAgIHwgUFNBX0FUVEVTVF9FUlJfVE9LRU5fQlVGRkVSX09WRVJGTE9XIHwgcHNhX2luaXRpYWxfYXR0ZXN0X2dldF90b2tlbigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBQcm92aWRlIGRlc2NyaWJlZCB0YWtlbiBzaXplIHRvIHRoZSBBUEkgYWxvbmcgd2l0aCBvdGhlciB2YWxpZCBwYXJhbWV0ZXJzIDxiciAvPjIuIEV4cGVjdCBBUEkgdG8gcmV0dXJuIHRoaXMgZGVmaW5lIGFzIHJldHVybiB2YWx1ZSBlYWNoIHRpbWUgICAgICAgICAgICAgICAgfCBQYXNzIHRoZSB0b2tlbl9zaXplIHdoaWNoIGxlc3MgdGhhbiBhY3R1YWwvcmVxdWlyZWQgdG9rZW4gc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICB8IFBTQV9BVFRFU1RfRVJSX1RPS0VOX0JVRkZFUl9PVkVSRkxPVyB8IHBzYV9pbml0aWFsX2F0dGVzdF9nZXRfdG9rZW4oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gUHJvdmlkZSBkZXNjcmliZWQgdGFrZW4gc2l6ZSB0byB0aGUgQVBJIGFsb25nIHdpdGggb3RoZXIgdmFsaWQgcGFyYW1ldGVycyA8YnIgLz4yLiBFeHBlY3QgQVBJIHRvIHJldHVybiB0aGlzIGRlZmluZSBhcyByZXR1cm4gdmFsdWUgZWFjaCB0aW1lICAgICAgICAgICAgICAgIHwgMS4gVG9rZW5fc2l6ZSBhcyB6ZXJvPGJyIC8+Mi4gVG9rZW5fc2l6ZSBsZXNzIHRoYW4gY2hhbGxlbmdlIHNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgIHwgUFNBX0FUVEVTVF9FUlJfSU5JVF9GQUlMRUQgICAgICAgICAgIHwgcHNhX2luaXRpYWxfYXR0ZXN0X2dldF90b2tlbigpPGJyIC8+cHNhX2luaXRpYWxfYXR0ZXN0X2dldF90b2tlbl9zaXplKCkgfCBDYW4ndCBzaW11bGF0ZS4gVGVzdCBjYW4ndCBnZW5lcmF0ZSBzdGltdWx1cyB3aGVyZSBhdHRlc3RhdGlvbiBpbml0aWFsaXNhdGlvbiBmYWlscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICB8IFBTQV9BVFRFU1RfRVJSX0NMQUlNX1VOQVZBSUxBQkxFICAgICB8IHBzYV9pbml0aWFsX2F0dGVzdF9nZXRfdG9rZW4oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FuJ3Qgc2ltdWxhdGUuIFRlc3QgY2FuJ3QgZ2VuZXJhdGUgc3RpbXVsdXMgd2hlcmUgY2xhaW0gY2FuIHVuYXZhaWxhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgfCBQU0FfQVRURVNUX0VSUl9HRU5FUkFMICAgICAgICAgICAgICAgfCBwc2FfaW5pdGlhbF9hdHRlc3RfZ2V0X3Rva2VuKCk8YnIgLz5wc2FfaW5pdGlhbF9hdHRlc3RfZ2V0X3Rva2VuX3NpemUoKSB8IENhbid0IHNpbXVsYXRlLiBUZXN0IGNhbid0IGdlbmVyYXRlIHN0aW11bHVzIHdoZXJlIHVuZXhwZWN0ZWQgZXJyb3IgaGFwcGVuZWQgZHVyaW5nIEFQSSBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kb2NzL3BzYV9jcnlwdG9fdGVzdGxpc3QubWQgYi9hcGktdGVzdHMvZG9jcy9wc2FfY3J5cHRvX3Rlc3RsaXN0Lm1kCmluZGV4IDEyZGVmOTkuLjk4M2JhMzYgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kb2NzL3BzYV9jcnlwdG9fdGVzdGxpc3QubWQKKysrIGIvYXBpLXRlc3RzL2RvY3MvcHNhX2NyeXB0b190ZXN0bGlzdC5tZApAQCAtMjQsOCArMjQsOCBAQAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEluY29ycmVjdCBrZXkgZGF0YSBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUgICAgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggaW52YWxpZCBrZXkgaGFuZGxlIHNob3VsZCByZXR1cm4gdGhpcyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIEludmFsaWQga2V5IHNsb3QgPC9icj4gMi4gWmVybyBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9PQ0NVUElFRF9TTE9UICAgICAgICAgfCBQYXNzIHRoZSBrZXkgc2xvdCB0byBzdG9yZSBkYXRhIHdoaWNoIGlzIGFscmVhZHkgb2NjdXBpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQWxyZWFkeSBvY2N1cGllZCBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFICAgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGludmFsaWQga2V5IGhhbmRsZSBzaG91bGQgcmV0dXJuIHRoaXMgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBEZXN0cm95ZWQga2V5IGhhbmRsZSA8L2JyPiAyLiBaZXJvIGFzIGtleSBoYW5kbGU8L2JyPiAzLiBVbmFsbG9jYXRlZCBrZXkgaGFuZGxlICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfQUxSRUFEWV9FWElTVFMgICAgICAgICB8IFBhc3MgdGhlIGtleSBzbG90IHRvIHN0b3JlIGRhdGEgd2hpY2ggaXMgYWxyZWFkeSBvY2N1cGllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFscmVhZHkgb2NjdXBpZWQga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ZXN0X2MwMDMgfCBwc2FfZXhwb3J0X2tleSAgICAgICAgICAgICB8IEV4cG9ydCBhIGtleSBpbiBiaW5hcnkgZm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gMTYgQnl0ZSBBRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbCB1c2FnZSBvZiB0aGUga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiAyNCBCeXRlIEFFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CkBAIC0zOCwxMCArMzgsMTIgQEAKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LiBFQyBQdWJsaWMga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwLiBFQyBrZXlwYWlyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBidWZmZXIgc2l6ZSBsZXNzIHRoYW4gcmVxdWlyZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTGVzcyBidWZmZXIgc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX05PVF9QRVJNSVRURUQgICAgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIHdpdGgga2V5IHBvbGljeSBhcyB2ZXJpZnkgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBLZXkgcG9saWN5IGFzIFBTQV9LRVlfVVNBR0VfVkVSSUZZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUgICAgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggaW52YWxpZCBwYXJhbWV0ZXIgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIFplcm8ga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW52YWxpZCBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBVbmFsbG9jYXRlZCBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIERlc3Ryb3llZCBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9CQURfU1RBVEUgICAgICAgICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBrZXkgcG9saWN5IHRoYXQgY2Fubm90IGJlIGV4cG9ydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW52YWxpZCBrZXkgcG9saWN5IHVzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0VNUFRZX1NMT1QgICAgICAgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGVtcHR5IGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFbXB0eSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QgICAgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggZW1wdHkga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVtcHR5IGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ZXN0X2MwMDQgfCBwc2FfZXhwb3J0X3B1YmxpY19rZXkgICAgICB8IEV4cG9ydCBhIHB1YmxpYyBrZXkgb3IgdGhlIHB1YmxpYyBwYXJ0IG9mIGEga2V5IHBhaXIgaW4gYmluYXJ5IGZvcm1hdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gMjA0OCBSU0EgcHVibGljIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbCB1c2FnZSBvZiB0aGUga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiAyMDQ4IFJTQSBrZXlwYWlyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5IGFuZCBzZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICB8IDMuIEVDIFB1YmxpYyBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CkBAIC01MCwxOCArNTIsMTYgQEAKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDYuIEdldCBiYXNpYyBtZXRhZGF0YSBhYm91dCBhIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNy4gRXhwb3J0IGEga2V5IGluIGJpbmFyeSBmb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LiBDaGVjayBpZiBvcmlnaW5hbCBrZXkgZGF0YSBtYXRjaGVzIHdpdGggdGhlIGV4cG9ydGVkIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiAxNiBCeXRlIEFFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsIHVzYWdlIG9mIHRoZSBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIDI0IEJ5dGUgQUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgYW5kIHNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgIHwgMy4gMzIgQnl0ZSBBRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiBERVMgNjQgYml0IGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUuIFRyaXBsZSBERVMgMi1LZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBHZXQgYmFzaWMgbWV0YWRhdGEgYWJvdXQgYSBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNi4gVHJpcGxlIERFUyAzLUtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcuIEV4cG9ydCBhIGtleSBpbiBiaW5hcnkgZm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOC4gQ2hlY2sgaWYgb3JpZ2luYWwga2V5IGRhdGEgbWF0Y2hlcyB3aXRoIHRoZSBleHBvcnRlZCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBidWZmZXIgc2l6ZSBsZXNzIHRoYW4gcmVxdWlyZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTGVzcyBidWZmZXIgc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFICAgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGludmFsaWQgcGFyYW1ldGVyIHNob3VsZCByZXR1cm4gdGhpcyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBaZXJvIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEludmFsaWQga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBpbnZhbGlkICBwYXJhbWV0ZXIgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gREVTIDY0IGJpdCBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBUcmlwbGUgREVTIDItS2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIFRyaXBsZSBERVMgMy1LZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9OT1RfUEVSTUlUVEVEICAgICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCB3aXRoIGtleSBwb2xpY3kgYXMgdmVyaWZ5IHNob3VsZCByZXR1cm4gdGhpcyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS2V5IHBvbGljeSBhcyBQU0FfS0VZX1VTQUdFX1ZFUklGWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFICAgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGludmFsaWQga2V5IGhhbmRsZSBzaG91bGQgcmV0dXJuIHRoaXMgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBaZXJvIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIFVuYWxsb2NhdGVkIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gRGVzdHJveWVkIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0JBRF9TVEFURSAgICAgICAgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGtleSBwb2xpY3kgdGhhdCBjYW5ub3QgYmUgZXhwb3J0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnZhbGlkIGtleSBwb2xpY3kgdXNhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QgICAgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggZW1wdHkga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVtcHR5IGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ZXN0X2MwMDUgfCBwc2FfZGVzdHJveV9rZXkgICAgICAgICAgICB8IERlc3Ryb3kgYSBrZXkgYW5kIHJlc3RvcmUgdGhlIHNsb3QgdG8gaXRzIGRlZmF1bHQgc3RhdGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gMTYgQnl0ZSBBRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSB0byBhIGRlZmF1bHQgdGhhdCBmb3JiaWRzIGFsbCB1c2FnZSBvZiB0aGUga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiAyNCBCeXRlIEFFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5IGFuZCBzZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICB8IDMuIDMyIEJ5dGUgQUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CkBAIC04Niw4ICs4Niw5IEBACiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOS4gRUMgUHVibGljIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMC4gRUMga2V5cGFpciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUgICAgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggaW52YWxpZCBwYXJhbWV0ZXIgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIFplcm8ga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW52YWxpZCBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0VNUFRZX1NMT1QgICAgICAgICAgICB8IFBhc3MgdGhlIGtleSBzbG90IG51bWJlciB3aGljaCBoYXMgdGhlIGtleSB0eXBlIGFzIG5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFbXB0eSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIFVuYWxsb2NhdGVkIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gRGVzdHJveWVkIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUICAgICAgICAgICAgfCBQYXNzIHRoZSBrZXkgc2xvdCBudW1iZXIgd2hpY2ggaGFzIHRoZSBrZXkgdHlwZSBhcyBub25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFbXB0eSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTk8gVEVTVCAgIHwgcHNhX2tleV9wb2xpY3lfc2V0X3VzYWdlICAgfCBTZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVm9pZCBmdW5jdGlvbi4gQ292ZXJlZCBhcyBwYXJ0IG9mIG90aGVyIGNhc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgS2V5IFBvbGljaWVzICAgICAgICAgICAgICAgICB8IHRlc3RfYzAwNyB8IHBzYV9zZXRfa2V5X3BvbGljeSAgICAgICAgIHwgU2V0IHRoZSB1c2FnZSBwb2xpY3kgb24gYSBrZXkgc2xvdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiAxNiBCeXRlIEFFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfApAQCAtMTAwLDEwICsxMDEsMTAgQEAKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LiBUcmlwbGUgREVTIDMtS2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDkuIEVDIFB1YmxpYyBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAuIEVDIGtleXBhaXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFICAgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGludmFsaWQgcGFyYW1ldGVyIHNob3VsZCByZXR1cm4gdGhpcyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbnZhbGlkIGtleSBwb2xpY3kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUgICAgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggaW52YWxpZCBwYXJhbWV0ZXIgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIFVuYWxsb2NhdGVkIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gWmVybyBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBJbnZhbGlkIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfT0NDVVBJRURfU0xPVCAgICAgICAgIHwgUGFzcyB0aGUga2V5IHNsb3QgdG8gc3RvcmUgZGF0YSB3aGljaCBpcyBhbHJlYWR5IG9jY3VwaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFscmVhZHkgb2NjdXBpZWQga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gRGVzdHJveWVkIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0FMUkVBRFlfRVhJU1RTICAgICAgICB8IFBhc3MgdGhlIGtleSBzbG90IHRvIHN0b3JlIGRhdGEgd2hpY2ggaXMgYWxyZWFkeSBvY2N1cGllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbHJlYWR5IG9jY3VwaWVkIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGVzdF9jMDA4IHwgcHNhX2dldF9rZXlfcG9saWN5ICAgICAgICAgfCBHZXQgdGhlIHVzYWdlIHBvbGljeSBmb3IgYSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIDE2IEJ5dGUgQUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwgdXNhZ2Ugb2YgdGhlIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gMjQgQnl0ZSBBRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSBhbmQgc2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgfCAzLiAzMiBCeXRlIEFFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfApAQCAtMTE1LDcgKzExNiw3IEBACiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LiBSZXRyaWV2ZSB0aGUgYWxnb3JpdGhtIGZpZWxkIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOS4gRUMgUHVibGljIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwLiBNYWtlIHN1cmUgdGhleSBtYXRjaCB0aGUgb3JpZ2luYWwgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMC4gRUMga2V5cGFpciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUgICAgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggaW52YWxpZCBwYXJhbWV0ZXIgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIFplcm8ga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW52YWxpZCBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBEZXN0cm95ZWQga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGVzdF9jMDA5IHwgcHNhX2FsbG9jYXRlX2tleSAgICAgICAgICAgfCBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIFZvbGF0aWxlIGtleXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgdG8gYSBkZWZhdWx0IHRoYXQgZm9yYmlkcyBhbGwgdXNhZ2Ugb2YgdGhlIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfApAQCAtMTI3LDcgKzEyOCw3IEBACiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfTUVNT1JZICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBtdWx0aXBsZSB0aW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ZXN0X2MwMTAgfCBwc2FfZ2V0X2tleV9saWZldGltZSAgICAgICB8IFJldHJpZXZlIHRoZSBsaWZldGltZSBvZiBhIGtleSBzbG90LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGVzdGluZyBvbmx5IHZvbGF0aWxlIGtleXMgYXMgb3RoZXIga2V5IHR5cGVzIGFyZSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3RfYzAxMCB8IHBzYV9nZXRfa2V5X2xpZmV0aW1lICAgICAgIHwgUmV0cmlldmUgdGhlIGxpZmV0aW1lIG9mIGEga2V5IHNsb3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUZXN0aW5nIG9ubHkgdm9sYXRpbGUga2V5cyBhbmQgcGVyc2lzdGFuY2Uga2V5IHR5cGVzIHdpbGwgYmUgc3VwcG9ydGVkIGluIGZ1dHVyZSByZWxlYXNlICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlIHRvIGEgZGVmYXVsdCB0aGF0IGZvcmJpZHMgYWxsIHVzYWdlIG9mIHRoZSBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgYW5kIHNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfApAQCAtMTM2LDcgKzEzNyw2IEBACiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3LiBHZXQgdGhlIGxpZmV0aW1lIG9mIGEga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBaZXJvIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEludmFsaWQga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gRW1wdHkga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbnZhbGlkIGtleSBwb2xpY3kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCBNZXNzYWdlIEF1dGhlbnRpY2F0aW9uIENvZGVzIHwgdGVzdF9jMDExIHwgcHNhX2hhc2hfc3RhcnQgICAgICAgICAgICAgfCBTdGFydCBhIG11bHRpcGFydCBoYXNoIG9wZXJhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIE1EMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBTdGFydCBhIG11bHRpcGFydCBoYXNoIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gTUQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKQEAgLTE2Miw4ICsxNjIsOCBAQAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcuIFNIQTI1NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOC4gU0hBMzg0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LiBTSEE1MTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCAgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGhvdXQgY2FsbGluZyB0aGUgcHNhX2hhc2hfc3RhcnQoKSBzaG91bGQgcmV0dXJuIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEluYWN0aXZlIG9wZXJhdGlvbiBoYW5kbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBjb21wbGV0ZWQgb3BlcmF0aW9uIGhhbmRsZSBzaG91bGQgcmV0dXJuIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ29tcGxldGVkIG9wZXJhdGlvbiBoYW5kbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0JBRF9TVEFURSAgICAgICAgICAgICB8IDEuIENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRob3V0IGNhbGxpbmcgdGhlIHBzYV9oYXNoX3N0YXJ0KCkgc2hvdWxkIHJldHVybiBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbmFjdGl2ZSBvcGVyYXRpb24gaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggY29tcGxldGVkIG9wZXJhdGlvbiBoYW5kbGUgc2hvdWxkIHJldHVybiBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENvbXBsZXRlZCBvcGVyYXRpb24gaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ZXN0X2MwMTMgfCBwc2FfaGFzaF92ZXJpZnkgICAgICAgICAgICB8IEZpbmlzaCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIGhhc2ggb2YgYSBtZXNzYWdlIGFuZCBjb21wYXJlIGl0IHdpdGggYW4gZXhwZWN0ZWQgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gTUQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIFN0YXJ0IGEgbXVsdGlwYXJ0IGhhc2ggb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBNRDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gQWRkIGEgbWVzc2FnZSBmcmFnbWVudCB0byBhIG11bHRpcGFydCBoYXNoIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIE1ENSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CkBAIC0xNzMsNyArMTczLDggQEAKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3LiBTSEEyNTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDguIFNIQTM4NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOS4gU0hBNTEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGluYWN0aXZlIG9wZXJhdGlvbiBoYW5kbGUgc2hvdWxkIHJldHVybiBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbmFjdGl2ZSBvcGVyYXRpb24gaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfQkFEX1NUQVRFICAgICAgICAgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggaW5hY3RpdmUgb3BlcmF0aW9uIGhhbmRsZSBzaG91bGQgcmV0dXJuIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIEluYWN0aXZlIG9wZXJhdGlvbiBoYW5kbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBpbnZhbGlkIG9wZXJhdGlvbiBoYW5kbGUgc2hvdWxkIHJldHVybiBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW52YWxpZCBvcGVyYXRpb24gaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfU0lHTkFUVVJFICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGluY29ycmVjdCBleHBlY3RlZCB2YWx1ZSBzaG91bGQgcmV0dXJuIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbmNvcnJlY3QgZXhwZWN0ZWQgaGFzaCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEluY29ycmVjdCBleHBlY3RlZCBoYXNoIGxlbmd0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ZXN0X2MwMTQgfCBwc2FfaGFzaF9maW5pc2ggICAgICAgICAgICB8IEZpbmlzaCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIGhhc2ggb2YgYSBtZXNzYWdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gTUQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKQEAgLTIwNiwxNSArMjA3LDE2IEBACiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3LiBDaGVjayBpZiBrZXkgdHlwZSBhbmQga2V5IGxlbmd0aCBtYXRjaGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDguIEV4cG9ydCBhIGtleSBpbiBiaW5hcnkgZm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOS4gQ2hlY2sgaWYgdGhlIG1ldGFkYXRhIG1hdGNoZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSAgICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBpbnZhbGlkIGtleSBzbG90IHNob3VsZCByZXR1cm4gdGhpcyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW52YWxpZCBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFICAgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIHVuYWxsb2NhdGVkIGtleSBzbG90IHNob3VsZCByZXR1cm4gdGhpcyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVbmFsbG9jYXRlZCBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUgICAgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggemVybyBhcyBrZXkgc2xvdCBzaG91bGQgcmV0dXJuIHRoaXMgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFplcm8gYXMga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSAgICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBkZXN0cm95ZWQga2V5IHNsb3Qgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzdHJveWVkIGFzIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIE51bGwgZXh0cmEgYW5kIE5vbi1aZXJvIGV4dHJhIHNpemUgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOdWxsIGV4dHJhIGFuZCBOb24tWmVybyBleHRyYSBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfT0NDVVBJRURfU0xPVCAgICAgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggcHJlLW9jY3VwaWVkIGtleSBzbG90IHNob3VsZCByZXR1cm4gdGhpcyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFByZS1vY2N1cGllZCBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9BTFJFQURZX0VYSVNUUyAgICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBwcmUtb2NjdXBpZWQga2V5IHNsb3Qgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQcmUtb2NjdXBpZWQga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgICAgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB0byBnZW5lcmF0ZSBvbmx5IHB1YmxpYyBrZXkgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBLZXkgdHlwZSBhcyBwdWJsaWMga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGVzdF9jMDE3IHwgcHNhX2dlbmVyYXRlX3JhbmRvbSAgICAgICAgfCBHZW5lcmF0ZSByYW5kb20gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIDE2IEJ5dGUgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBHZW5lcmF0ZSByYW5kb20gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gMjQgQnl0ZSBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIENoZWNrIHRoYXQgaWYgZ2VuZXJhdGVkIGRhdGEgYXJlIE5vbi1aZXJvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiAzMiBCeXRlIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIDY0IEJ5dGUgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBHZW5lcmF0ZSByYW5kb20gYnl0ZXMgUnVuIHNldmVyYWwgdGltZXMsIHRvIGVuc3VyZSB0aGF0IGV2ZXJ5IG91dHB1dCBieXRlIHdpbGwgYmUgbm9uemVybyBhdCBsZWFzdCBvbmNlICAgICAgIHwgMi4gMjQgQnl0ZSBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIENoZWNrIHRoYXQgbm8gbW9yZSB0aGFuIGJ5dGVzIGhhdmUgYmVlbiBvdmVyd3JpdHRlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiAzMiBCeXRlIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNC4gQ2hlY2sgdGhhdCBldmVyeSBieXRlIHdhcyBjaGFuZ2VkIHRvIG5vbnplcm8gYXQgbGVhc3Qgb25jZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIDY0IEJ5dGUgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gMTI4IEJ5dGUgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiAyNTYgQnl0ZSBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcuIDUxMiBCeXRlIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CkBAIC0yMzEsOSArMjMzLDEwIEBACiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LiBHZW5lcmF0ZSByYW5kb20gYnl0ZXMgZm9yIHJlbWFpbmluZyBjYXBhY2l0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOS4gUmVxdWVzdCBtYXhpbXVtIGNhcGFjaXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwLiBDaGVjayB0aGF0IGlmIGdlbmVyYXRlZCBkYXRhIGFyZSBub24temVybyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEuIEdlbmVyYXRlIHJhbmRvbSBieXRlcyBhbmQgY2hlY2sgdGhhdCBpdCBmYWlscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfQ0FQQUNJVFkgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBvdXRwdXQgc2l6ZSBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgY2FwYWNpdHkgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgICAgICAgICAgICAgIHwgb3V0cHV0IHNpemUgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IGNhcGFjaXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9DQVBBQ0lUWSB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGNhcGFjaXR5IGdyZWF0ZXIgdGhhbiB0aGUgYWxsb3dlZCBjYXBhY2l0eSBzaG91bGQgcmV0dXJuIHRoaXMgZXJyb3IgICAgICAgICAgICAgICAgICAgfCByZXF1ZXN0IG1heGltdW0gY2FwYWNpdHkgKzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGVzdF9jMDE5IHwgcHNhX2dlbmVyYXRvcl9nZXRfY2FwYWNpdHkgfCBSZXRyaWV2ZSB0aGUgY3VycmVudCBjYXBhY2l0eSBvZiBhIGdlbmVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIE91dHB1dCBzaXplIGxlc3MgdGhhbiBnZW5lcmF0b3IgY2FwYWNpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfREFUQSAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBvdXRwdXQgc2l6ZSBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgY2FwYWNpdHkgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgICAgICAgICAgICAgIHwgT3V0cHV0IHNpemUgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IGNhcGFjaXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOU1VGRklDSUVOVF9EQVRBICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGNhcGFjaXR5IGdyZWF0ZXIgdGhhbiB0aGUgYWxsb3dlZCBjYXBhY2l0eSBzaG91bGQgcmV0dXJuIHRoaXMgZXJyb3IgICAgICAgICAgICAgICAgICAgfCBSZXF1ZXN0IG1heGltdW0gY2FwYWNpdHkgKzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfQkFEX1NUQVRFICAgICAgICAgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGhvdXQgc2V0dXAgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ZXN0X2MwMTkgfCBwc2FfZ2V0X2dlbmVyYXRvcl9jYXBhY2l0eSB8IFJldHJpZXZlIHRoZSBjdXJyZW50IGNhcGFjaXR5IG9mIGEgZ2VuZXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gT3V0cHV0IHNpemUgbGVzcyB0aGFuIGdlbmVyYXRvciBjYXBhY2l0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBPdXRwdXQgc2l6ZSBlcXVhbCB0byBnZW5lcmF0b3IgY2FwYWNpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5IGFuZCBzZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiBTZXQgdGhlIHVzYWdlIHBvbGljeSBvbiBhIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKQEAgLTI0NCw2ICsyNDcsNyBAQAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOS4gR2VuZXJhdGUgcmFuZG9tIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMC4gUmV0cmlldmUgdGhlIGN1cnJlbnQgY2FwYWNpdHkgb2YgYSBnZW5lcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDExLiBDaGVjayB0aGF0IGl0IGlzIGVxdWFsIHRvIHRoZSByZW1haW5pbmcgY2FwYWNpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfQkFEX1NUQVRFICAgICAgICAgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGhvdXQgc2V0dXAgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ZXN0X2MwMjAgfCBwc2FfZ2VuZXJhdG9yX2ltcG9ydF9rZXkgICB8IENyZWF0ZSBhIHN5bW1ldHJpYyBrZXkgZnJvbSBkYXRhIHJlYWQgZnJvbSBhIGdlbmVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gMTYgQnl0ZSBBRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiAzMiBCeXRlIEFFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5IGFuZCBzZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CkBAIC0yNjksMTIgKzI3MywxMiBAQAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjMuIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEgbmV3IGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyNC4gQ3JlYXRlIGEgc3ltbWV0cmljIGtleSBmcm9tIGRhdGEgcmVhZCBmcm9tIGEgZ2VuZXJhdG9yIGZvciB0aGUgc29tZSBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENoZWNrIHRoYXQgaXQgZmFpbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5TVUZGSUNJRU5UX0NBUEFDSVRZIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggb3V0cHV0IGdyZWF0ZXIgdGhhbiBjYXBhY2l0eSBzaG91bGQgcmV0dXJuIHRoaXMgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE91dHB1dCBncmVhdGVyIHRoYW4gY2FwYWNpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlNVRkZJQ0lFTlRfREFUQSB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIG91dHB1dCBncmVhdGVyIHRoYW4gY2FwYWNpdHkgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPdXRwdXQgZ3JlYXRlciB0aGFuIGNhcGFjaXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIHB1YmxpYyBrZXkgYWxnb3JpdGhtIHNob3VsZCByZXR1cm4gdGhpcyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBSU0EgcHVibGljIGtleSA8L2JyPjIuSW52YWxpZCBrZXkgc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUgICAgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggaW52YWxpZCBhcmd1bWVudHMgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIEludmFsaWQga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gWmVybyBhcyBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfT0NDVVBJRURfU0xPVCAgICAgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggYWxyZWFkeSBvY2N1cGllZCBrZXkgc2xvdCBzaG91bGQgcmV0dXJuIHRoaXMgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFByZS1vY2N1cGllZCBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9BTFJFQURZX0VYSVNUUyAgICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBhbHJlYWR5IG9jY3VwaWVkIGtleSBzbG90IHNob3VsZCByZXR1cm4gdGhpcyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUHJlLW9jY3VwaWVkIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3RfYzAyMSB8IHBzYV9nZW5lcmF0b3JfYWJvcnQgICAgICAgIHwgQWJvcnQgYSBnZW5lcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBBYm9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIE11bHRpcGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgYW5kIHNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgIHwgMy4gQ2FsbGluZyBnZW5lcmF0b3IgZnVuY3Rpb25zIGFmdGVyIGFib3J0IHNob3VsZCBmYWlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKQEAgLTI5MCwxMCArMjk0LDEzIEBACiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1LiBTZXQgdXAgYSBrZXkgZGVyaXZhdGlvbiBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDYuIFJldHJpZXZlIHRoZSBjdXJyZW50IGNhcGFjaXR5IG9mIGEgZ2VuZXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNy4gTWFrZSBzdXJlIHRoYXQgdGhlIGNhcGFjaXR5IGlzIHNhbWUgYXMgaW5wdXQgY2FwYWNpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9JTlZBTElEX0FSR1VNRU5UICAgICAgICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBpbnZhbGlkIGFyZ3VtZW50IHNob3VsZCByZXR1cm4gdGhpcyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW52YWxpZCBhbGdvcml0aG0gMi4gVW5zdXBwb3J0ZWQgZ2VuZXJhdG9yIGNhcGFjaXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0lOVkFMSURfQVJHVU1FTlQgICAgICAgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGludmFsaWQgYXJndW1lbnQgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbnZhbGlkIGFsZ29yaXRobSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIFVuc3VwcG9ydGVkIGdlbmVyYXRvciBjYXBhY2l0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gVW5zdXBwb3J0ZWQga2V5IHR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX05PVF9QRVJNSVRURUQgICAgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGluY29ycmVjdCB1c2FnZSBzaG91bGQgcmV0dXJuIHRoaXMgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbmNvcnJlY3QgdXNhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCAgICAgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggdW5zdXBwb3J0ZWQga2V5IGRlcml2YXRpb24gYWxnb3JpdGhtIHNob3VsZCByZXR1cm4gdGhpcyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIFVuc3VwcG9ydGVkIGtleSBkZXJpdmF0aW9uIGFsZ29yaXRobSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSAgICAgICAgfCBDYWxsaW5nIHRoaXMgZnVuY3RvaW4gd2loIGluY29ycmVjdCBrZXkgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW52YWxpZCBrZXkgaGFuZGxlIDwvYnI+Mi4gWmVybyBhcyBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0VNUFRZX1NMT1QgICAgICAgICAgICB8IENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGVtcHR5IGtleSBzbG90IHNob3VsZCByZXR1cm4gdGhpcyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFbXB0eSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QgICAgICAgIHwgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggZW1wdHkga2V5IHNsb3Qgc2hvdWxkIHJldHVybiB0aGlzIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVtcHR5IGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8IEtleSBwb2xpY2llcyAgICAgICAgICAgICAgICAgfCB0ZXN0X2MwMjMgfCBwc2Ffa2V5X3BvbGljeV9nZXRfdXNhZ2UgICB8IFJldHJpZXZlIHRoZSB1c2FnZSBmaWVsZCBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gRW5jcnlwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBEZWNyeXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5IGFuZCBzZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICB8IDMuIEV4cG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CkBAIC0zMTAsNyArMzE3LDcgQEAKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDguIENoZWNrIGlmIHRoZSBjaXBoZXIgdGV4dCBpcyBleHBlY3RlZCBsZW5ndGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIERFUyBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gVW5zdXBwb3J0ZWQgYWxnb3JpdGhtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0VNUFRZX1NMT1QgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFbXB0eSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVtcHR5IGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gWmVybyBhcyBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbnZhbGlkIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfTk9UX1BFUk1JVFRFRCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIFNtYWxsIG91dHB1dCBidWZmZXIgc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CkBAIC0zMjUsNyArMzMyLDggQEAKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDguIENoZWNrIGlmIHRoZSBwbGFpbiB0ZXh0IGlzIGV4cGVjdGVkIGxlbmd0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIERFUyBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gVW5zdXBwb3J0ZWQgYWxnb3JpdGhtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0VNUFRZX1NMT1QgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFbXB0eSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVtcHR5IGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW52YWxpZCB0YWcgbGVuZ3RoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBaZXJvIGFzIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEludmFsaWQga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9OT1RfUEVSTUlUVEVEICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gU21hbGwgb3V0cHV0IGJ1ZmZlciBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKQEAgLTMzOCwxMiArMzQ2LDE1IEBACiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBTdGFydCBhIG11bHRpcGFydCBNQUMgY2FsY3VsYXRpb24gb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiAxNiBCeXRlIEFFUyAtIEdNQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEluY29tcGF0aWJsZSBITUFDIGZvciBDTUFDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gQmFkIGFsZ29yaXRobSAodW5rbm93biBNQUMgYWxnb3JpdGhtKTxiciAvPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBCYWQgYWxnb3JpdGhtICh1bmtub3duIE1BQyBhbGdvcml0aG0pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIFRydW5jYXRlZCBNQUMgdG9vIHNtYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9OT1RfUEVSTUlUVEVEICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW52YWxpZCB1c2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0VNUFRZX1NMT1QgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFbXB0eSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIEludmFsaWQga2V5IHR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9ET0VTX05PVF9FWElTVCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRW1wdHkga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbnZhbGlkIGtleSB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIFRydW5jYXRlZCBNQUMgdG9vIGxhcmdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBCYWQgYWxnb3JpdGhtIChub3QgYSBNQUMgYWxnb3JpdGhtKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIEludmFsaWQga2V5IGhhbmRsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gWmVybyBhcyBrZXkgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3RfYzAyNyB8IHBzYV9tYWNfdXBkYXRlICAgICAgICAgICAgIHwgQWRkIGEgbWVzc2FnZSBmcmFnbWVudCB0byBhIG11bHRpcGFydCBNQUMgb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLjY0IEJ5dGUgSE1BQyBTSEEyNTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIDE2IEJ5dGUgQUVTIC0gQ01BQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgYW5kIHNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgIHwgMy4gMzIgQnl0ZSBITUFDIFNIQTUxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKQEAgLTM3OSwxNCArMzkwLDE4IEBACiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3LiBDaGVjayBmb3IgdGhlIGV4cGVjdGVkIHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiAxNiBCeXRlIEFFUyAtIEdNQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEluY29tcGF0aWJsZSBITUFDIGZvciBDTUFDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gQmFkIGFsZ29yaXRobSAodW5rbm93biBNQUMgYWxnb3JpdGhtKTxiciAvPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBCYWQgYWxnb3JpdGhtICh1bmtub3duIE1BQyBhbGdvcml0aG0pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIFRydW5jYXRlZCBNQUMgdG9vIHNtYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9OT1RfUEVSTUlUVEVEICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW52YWxpZCB1c2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0VNUFRZX1NMT1QgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFbXB0eSBzbG90IGFzIGlucHV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIEludmFsaWQga2V5IHR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9ET0VTX05PVF9FWElTVCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRW1wdHkgc2xvdCBhcyBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbnZhbGlkIGtleSB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIFRydW5jYXRlZCBNQUMgdG9vIGxhcmdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gQmFkIGFsZ29yaXRobSAodW5rbm93biBNQUMgYWxnb3JpdGhtKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbnZhbGlkIGtleSBoYW5kbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIFplcm8gYXMga2V5IGhhbmRsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ZXN0X2MwMzAgfCBwc2FfbWFjX3ZlcmlmeV9maW5pc2ggICAgICB8IEZpbmlzaCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIE1BQyBvZiBhIG1lc3NhZ2UgYW5kIGNvbXBhcmUgaXQgd2l0aCBhbiBleHBlY3RlZCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gSE1BQyBTSEEgMjI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBITUFDIFNIQSAyNTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy5BbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgYW5kIHNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICB8IDMuIEhNQUMgU0hBIDUxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgYW5kIHNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgIHwgMy4gSE1BQyBTSEEgNTEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiBITUFDIFNIQSAyMjQgKHRydW5jYXRlZCB0byA4IEJ5dGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUuIENNQUMgQUVTIDEyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBTdGFydCBhIG11bHRpcGFydCBNQUMgY2FsY3VsYXRpb24gb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKQEAgLTQxNCwxNCArNDI5LDE0IEBACiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gVW5rbm93biBjaXBoZXIgYWxnb3JpdGhtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBJbmNvbXBhdGlibGUga2V5IEFSQzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIE5vdCBhIGNpcGhlciBhbGdvcml0aG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW52YWxpZCBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBaZXJvIGFzIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIFJTQSBwdWJsaWMga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gUlNBIGtleXBhaXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LiBFQyBQdWJsaWMga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcuIEVDIGtleXBhaXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9FTVBUWV9TTE9UICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRW1wdHkga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBSU0EgcHVibGljIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIFJTQSBrZXlwYWlyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNC4gRUMgUHVibGljIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1LiBFQyBrZXlwYWlyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVtcHR5IGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9OT1RfUEVSTUlUVEVEICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW5jb3JyZWN0IHVzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBVbmFsbG9jYXRlZCBrZXkgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIFplcm8gYXMga2V5IGhhbmRsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ZXN0X2MwMzMgfCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAgICB8IFNldCB0aGUga2V5IGZvciBhIG11bHRpcGFydCBzeW1tZXRyaWMgZGVjcnlwdGlvbiBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gSE1BQyBTSEEgMjI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBITUFDIFNIQSAyNTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5IGFuZCBzZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICB8IDMuIEhNQUMgU0hBIDUxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CkBAIC00MzMsMTMgKzQ0OCwxMyBAQAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIFVua25vd24gY2lwaGVyIGFsZ29yaXRobSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gSW5jb21wYXRpYmxlIGtleSBBUkM0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBOb3QgYSBjaXBoZXIgYWxnb3JpdGhtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEludmFsaWQga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gWmVybyBhcyBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiBSU0EgcHVibGljIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUuIFJTQSBrZXlwYWlyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNi4gRUMgUHVibGljIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3LiBFQyBrZXlwYWlyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfRU1QVFlfU0xPVCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVtcHR5IGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gUlNBIHB1YmxpYyBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBSU0Ega2V5cGFpciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQuIEVDIFB1YmxpYyBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNS4gRUMga2V5cGFpciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBVbmFsbG9jYXRlZCBrZXkgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIFplcm8gYXMga2V5IGhhbmRsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9ET0VTX05PVF9FWElTVCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRW1wdHkga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX05PVF9QRVJNSVRURUQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnZhbGlkIHVzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGVzdF9jMDM0IHwgcHNhX2NpcGhlcl9nZW5lcmF0ZV9pdiAgICAgfCBHZW5lcmF0ZSBhbiBJViBmb3IgYSBzeW1tZXRyaWMgZW5jcnlwdGlvbiBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIDE2IEJ5dGUgQUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gMjQgQnl0ZSBBRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKQEAgLTQ1Myw2ICs0NjgsNyBAQAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAuIEdlbmVyYXRpbmcgYW4gSVYgZm9yIGEgc3ltbWV0cmljIGVuY3J5cHRpb24gb3BlcmF0aW9uIHVzaW5nIHRoZSBzYW1lIG9wZXJhdG9yIHNob3VsZCBmYWlsICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gQUVTIC0gc21hbGwgaXYgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBERVMgLSBzbWFsbCBpdiBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfQkFEX1NUQVRFICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIENvbXBsZXRlZCBvcGVyYXRpb24gaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ZXN0X2MwMzUgfCBwc2FfY2lwaGVyX3NldF9pdiAgICAgICAgICB8IFNldCB0aGUgSVYgZm9yIGEgc3ltbWV0cmljIGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvbiBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gMTYgQnl0ZSBBRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiAyNCBCeXRlIEFFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5IGFuZCBzZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICB8IDMuIDMyIEJ5dGUgQUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CkBAIC00NjQsNiArNDgwLDcgQEAKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDkuIENoZWNrIHRoYXQgaWYgZ2VuZXJhdGVkIGl2IGFyZSB6ZXJvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAuIFNldHRpbmcgYW4gSVYgZm9yIGEgc3ltbWV0cmljIGVuY3J5cHRpb24vZGVjcnlwdGlvbiBvcGVyYXRpb24gdXNpbmcgdGhlIHNhbWUgb3BlcmF0b3Igc2hvdWxkIGZhaWwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gQUVTIC0gc21hbGwgaXYgYnVmZmVyIDIuIERFUyAtIHNtYWxsIGl2IGJ1ZmZlciAzLiBBRVMgLSBsYXJnZSBpdiBidWZmZXIgNC4gREVTIC0gbGFyZ2UgaXYgYnVmZmVyIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0JBRF9TVEFURSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBDb21wbGV0ZWQgb3BlcmF0aW9uIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGVzdF9jMDM2IHwgcHNhX2NpcGhlcl91cGRhdGUgICAgICAgICAgfCBFbmNyeXB0IG9yIGRlY3J5cHQgYSBtZXNzYWdlIGZyYWdtZW50IGluIGFuIGFjdGl2ZSBjaXBoZXIgb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIEFFUyBDQkNfTk9fUEFERElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gQUVTIENCQ19OT19QQURESU5HIChTaG9ydCBpbnB1dCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSBhbmQgc2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgfCAzLiBBRVMgQ0JDX1BLQ1M3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfApAQCAtNDc2LDYgKzQ5Myw3IEBACiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMC4gQ2hlY2sgaWYgdGhlIG91dHB1dCBkYXRhIG1hdGNoZXMgdGhlIGV4cGVjdGVkIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDExLiBFbmNyeXB0IG9yIGRlY3J5cHQgYSBtZXNzYWdlIGZyYWdtZW50IGluIGFuIGludmFsaWQgY2lwaGVyIG9wZXJhdGlvbiBzaG91bGQgZmFpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfQkFEX1NUQVRFICAgICAgICAgICAgIHwgRW5jcnlwdCBvciBkZWNyeXB0IGEgbWVzc2FnZSBmcmFnbWVudCBpbiBhbiBpbnZhbGlkIGNpcGhlciBvcGVyYXRpb24gc2hvdWxkIGZhaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludmFsaWQgb3BlcmF0aW9uIGFzIGlucHV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU21hbGwgb3V0cHV0IGJ1ZmZlciBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3RfYzAzNyB8IHBzYV9jaXBoZXJfZmluaXNoICAgICAgICAgIHwgRmluaXNoIGVuY3J5cHRpbmcgb3IgZGVjcnlwdGluZyBhIG1lc3NhZ2UgaW4gYSBjaXBoZXIgb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBBRVMgQ0JDX05PX1BBRERJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEFFUyBDQkNfTk9fUEFERElORyAoU2hvcnQgaW5wdXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgYW5kIHNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgIHwgMy4gQUVTIENCQ19QS0NTNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKQEAgLTQ4OSw2ICs1MDcsOCBAQAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEuIENoZWNrIGlmIHRoZSBvdXRwdXQgZGF0YSBtYXRjaGVzIHRoZSBleHBlY3RlZCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMi4gRmluaXNoIGVuY3J5cHRpbmcgb3IgZGVjcnlwdGluZyBhIG1lc3NhZ2UgdXNpbmcgYW4gaW52YWxpZCBvcGVyYXRpb24gc2hvdWxkIGZhaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0JBRF9TVEFURSAgICAgICAgICAgICB8IEVuY3J5cHQgb3IgZGVjcnlwdCBhIG1lc3NhZ2UgZnJhZ21lbnQgaW4gYW4gaW52YWxpZCBjaXBoZXIgb3BlcmF0aW9uIHNob3VsZCBmYWlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnZhbGlkIG9wZXJhdGlvbiBhcyBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfQlVGRkVSX1RPT19TTUFMTCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNtYWxsIG91dHB1dCBidWZmZXIgc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQUVTIENCQ19OT19QQURESU5HIChTaG9ydCBpbnB1dCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3RfYzAzOCB8IHBzYV9jaXBoZXJfYWJvcnQgICAgICAgICAgIHwgQWJvcnQgYSBjaXBoZXIgb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBFbmNyeXB0IC0gQUVTIENCQ19OT19QQURESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW5pdGlhbGl6ZSBhIGtleSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEVuY3J5cHQgLSBBRVMgQ0JDX1BLQ1M3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciBhIHRyYW5zaWVudCBrZXkgYW5kIHNldCB0aGUgc3RhbmRhcmQgZmllbGRzIG9mIGEgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgIHwgMy4gRW5jcnlwdCAtIEFFUyBDVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKQEAgLTUxMiwxMiArNTMyLDEzIEBACiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LiBEZWNyeXB0IHRoZSBjaXBoZXIgdGV4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDkuIENoZWNrIGlmIHRoZSBvdXRwdXQgbGVuZ3RoIG1hdGNoZXMgd2l0aCB0aGUgaW5wdXQgbGVuZ3RoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAuIENoZWNrIGlmIHRoZSBvdXRwdXQgbWF0Y2hlcyB3aXRoIHRoZSBnaXZlbiBpbnB1dCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gU21hbGwgb3V0cHV0IGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbnZhbGlkIGtleSB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEludmFsaWQgYWxnb3JpdGhtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gSW52YWxpZCBrZXkgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbnZhbGlkIGtleSBzbG90IDwvYnI+Mi4gWmVybyBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfTk9UX1BFUk1JVFRFRCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludmFsaWQgdXNhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9FTVBUWV9TTE9UICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRW1wdHkga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFbXB0eSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfQlVGRkVSX1RPT19TTUFMTCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNtYWxsIG91dHB1dCBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gVW5hbGxvY2F0ZWQga2V5IGhhbmRsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBaZXJvIGFzIGtleSBoYW5kbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGVzdF9jMDQwIHwgcHNhX2FzeW1tZXRyaWNfZGVjcnlwdCAgICAgfCBEZWNyeXB0IGEgc2hvcnQgbWVzc2FnZSB3aXRoIGEgcHJpdmF0ZSBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW5pdGlhbGl6ZSB0aGUgUFNBIGNyeXB0byBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIFJTQSBLRVlQQUlSIFBLQ1MxVjE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbml0aWFsaXplIGEga2V5IHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gUlNBIEtFWVBBSVIgT0FFUCBTSEEyNTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIEFsbG9jYXRlIGEga2V5IHNsb3QgZm9yIGEgdHJhbnNpZW50IGtleSBhbmQgc2V0IHRoZSBzdGFuZGFyZCBmaWVsZHMgb2YgYSBwb2xpY3kgc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgfCAzLiBSU0EgS0VZUEFJUiBPQUVQIFNIQTI1NiB3aXRoIGxhYmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfApAQCAtNTI5LDcgKzU1MCw3IEBACiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0FSR1VNRU5UICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW52YWxpZCBrZXkgdHlwZSAoUlNBIHB1YmxpYyBrZXkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBJbnZhbGlkIGFsZ29yaXRobSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMuIEludmFsaWQga2V5IHR5cGUgKEFFUyBLZXkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9FTVBUWV9TTE9UICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRW1wdHkga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFbXB0eSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfTk9UX1BFUk1JVFRFRCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludmFsaWQgdXNhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9JTlZBTElEX0hBTkRMRSAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gSW52YWxpZCBrZXkgc2xvdCA8L2JyPjIuIFplcm8ga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0JVRkZFUl9UT09fU01BTEwgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTbWFsbCBvdXRwdXQgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfApAQCAtNTQ2LDcgKzU2Nyw3IEBACiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gSW52YWxpZCBrZXkgdHlwZSAoQUVTIEtleSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiBXcm9uZyBoYXNoIHNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIEludmFsaWQga2V5IHNsb3QgPC9icj4yLiBaZXJvIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9FTVBUWV9TTE9UICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRW1wdHkga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFbXB0eSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfTk9UX1BFUk1JVFRFRCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludmFsaWQgdXNhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU21hbGwgb3V0cHV0IGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3RfYzA0MiB8IHBzYV9hc3ltbWV0cmljX3ZlcmlmeSAgICAgIHwgVmVyaWZ5IHRoZSBzaWduYXR1cmUgYSBoYXNoIG9yIHNob3J0IG1lc3NhZ2UgdXNpbmcgYSBwdWJsaWMga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8IDEuIEluaXRpYWxpemUgdGhlIFBTQSBjcnlwdG8gbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBSU0EgS0VZUEFJUiBQS0NTMVYxNSBSQVcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfApAQCAtNTYxLDEwICs1ODIsNDYgQEAKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0lOVkFMSURfSEFORExFICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbnZhbGlkIGtleSBzbG90IDwvYnI+Mi4gWmVybyBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9TSUdOQVRVUkUgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFdyb25nIHNpZ25hdHVyZSBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgV3Jvbmcgc2lnbmF0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0VNUFRZX1NMT1QgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFbXB0eSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfRE9FU19OT1RfRVhJU1QgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVtcHR5IGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9OT1RfUEVSTUlUVEVEICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW52YWxpZCB1c2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX05PVF9TVVBQT1JURUQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnZhbGlkIGtleSB0eXBlIChBRVMgS2V5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfQlVGRkVSX1RPT19TTUFMTCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNtYWxsIG91dHB1dCBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ZXN0X2MwNDMgfCBwc2Ffa2V5X2FncmVlbWVudCAgICAgICAgICB8ICBTZXQgdXAgYSBrZXkgYWdyZWVtZW50IG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gRUNESCBTRUNQMjU2UjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBFQ0RIIFNFQ1AzODRSMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5IGFuZCBzZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiBTZXQgdGhlIGtleSBkYXRhIGJhc2VkIG9uIGtleSB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUuIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNi4gSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3LiBTZXQgdXAgYSBrZXkgYWdyZWVtZW50IG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDguIFJldHJpZXZlIHRoZSBjdXJyZW50IGNhcGFjaXR5IG9mIGEgZ2VuZXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOS4gQ2hlY2sgaWYgdGhlIGdlbmVyYXRvciBjYXBhY2l0eSBtYXRjaGVzIHdpdGggdGhlIGV4cGVjdGVkIGNhcGFjaXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMC4gUmVhZCBzb21lIGRhdGEgZnJvbSBhIGdlbmVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDExLiBDaGVjayBpZiB0aGUgb3V0cHV0IG1hdGNoZXMgd2l0aCB0aGUgZXhwZWN0ZWQgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIE5vdCBhIGtleSBhZ3JlZW1lbnQgYWxnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gUHVibGljIGtleSBvbiBkaWZmZXJlbnQgY3VydmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiBQdWJsaWMga2V5IGluc3RlYWQgb2YgcHJpdmF0ZSBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIEludmFsaWQga2V5IHNsb3QgPC9icj4yLiBaZXJvIGtleSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9ET0VTX05PVF9FWElTVCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRW1wdHkga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX05PVF9QRVJNSVRURUQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnZhbGlkIHVzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludmFsaWQga2V5IHR5cGUgKEFFUyBLZXkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ZXN0X2MwNDQgfCBwc2FfY29weV9rZXkgICAgICAgICAgICAgICB8ICBDb3B5IGtleSBtYXRlcmlhbCBmcm9tIG9uZSBsb2NhdGlvbiB0byBhbm90aGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgfCAxLiBJbml0aWFsaXplIHRoZSBQU0EgY3J5cHRvIGxpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gMTYgQnl0ZSBBRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuIEluaXRpYWxpemUgYSBrZXkgcG9saWN5IHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyLiAyNCBCeXRlIEFFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4gQWxsb2NhdGUgYSBrZXkgc2xvdCBmb3IgYSB0cmFuc2llbnQga2V5IGFuZCBzZXQgdGhlIHN0YW5kYXJkIGZpZWxkcyBvZiBhIHBvbGljeSBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICB8IDMuIDMyIEJ5dGUgQUVTIHdpdGggY29uc3RyYWludHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0LiBTZXQgdGhlIGtleSBkYXRhIGJhc2VkIG9uIGtleSB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNC4gMjA0OCBSU0EgcHVibGljIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUuIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1LiAyMDQ4IFJTQSBrZXkgcGFpciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNi4gSW1wb3J0IHRoZSBrZXkgZGF0YSBpbnRvIHRoZSBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDYuIERFUyA2NCBiaXQga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3LiBBbGxvY2F0ZSBhIGtleSBzbG90IGZvciB0aGUgdGFyZ2V0IGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNy4gVHJpcGxlIERFUyAyLUtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDguIFNldCB0aGUgdXNhZ2UgcG9saWN5IG9uIGEga2V5IHNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LiBUcmlwbGUgREVTIDMtS2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOS4gTWFrZSBhIGNvcHkgb2YgYSBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDkuIEVDIFB1YmxpYyBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMC4gRGVzdHJveSB0aGUgc291cmNlIHRvIGVuc3VyZSB0aGF0IHRoaXMgZG9lc24ndCBhZmZlY3QgdGhlIHRhcmdldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAuIEVDIGtleSBwYWlyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDExLiBFeHBvcnQgYSBrZXkgaW4gYmluYXJ5IGZvcm1hdCBhbmQgY2hlY2sgaWYgaXQgbWF0Y2hlcyB3aXRoIHNvdXJjZSBtYXRlcmlhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMS4gSW5jb21wYXRpYmxlIHRhcmdldCBwb2xpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9BUkdVTUVOVCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIEluY29tcGF0aWJsZSB0YXJnZXQgcG9saWN5KHNvdXJjZSBhbmQgdGFyZ2V0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMi4gSW5jb21wYXRpYmxlIGNvbnN0cmFpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBVbmV4cG9ydCBzb3VyY2Uga2V5IHVzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0FfRVJST1JfSU5WQUxJRF9IQU5ETEUgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIFVuYWxsb2NhdGVkIHRhcmdldCBrZXkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQV9FUlJPUl9ET0VTX05PVF9FWElTVCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRW1wdHkgc291cmNlIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBX0VSUk9SX0FMUkVBRFlfRVhJU1RTICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUYXJnZXQgYWxyZWFkeSBjb250YWluaW5nIGtleSBtYXRlcmlhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCiAKICMjIExpY2Vuc2UKIEFybSBQU0EgdGVzdCBzdWl0ZSBpcyBkaXN0cmlidXRlZCB1bmRlciBBcGFjaGUgdjIuMCBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2RvY3MvcHNhX2lwY190ZXN0bGlzdC5tZCBiL2FwaS10ZXN0cy9kb2NzL3BzYV9pcGNfdGVzdGxpc3QubWQKaW5kZXggZmQzMjQyNS4uMjMxMzQyMiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2RvY3MvcHNhX2lwY190ZXN0bGlzdC5tZAorKysgYi9hcGktdGVzdHMvZG9jcy9wc2FfaXBjX3Rlc3RsaXN0Lm1kCkBAIC0xLDEwNiArMSwxMjIgQEAKICMgUFNBIEZGIElQQyBUZXN0Y2FzZSBjaGVja2xpc3QgCiAKLXwgVGVzdHMgICAgICAgICAgICB8IFNjZW5hcmlvIFJ1bGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2xpZW50LSBTZXJ2ZXIgVGVzdCBGdW5jdGlvbnMgUGFpciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGVzdCBBbGdvcml0aG0vQ29tbWVudHMvVGVzdCBMaW1pdGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBIEFQSSBDcm9zc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSXMgc2NlbmFyaW8gaW1wbGVtZW50ZWQgaW4gdGhpcyByZWxlYXNlPyB8Ci18LS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAotfCB0ZXN0X2kwMDEgICAgICAgIHwgMS4gcHNhX2ZyYW1ld29ya192ZXJzaW9uKCk6IFJldHJpZXZlIHRoZSB2ZXJzaW9uIG9mIHRoZSBQU0EgRnJhbWV3b3JrIEFQSSB0aGF0IGlzIGltcGxlbWVudGVkLiBNYW5pZmVzdCBmaWVsZC0gcHNhX2ZyYW1ld29ya192ZXJzaW9uOiBWZXJzaW9uIG9mIHRoZSBQU0EgRmlybXdhcmUgRnJhbWV3b3JrIHNwZWNpZmljYXRpb24gdGhpcyBtYW5pZmVzdCBjb25mb3JtcyB0by4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfZnJhbWV3b3JrX3ZlcnNpb24oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHRoZSBwc2FfZnJhbWV3b3JrX3ZlcnNpb24oKSBBUEkgYXQgYm90aCBzaWRlIFNQRSBhbmQgTlNQRSBhbmQgY29tcGFyZSB0aGUgcmV0dXJuIHZhbHVlIHdpdGggUFNBX0ZSQU1FV09SS19WRVJTSU9OLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfZnJhbWV3b3JrX3ZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICB8IDEuIHBzYV92ZXJzaW9uKCkgcmV0dXJucyBQU0FfVkVSU0lPTl9OT05FIHdoZW4gdGhlIFJvVCBTZXJ2aWNlIGlzIG5vdCBpbXBsZW1lbnRlZCwgb3IgdGhlIGNhbGxlciBpcyBub3QgcGVybWl0dGVkIHRvIGFjY2VzcyB0aGUgc2VydmljZSBPUiByZXR1cm4gPiAwIHdpdGggdGhlIG1pbm9yIHZlcnNpb24gb2YgdGhlIGltcGxlbWVudGVkIFJvVCBTZXJ2aWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3ZlcnNpb24oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gUGFzcyB1bi1pbXBsZW1lbnRlZCBTSUQgYW5kIGV4cGVjdHMgUFNBX1ZFUlNJT05fTk9ORSBhcyByZXR1cm4gdmFsdWUuIDxiciAvPjIuIENhbGwgdG8gQVBJIGZyb20gTlNQRSB3aXRoIGEgU0lEIHdobyBkb2Vzbid0IHByb3ZpZGUgc2VydmljZSB0byBOU1BFIGFuZCBleHBlY3RzIFBTQV9WRVJTSU9OX05PTkUgYXMgcmV0dXJuIHZhbHVlLiA8YnIgLz4zLiBQYXNzIFNJRCB3aG8gaXMgaW1wbGVtZW50ZWQgYW5kIHByb3ZpZGVzIHNlcnZpY2UgdG8gTlNQRSBhbmQgZXhwZWN0ICBtaW5vciBudW1iZXIoPjApIG9mIGdpdmVuIFJvVCBzZXJ2aWNlIGFzIHJldHVybi4gPGJyIC8+UGVyZm9ybSBhbGwgYWJvdmUgY2hlY2tzIGZyb20gU1BFIHRvby4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX3ZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfaTAwMiAgICAgICAgfCAxLiBwc2FfY29ubmVjdCgpIHJldHVybnMgdGhlIFBTQV9DT05ORUNUSU9OX0JVU1kgd2hlbiBSb1QgU2VydmljZSBjYW5ub3QgbWFrZSB0aGUgY29ubmVjdGlvbiBhdCB0aGUgbW9tZW50ICh0cmFuc2llbnQgZXJyb3IpLiA8YnIgLz4yLiBwc2FfY29ubmVjdCgpIHJldHVybnMgdGhlIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQgd2hlbiBSb1QgU2VydmljZSBoYXMgcmVmdXNlZCB0aGUgY29ubmVjdGlvbiA8YnIgLz4zLiBwc2Ffd2FpdCgpIHJldHVybnMgdGhlIFNlY3VyZSBQYXJ0aXRpb24gaW50ZXJydXB0IHNpZ25hbHMgdGhhdCBoYXZlIGJlZW4gYXNzZXJ0ZWQgZnJvbSBhIHN1YnNldCBvZiBzaWduYWxzIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIuIFJldHVybnMgPiAwIHdoZW4gYXQgbGVhc3Qgb25lIHNpZ25hbCBpcyBhc3NlcnRlZCA8YnIgLz40LiBwc2FfZ2V0KCk6R2V0IHRoZSBtZXNzYWdlIHdoaWNoIGNvcnJlc3BvbmRzIHRvIGEgZ2l2ZW4gUm9UIFNlcnZpY2Ugc2lnbmFsIGFuZCByZW1vdmUgdGhlIG1lc3NhZ2UgZnJvbSB0aGUgcXVldWUuICA8YnIgLz41LiBwc2FfZ2V0KCkgcmV0dXJucyBQU0FfU1VDQ0VTUyB3aGVuICptc2cgd2lsbCBjb250YWluIHRoZSBkZWxpdmVyZWQgbWVzc2FnZS4gPGJyIC8+Ni4gVGhlIHR5cGUgbWVtYmVyIG9mIHRoZSBwc2FfbXNnX3Qgb2JqZWN0IHNob3VsZCByZXR1cm4gUFNBX0lQQ19DT05ORUNUIGZvciBhIG5ldyBjb25uZWN0aW9uIHJlcXVlc3QgZm9sbG93aW5nIGEgcHNhX2dldCgpIGNhbGwgdG8gcHNhX2Nvbm5lY3QoKSBhbmQgbXNnLmhhbmRsZSBtdXN0IGJlIHBvc2l0aXZlLiA8YnIgLz43LiBwc2FfcmVwbHkoKTogIElmIHRoZSBtZXNzYWdlIHR5cGUgaXMgUFNBX0lQQ19DT05ORUNUIHRoZW4gc2VydmVyIGNhbiByZWplY3QgdGhlIGNvbm5lY3Rpb24gYnkgc2VuZGluZyBQU0FfQ09OTkVDVElPTl9SRUZVU0VEIChwZXJtYW5lbnQgZXJyb3IpIG9yIFBTQV9DT05ORUNUSU9OX0JVU1kgKHRyYW5zaWVudCBlcnJvcikgc3RhdHVzIGNvZGUuIDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X2Nvbm5lY3Rpb25fYnVzeV9hbmRfcmVqZWN0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIENsaWVudCB0cmllcyB0byBjb25uZWN0IHRvIFJPVCBzZXJ2aWNlIHVzaW5nIHBzYV9jb25uZWN0KCkgPGJyIC8+Mi4gUm9UIHNlcnZpY2UgY2hlY2tzIHRoZSBkZWxpdmVyeSBvZiAgUFNBX0lQQ19DT05ORUNUIG1lc3NhZ2UgdHlwZSBhbmQgcG9zaXRpdmUgaGFuZGxlIHZhbHVlIHJldHVybmVkIGJ5IHBzYV9nZXQoKSAgPGJyIC8+My4gUm9UIHNlcnZpY2UgcmVqZWN0cyB0aGUgY29ubmVjdGlvbiBieSBleGVjdXRpbmcgcHNhX3JlcGx5KGhhbmRsZSxQU0FfQ09OTkVDVElPTl9CVVNZKSA8YnIgLz40LiBDbGllbnQgdHJpZXMgdG8gY29ubmVjdCB0byBzYW1lIFJPVCBzZXJ2aWNlIHVzaW5nIHBzYV9jb25uZWN0KCkgYWdhaW4gPGJyIC8+NS4gVGhpcyB0aW1lLCBSb1Qgc2VydmljZSByZWplY3RzIHRoZSBjb25uZWN0aW9uIGJ5IGV4ZWN1dGluZyBwc2FfcmVwbHkoaGFuZGxlLFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpIDxiciAvPlBlcmZvcm0gYWxsIGFib3ZlIHN0ZXBzIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jb25uZWN0LHBzYV93YWl0LHBzYV9nZXQscHNhX3JlcGx5ICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgMS4gcHNhX2Nvbm5lY3QoKTogV2hlbiBTSUQgaXMgaW1wbGVtZW50ZWQgYW5kIGNsaWVudCBpcyBwZXJtaXR0ZWQgdG8gYWNjZXNzIHRoZSBzZXJ2aWNlLCBTUE0gZGVsaXZlcnMgYSBQU0FfSVBDX0NPTk5FQ1QgbWVzc2FnZSBmcm9tIHRoZSBjbGllbnQgdG8gdGhlIFNlY3VyZSBQYXJ0aXRpb24gdGhhdCBpbXBsZW1lbnRzIHRoZSBSb1QgU2VydmljZSBhbmQgcG9zaXRpdmUgaGFuZGxlIGlzIHJldHVybmVkIHRvIGNsaWVudC4gPGJyIC8+Mi4gcHNhX2dldCgpOkdldCB0aGUgbWVzc2FnZSB3aGljaCBjb3JyZXNwb25kcyB0byBhIGdpdmVuIFJvVCBTZXJ2aWNlIHNpZ25hbCBhbmQgcmVtb3ZlIHRoZSBtZXNzYWdlIGZyb20gdGhlIHF1ZXVlLiA8YnIgLz4zLiBwc2FfZ2V0KCkgcmV0dXJucyBQU0FfU1VDQ0VTUyB3aGVuICptc2cgd2lsbCBjb250YWluIHRoZSBkZWxpdmVyZWQgbWVzc2FnZSA8YnIgLz40LiBwc2FfZ2V0KCk6VGhlIHR5cGUgbWVtYmVyIG9mIHRoZSBwc2FfbXNnX3Qgb2JqZWN0IHNob3VsZCByZXR1cm4gUFNBX0lQQ19DT05ORUNUIGZvciBhIG5ldyBjb25uZWN0aW9uIHJlcXVlc3QgZm9sbG93aW5nIGEgcHNhX2dldCgpIGNhbGwgdG8gcHNhX2Nvbm5lY3QoKSBhbmQgbXNnLmhhbmRsZSBtdXN0IGJlIHBvc2l0aXZlLiA8YnIgLz41LiBwc2FfZ2V0KCk6IFRoZSB0eXBlIG1lbWJlciBvZiB0aGUgcHNhX21zZ190IG9iamVjdCBzaG91bGQgcmV0dXJuIFBTQV9JUENfRElTQ09OTkVDVCBmb3IgYSBuZXcgY29ubmVjdGlvbiByZXF1ZXN0IGZvbGxvd2luZyBhIHBzYV9nZXQoKSBjYWxsIHRvIHBzYV9jbG9zZSgpIGFuZCBtc2cuaGFuZGxlIG11c3QgYmUgcG9zaXRpdmUuIDxiciAvPjYuIHBzYV9yZXBseSgpOiAgSWYgdGhlIG1lc3NhZ2UgdHlwZSBpcyBQU0FfSVBDX0NPTk5FQ1QgdGhlbiBzZXJ2ZXIgY2FuIGFjY2VwdCB0aGUgY29ubmVjdGlvbiBieSBzZW5kaW5nIFBTQV9TVUNDRVNTIHN0YXR1cyBjb2RlLiBJZiB0aGUgbWVzc2FnZSB0eXBlIGlzIFBTQV9JUENfRElTQ09OTkVDVCB0aGVuIHRoZSBzdGF0dXMgY29kZSBpcyBpZ25vcmVkLiA8YnIgLz43LiBwc2FfY2xvc2UoKTogQ2xvc2VzIGEgY29ubmVjdGlvbiB0byBhIFJvVCBTZXJ2aWNlLiBTZW5kcyB0aGUgUFNBX0lQQ19ESVNDT05ORUNUIG1lc3NhZ2UgdG8gdGhlIFJvVCBTZXJ2aWNlLiAgVGhpcyBmdW5jdGlvbiB3aWxsIGhhdmUgbm8gZWZmZWN0IGlmIGNhbGxlZCB3aXRoIHRoZSBudWxsIGhhbmRsZS4gPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9hY2NlcHRfYW5kX2Nsb3NlX2Nvbm5lY3QoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLkNsaWVudCB0cmllcyB0byBjb25uZWN0IHRvIFJPVCBzZXJ2aWNlIDxiciAvPiAyLiBSb1Qgc2VydmljZSBjaGVja3MgdGhlIGRlbGl2ZXJ5IG9mICBQU0FfSVBDX0NPTk5FQ1QgbWVzc2FnZSB0eXBlIGFuZCBwb3NpdGl2ZSBoYW5kbGUgdmFsdWUgcmV0dXJuIGJ5IHBzYV9nZXQoKSA8YnIgLz4zLiBSb1Qgc2VydmljZSAgYWNjZXB0cyB0aGUgY29ubmVjdGlvbiBieSBleGVjdXRpbmcgcHNhX3JlcGx5KC4uLCBQU0FfQ09OTkVDVElPTl9BQ0NFUFRFRCkuICA8YnIgLz40LiBDbGllbnQgY2FsbHMgdGhlIHBzYV9jbG9zZSB3aXRoIFBTQV9OVUxMX0hBTkRMRSBhbmQgbGF0ZXIgaXQgY2xvc2VzIHRoZSBjb25uZWN0aW9uIHVzaW5nIHBzYV9jbG9zZSgpIHdpdGggYWN0dWFsIGhhbmRsZSB2YWx1ZSA8YnIgLz41LiBSb1Qgc2VydmljZSBjaGVja3MgdGhlIGRlbGl2ZXJ5IG9mICBQU0FfSVBDX0RJU0NPTk5FQ1QgbWVzc2FnZSB0eXBlLCBjaGVja3MgaGFuZGxlIHZhbHVlIGVxYXVsIHRvIE5VTEwgcmV0dXJuZWQgYnkgcHNhX2dldCgpIGFuZCBjb21wbGV0ZXMgdGhlIFBTQV9JUENfRElTQ09OTkVDVCBieSBleGVjdXRpbmcgcHNhX3JlcGx5KCkgLiA8YnIgLz5QZXJmb3JtIGFsbCBhYm92ZSBzdGVwcyBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY29ubmVjdCxwc2Ffd2FpdCxwc2FfZ2V0LHBzYV9yZXBseSxwc2FfY2xvc2UgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICB8IEZvbGxvd2luZyBhcmUgYWxsb3dlZCBtaW5vciB2ZXJzaW9uIGNvbmRpdGlvbiB0byBwc2FfY29ubmVjdCgpOiA8YnIgLz4gIDEuIFZlcnNpb24gcG9saWN5IGlzIG5vdCBtZW50aW9uZWQgYW5kIHJlcXVlc3RlZCB2ZXJzaW9uIGlzIDEgd2hpY2ggaXMgZGVmYXVsdCBtaW5pbXVtIHZlcnNpb24gIDxiciAvPjIuIFZlcnNpb24gcG9saWN5IGlzIFNUUklDVCBhbmQgcmVxdWVzdGVkIHZlcnNpb24gZXF1YWxzIG1pbmltdW0gdmVyc2lvbiAgPGJyIC8+My4gVmVyc2lvbiBwb2xpY3kgaXMgcmVsYXhlZCBhbmQgcmVxdWVzdGVkIHZlcnNpb24gaXMgc21hbGxlciB0aGFuIHRoZSBtaW5pbXVtIHZlcnNpb24gIDxiciAvPiA0LiBWZXJzaW9uIHBvbGljeSBpcyByZWxheGVkIGFuZCByZXF1ZXN0ZWQgdmVyc2lvbiBpcyBldXFhbCB0byB0aGUgbWluaW11bSB2ZXJzaW9uICA8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfY29ubmVjdF93aXRoX2FsbG93ZWRfbWlub3JfdmVyc2lvbl9wb2xpY3koKSAgICAgICAgICAgICAgICAgIHwgQ2xpZW50IHRyaWVzIGNvbm5lY3RpbmcgUk9UIHNlcnZpY2Ugb2YgZm9sbG93aW5nIHByb3BlcnRpZXMgYW5kIGV4cGVjdHMgY29ubmVjdGlvbiB0byBlc3RhYmxpc2g6IDxiciAvPiAgIC0gVmVyc2lvbiBwb2xpY3kgaXMgbm90IG1lbnRpb25lZCBhbmQgcmVxdWVzdGVkIHZlcnNpb24gaXMgMSB3aGljaCBpcyBkZWZhdWx0IG1pbmltdW0gdmVyc2lvbiAgPGJyIC8+ICAgLSBWZXJzaW9uIHBvbGljeSBpcyBTVFJJQ1QgYW5kIHJlcXVlc3RlZCB2ZXJzaW9uIGVxdWFscyBtaW5pbXVtIHZlcnNpb24gIDxiciAvPiAgIC0gVmVyc2lvbiBwb2xpY3kgaXMgcmVsYXhlZCBhbmQgcmVxdWVzdGVkIHZlcnNpb24gaXMgc21hbGxlciB0aGFuIHRoZSBtaW5pbXVtIHZlcnNpb24gIDxiciAvPiAgLSBWZXJzaW9uIHBvbGljeSBpcyByZWxheGVkIGFuZCByZXF1ZXN0ZWQgdmVyc2lvbiBpcyBlcXVhbCB0byB0aGUgbWluaW11bSB2ZXJzaW9uICA8YnIgLz5QZXJmb3JtIGFsbCBhYm92ZSBzdGVwcyBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2Nvbm5lY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgfCAxLiBwc2FfY2FsbCgpOiBUaGUgdmFsaWQgcHNhX2NhbGwsIG1ha2UgU1BNIHRvIHNlbmQgUFNBX0lQQ19DQUxMIG1zZy50eXBlIHRvIHRoZSBSb1Qgc2VydmljZWUgcGFydGl0aW9uIGFuZCB0aGUgc3VjY2Vzc2Z1bCBjYWxsIHNob3VsZCByZXR1cm4gPj0wIGhhbmRsZSB2YWx1ZS4gIDxiciAvPjIuIHBzYV9jYWxsKCkgcmVjZWl2ZXMgcmV0dXJuIHZhbHVlID49IDAgZm9yIFJvVC1zcGVjaWZpYyByZXR1cm4gY29kZSA8YnIgLz4zLiBwc2FfY2FsbCgpIHJlY2VpdmUgcmV0dXJuIHZhbHVlICA8IDAgZm9yIFJvVC1zcGVjaWZpYyBlcnJvciBjb2RlIDxiciAvPjQuIHBzYV9yZXBseSgpOiAgSWYgdGhlIG1lc3NhZ2UgdHlwZSBpcyBQU0FfSVBDX0NBTEwgIGFuZCBST1Qgc2VydmljZSB3YW50IHRvIGVuZCBjYWxsIHdpdGggc3VjY2VzcyB0aGVuIHRoZSByZXR1cm4gY29kZSBtdXN0IGJlIFBTQV9TVUNDRVNTIG9yIGFuZCBwb3NpdGl2ZSBpbnRlZ2VycyBhcmUgdXNlZCB0byBpbmRpY2F0ZSBSb1QgU2VydmljZSBzcGVjaWZpYyByZXN1bHQgdmFsdWVzKHRoaXMgbXVzdCBiZSByZXBvcnRlZCB0byBjbGllbnQpLiBBbGwgb3RoZXIgcmV0dXJuIGNvZGVzIChJTlQzMl9NSU4rMTI4IHRvIC0xKSBhcmUgcmVwb3J0ZWQgdG8gdGhlIGNsaWVudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9jYWxsX3dpdGhfYWxsb3dlZF9zdGF0dXNfY29kZSgpICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIENsaWVudCBjb25uZWN0cyB0byBSb1Qgc2VydmljZSA8YnIgLz4yLiBDbGllbnQgc2VuZHMgbWVzc2FnZSB1c2luZyBwc2FfY2FsbCgpIDxiciAvPjMuICBSb1Qgc2VydmljZSBjaGVja3MgdGhlIGRlbGl2ZXJ5IG9mICBQU0FfSVBDX0NBTEwgbWVzc2FnZSB0eXBlIGFuZCBwb3NpdGl2ZSBoYW5kbGUgdmFsdWUgIHJldHVybiBieSBwc2FfZ2V0KCkgIDxiciAvPjQuIFJvVCBzZXJ2aWNlIGVuZHMgdGhlIGNhbGwgdXNpbmcgcHNhX3JlcGx5KHN0YXR1c19jb2RlKSA8YnIgLz41LiBDbGllbnQgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUgb2YgcHNhX2NhbGwoKSBhbmQgQ2xpZW50IGNsb3NlcyB0aGUgY29ubmVjdGlvblJlcGVhdCAoMSkgdG8gKDUpIGZvciBkaWZmZXJlbnQgc3RhdHVzIGNvZGUsIFNVQ0NFU1MsICt2ZSwgLXZlLi4gPGJyIC8+UGVyZm9ybSBhbGwgYWJvdmUgc3RlcHMgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jYWxsLHBzYV9yZXBseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgMS4gQSBtc2cuY2xpZW50X2lkIHRoYXQgaGFzIGEgcG9zaXRpdmUgdmFsdWUgaW5kaWNhdGVzIHRoYXQgdGhlIGNsaWVudCBpcyBpbiB0aGUgU1BFIGFuZCB0aGlzIHRoZSBTZWN1cmUgUGFydGl0aW9uIElEIG9mIHRoZSBjbGllbnQuIEEgbmVnYXRpdmUgY2xpZW50X2lkIGluZGljYXRlcyB0aGF0IHRoZSBjbGllbnQgaXMgaW4gdGhlIE5TUEUuICA8YnIgLz4yLiBDbGllbnRfaWQgaXMgdmFsaWQgZHVyaW5nIFBTQV9JUENfQ09OTkVDVCwgUFNBX0lQQ19DQUxMIGFuZCBQU0FfSVBDX0RJU0NPTk5FQ1QgbXNnIHR5cGUuIDxiciAvPjMuIE1hbmlmZXN0IFBhcmFtZXRlci0gIG5hbWUgKHJlcXVpcmVkLCB1bmlxdWUpIDxiciAvPkEgUGFydGl0aW9uIG11c3QgaGF2ZSBhbiBhbHBoYW51bWVyaWMgbmFtZSBmb3Igc291cmNlIGNvZGUgdG8gZGlyZWN0bHkgcmVmZXIgdG8gYSBzcGVjaWZpYyBQYXJ0aXRpb24uIFRoZSBmb3JtYXQgb2YgdGhlIG5hbWUgbXVzdCBmb2xsb3cgdGhlIHJ1bGVzIG9mIGEgQyBtYWNyby4gIDxiciAvPjQuIE1hbmlmZXN0IFBhcmFtZXRlciAtIGlkIChyZXF1aXJlZCwgdW5pcXVlKSA8YnIgLz5JdCBtdXN0IGJlIHJlcHJlc2VudGVkIGJ5IGEgaGV4YWRlY2ltYWwgc3RyaW5nLiBUaGUgU2VjdXJlIFBhcnRpdGlvbiBJRCBjYW4gYmUgcmVmZXJlbmNlZCBpbiBTZWN1cmUgUGFydGl0aW9uIHNvdXJjZSBjb2RlIHZpYSB0aGUgc3ltYm9saWMgbmFtZSBzcGVjaWZpZWQgYXMgbmFtZSBhdHRyaWJ1dGUuIFRoZSBzeW1ib2wgbXVzdCBoYXZlIHRoZSB2YWx1ZSBvZiB0aGUgU2VjdXJlIFBhcnRpdGlvbiBJRC4gPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9pZGVudGl0eSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAtIENoZWNrIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBtc2cuY2xpZW50X2lkIGR1cmluZyBQU0FfSVBDX0NPTk5FQ1QsIFBTQV9JUENfQ0FMTCBhbmQgUFNBX0lQQ19ESVNDT05ORUNULiBGb3IgTlNQRSBjb25uZWN0aW9uLCBjbGllbnRfaWQgc2hvdWxkIGJlIDwwIGFuZCBmb3IgU1BFLCBpdCBzaG91bGQgYmUgPjAuICA8YnIgLz5QZXJmb3JtIGFsbCBhYm92ZSBzdGVwcyBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiA8YnIgLz4tIEFjY2VzcyB0aGUgUGFydGl0aW9uIElEIG9mIGNsaWVudCBwYXJ0aXRpb24gYW5kIGNvbXBhcmUgdGhlIHZhbHVlIHdpdGggZXhwZWN0ZWQgSUQgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfZ2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICB8IDEuIHBzYV9jb25uZWN0KCkgd2lsbCByZXR1cm4gdGhlIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQgIE9SIFBTQV9DT05ORUNUSU9OX0JVU1kgd2hlbiB0aGUgU1BNIGhhcyByZWFjaGVkIHRoZSBsaW1pdCBvZiBjb25jdXJyZW50IGNvbm5lY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3Rfc3BtX2NvbmN1cnJlbnRfY29ubmVjdF9saW1pdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRXhlY3V0ZSBwc2FfY29ubmVjdCgpIEFQSSBpbiBhIGxvb3AgdW50aWwgaXQgcmV0dXJucyBQU0FfQ09OTkVDVElPTl9SRUZVU0VEIG9yIFBTQV9DT05ORUNUSU9OX0JVU1kgPGJyIC8+UGVyZm9ybSBhYm92ZSBzdGVwIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2Nvbm5lY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgfCAxLiBwc2Ffd2FpdCgpOiBXaGVuIE1PREUoUFNBX0JMT0NLKSBpcyBvbmUsIHRoZSBmdW5jdGlvbiB3aWxsIGJsb2NrIHRoZSBjYWxsZXIgdW50aWwgb25lIG9mIHRoZSByZXF1ZXN0ZWQgc2lnbmFscyBpcyBhc3NlcnRlZC4gICA8YnIgLz4yLiAgcHNhX3dhaXQoKTogQ2FsbGVycyBtdXN0IHNldCBSRVMgdG8gemVybywgaW1wbGVtZW50YXRpb25zIG11c3QgaWdub3JlIHRoZSB2YWx1ZSBvZiBSRVMuIDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9ibG9ja19iZWhhdmUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIENsaWVudCBjb25uZWN0cyB0byBhIFJvVCBzZXJ2aWNlIG11dGlscGUgdGltZXMuICA8YnIgLz4yLiBSb1Qgc2VydmljZSBwc2Ffd2FpdChQU0FfQkxPQ0t8KE5vbi16ZXJvIHZhbHVlIGZvciB0aW1lb3V0WzMwOjBdKSkgQVBJIGlzIGV4ZWN1dGVkIHdpdGhvdXQgd2hpbGUoMSkgbG9vcC4gIDxiciAvPjMuICBSb1Qgc2VydmljZSBzZXJ2ZXMgdGhlIGNvbm5lY3Rpb25zIGJ5IHJlamVjdGluZyB0aGVtLiAgIDxiciAvPlRoaXMgaXMgYSBzYW5pdHkgY2hlY2ssIGEgc3VjY2Vzc2Z1bCBoYW5kc2hha2luZyBiZXR3ZWVuIGNsaWVudCBhbmQgc2VydmVyIGZvciByZXF1ZXN0ZWQgY29ubmVjdGlvbiAgcmVwcmVzZW50cyBjaGVjayBwYXNzLiA8YnIgLz5QZXJmb3JtIGFib3ZlIHN0ZXBzIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV93YWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgMS4gcHNhX3dhaXQoKTogV2hlbiBNT0RFIGlzIHplcm8sIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBpbW1lZGlhdGVseSB3aXRoIHRoZSBjdXJyZW50IHNpZ25hbCBzdGF0ZSwgd2hpY2ggY2FuIGJlIHplcm8gaWYgbm8gc2lnbmFscyBhcmUgYWN0aXZlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfcG9sbF9iZWhhdmUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBDbGllbnQgY29ubmVjdHMgdG8gYSBSb1Qgc2VydmljZSBtdXRpbHBlIHRpbWVzLiAgPGJyIC8+Mi4gUm9UIHNlcnZpY2UgZXhlY3V0ZXMgcHNhX3dhaXQoUFNBX1BPTEwpICBpbiBhIHdoaWxlIGxvb3AgYW5kIGNoZWNrcyB0aGUgQVBJJ3MgcG9sbGluZyBiZWhhdmlvdXIuICA8YnIgLz4zLiBDYWxsIHBzYV93YWl0KFBTQV9QT0xMKSB3aGVuIG5vIHJlcXVlc3QgaXMgbWFkZSBieSBjbGllbnQgYW5kIGNoZWNrcyB0aGUgcmV0dXJuIHZhbHVlLiA8YnIgLz5QZXJmb3JtIGFib3ZlIHN0ZXBzIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffd2FpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9pMDAzICAgICAgICB8IDEuIFRoZSByZXZlcnNlIGhhbmRsZSBmb3IgYSBjb25uZWN0aW9uIGlzIE5VTEwgdW50aWwgcHNhX3NldF9yaGFuZGxlKCkgaXMgdXNlZC4gIHBzYV9zZXRfcmhhbmRsZSgpIGNhbiBiZSB1c2VkIHRvIGFzc29jaWF0ZSBzb21lIGNhbGxlci1wcm92aWRlZCBwcml2YXRlIGRhdGEgd2l0aCBhIHNwZWNpZmllZCBjbGllbnQgY29ubmVjdGlvbi4gQW5kIFNQTSBtdXN0IHByb3ZpZGUgc2FtZSByaGFuZGxlIGZvciBtc2cucmhhbmRsZSB3aXRoIGFsbCBzdWJzZXF1ZW50IG1lc3NhZ2VzIGRlbGl2ZXJlZCBvbiB0aGlzIGNvbm5lY3Rpb24uIE9uIHN1Y2Nlc3MgdGhlIHJoYW5kbGUgaXMgcmV0YWluZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uIGFuZCBwcm92aWRlZCBpbiBhbGwgZnV0dXJlIG1lc3NhZ2VzIG9uIHRoYXQgY29ubmVjdGlvbiBhcyBwYXJ0IG9mIHRoZSBwc2FfbXNnX3Qgc3RydWN0dXJlLiAgPGJyIC8+Mi4gU2V0dGluZyB0aGUgcmhhbmRsZSBmb3IgYSBjb25uZWN0aW9uIGR1cmluZyBkaXNjb25uZWN0aW9uIGhhcyBubyBvYnNlcnZhYmxlIGVmZmVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3NldF9yaGFuZGxlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gQ2xpZW50IGNvbm5lY3RzIHRvIFJvVCBzZXJ2aWNlIGFuZCBSb1Qgc2VydmljZSBjaGVja3MgdGhlIHZhbHVlIG9mIG1zZy5yaGFubGRlIHZhbHVlIGR1aW5nIFBTQV9JUENfQ09OTkVDVDIuIENsaWVudCBzZW5kIGNhbGwgbXNnIHRvIFJvVCBzZXJ2aWNlIGFuZCBSb1Qgc2VydmljZSBjaGVja3MgdGhlIHZhbHVlIG9mIG1zZy5yaGFubGRlIHZhbHVlIGR1aW5nIFBTQV9JUENfQ09OTkVDVCA8YnIgLz4zLiBST1Qgc2VydmljZSBzZXRzIHRoZSByaGFuZGxlIHdpdGgga25vd24gdmFsdWUuIDxiciAvPjQuIENsaWVudCBzZW5kIGNhbGwgbXNnIHRvIFJvVCBzZXJ2aWNlIGFuZCBSb1Qgc2VydmljZSBub3cgY29tcGFyZSB0aGUgdmFsdWUgb2YgbXNnLnJoYW5uZGxlICB3aXRoIHByZXZpb3VzbHkgc2V0IHZhbHVlIDxiciAvPjUuIFJPVCBzZXJ2aWNlIHNldHMgdGhlIHJoYW5kbGUgd2l0aCBrbm93biB2YWx1ZSBvdGhlciB0aGFuIHByZXZpb3VzbHkgc2V0IHZhbHVlIDxiciAvPjYuIENsaWVudCBzZW5kIGNhbGwgbXNnIHRvIFJvVCBzZXJ2aWNlIGFuZCBSb1Qgc2VydmljZSBub3cgY29tcGFyZSB0aGUgdmFsdWUgb2YgbXNnLnJoYW5uZGxlIHdpdGggbGFzdCBzZXQgdmFsdWUgPGJyIC8+Ny4gVGhlIHJldmVyc2UgaGFuZGxlIGZvciBhIGNvbm5lY3Rpb24gaXMgTlVMTCB1bnRpbCBwc2Ffc2V0X3JoYW5kbGUoKSBpcyB1c2VkIDxiciAvPlBlcmZvcm0gYWJvdmUgc3RlcHMgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX3NldF9yaGFuZGxlLHBzYV9nZXQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgfCAxLiBwc2FfY2FsbCgpOlRoZSBjYWxsZXIgY2FuIG9wdGlvbmFsbHkgcHJvdmlkZSBvbmUgb3IgbW9yZSBidWZmZXJzIHRvIHJlY2VpdmUgYSByZXNwb25zZSAob3V0X3ZlYykuIDxiciAvPjIuIHBzYV9nZXQoKTogVGhlIGFycmF5IGluX3NpemUgcHJvdmlkZXMgdGhlIHNpemUgb2YgZWFjaCBjbGllbnQgaW5wdXQgdmVjdG9yIGluIGJ5dGVzLiBUaGUgYXJyYXkgb3V0X3NpemUgcHJvdmlkZXMgdGhlIHNpemUgb2YgZWFjaCBjbGllbnQgb3V0cHV0IHZlY3RvciBpbiBieXRlcy4gPGJyIC8+My4gcHNhX3JlYWQoKTogcGFyYW1ldGVyIGZyb20gdGhlIGNsaWVudCBpbnB1dCB2ZWN0b3IuIFN0cmVhbXMgdXAgdG8gdGhlIG5leHQgbnVtX2J5dGVzIGJ5dGVzIG9mIGNsaWVudCBpbnB1dCB2ZWN0b3IgaW52ZWNfaWR4IGluIHRoZSBtZXNzYWdlIGlkZW50aWZpZWQgYnkgbXNnX2hhbmRsZSB0byB0aGUgU2VjdXJlIFBhcnRpdGlvbiBidWZmZXIuIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQuIDxiciAvPjQuIHBzYV9yZWFkKCk6IElmIG51bV9ieXRlcyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGF2YWlsYWJsZSBkYXRhIGluIHRoZSBpbnB1dCB2ZWN0b3IgdGhlbiBudW1fYnl0ZXMgYXJlIGNvcGllZCB0byBidWZmZXIsIGFuZCB0aGUgcmVtYWluaW5nIGRhdGEgaW4gdGhlIGlucHV0IHZlY3RvciBjYW4gYmUgcmVhZCBieSBzdWJzZXF1ZW50IGNhbGxzIHRvIHBzYV9yZWFkKCkgd2l0aCB0aGUgc2FtZSBtc2dfaGFuZGxlIGFuZCBpbnZlY19pZHguIDxiciAvPjUuIHBzYV9yZWFkKCk6IFJvVCBTZXJ2aWNlcyBjYW4gZGV0ZXJtaW5lIGhvdyBtdWNoIGRhdGEgaXMgYXZhaWxhYmxlIHRvIHJlYWQgZnJvbSB0aGUgbWVzc2FnZSBiYXNlZCBvbiB0aGUgaW5fc2l6ZVtdIGF0dHJpYnV0ZSBvZiB0aGUgcHNhX21zZ190IG1lc3NhZ2UgcmV0dXJuZWQgZnJvbSBwc2FfZ2V0KCkuIElmIGFuIGlucHV0IHZlY3RvciBoYXMgbm90IGJlZW4gcGFzc2VkIGJ5IHRoZSBjbGllbnQgdGhlbiB0aGUgY29ycmVzcG9uZGluZyBpbl9zaXplW10gZm9yIHRoYXQgdmVjdG9yIGlzIHplcm8uIDxiciAvPjYuIHBzYV9yZWFkKCk6IElmIG51bV9ieXRlcyBpcyBncmVhdGVyIHRoYW4gdGhlIHJlbWFpbmluZyBkYXRhIGluIHRoZSBpbnB1dCB2ZWN0b3IgdGhlbiB0aGUgcmVtYWluaW5nIGlucHV0IGJ5dGVzIGFyZSBjb3BpZWQgdG8gYnVmZmVyIGFuZCB0aGUgY2FsbCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLiBBbnkgc3BhY2UgYWZ0ZXIgdGhpcyBpbiBidWZmZXIgaXMgbm90IG1vZGlmaWVkLiBTdWJzZXF1ZW50IGNhbGxzIG9mIHBzYV9yZWFkKCkgb3IgcHNhX3NraXAoKSB3aXRoIHRoZSBzYW1lIG1lc3NhZ2UgaW5wdXQgdmVjdG9yIHdpbGwgcmVwb3J0IHRoYXQgdGhlcmUgaXMgbm8gbW9yZSBkYXRhIGluIHRoZSB2ZWN0b3IuIDxiciAvPjcuIHBzYV9za2lwKCk6IFNraXAgb3ZlciBwYXJ0IG9mIGEgY2xpZW50IGlucHV0IHZlY3Rvci4gQWR2YW5jZXMgdGhlIGN1cnJlbnQgcmVhZCBvZmZzZXQgYnkgc2tpcHBpbmcgdXAgdG8gbnVtX2J5dGVzIGJ5dGVzIGZvciBpbnB1dCB2ZWN0b3IgaW52ZWNfaWR4IGluIHRoZSBtZXNzYWdlIGlkZW50aWZpZWQgYnkgbXNnX2hhbmRsZS4gcHNhX3NraXAoKTogV2hlbiBwc2Ffc2tpcCByZXR1cm5zLCBpdCByZXR1cm5zIHdpdGggdGhlIG51bWJlciBvZiBieXRlcyBza2lwcGVkICA8YnIgLz44LiBwc2Ffc2tpcCgpOiBJZiBUaGVyZSB3YXMgbm8gcmVtYWluaW5nIGRhdGEgaW4gdGhpcyBpbnB1dCB2ZWN0b3IsIHJldHVybiB6ZXJvIDxiciAvPjkucHNhX3NraXAoKTogSWYgbnVtX2J5dGVzIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcmVtYWluaW5nIHNpemUgb2YgdGhlIGlucHV0IHZlY3RvciB0aGVuIHRoZSByZW1haW5pbmcgc2l6ZSBvZiB0aGUgaW5wdXQgdmVjdG9yIGlzIHJldHVybmVkLiBTdWJzZXF1ZW50IGNhbGxzIG9mIHBzYV9yZWFkKCkgb3IgcHNhX3NraXAoKSB3aXRoIHRoZSBzYW1lIG1lc3NhZ2UgaW5wdXQgdmVjdG9yIHdpbGwgcmVwb3J0IHRoYXQgdGhlcmUgaXMgbm8gbW9yZSBkYXRhIGluIHRoZSB2ZWN0b3IuIDxiciAvPiB8IFtjbGllbnQvc2VydmVyXV90ZXN0X2NhbGxfcmVhZF9hbmRfc2tpcCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuQ2xpZW50IGNvbm5lY3RzIHRvIFJvVCBzZXJ2aWNlIDxiciAvPjIuQ2xpZW50IHNlbmRzIGZvdXIgaW5wdXQgdmVjdG9ycyB0byBSb1Qgc2VydmljZSB1c2luZyBwc2FfY2FsbCA8YnIgLz4zLiBSb1Qgc2VydmljZSBjaGVja3MgZm9sbG93aW5nOiA8YnIgLz4gICAgLSBSZXBvcnRpbmcgb2YgaW5wdXQgdmVjdG9ycyBzaXplIHRocm91Z2ggbXNnLmluX3NpemUgPGJyIC8+ICAgIC0gSW5wdXQgdmVjdG9ycyBjb250ZW50IHJlYWRpbmcgdGhyb3VnaCBwc2FfcmVhZCA8YnIgLz4gICAgLUluYm91bmQgL091dGJvdW5kIG9mZnNldCByZWFkaW5nIDxiciAvPiAgICAtSW5ib3VuZC9PdXRib3VuZCAgb2Zmc2V0IHNraXBwaW5nIDxiciAvPiAgICAtWmVybyBieXRlIHJlYWQgYW5kIHNraXAgPGJyIC8+ICAgIC1vdXRfbGVuPTAgY2hlY2sgPGJyIC8+NC4gQ2xpZW50IHJlY2lldmVzIHRoZSBzdGF0dXMgb2YgIFJvVCBzZXJ2aWNlIGNoZWNrcyBhbmQgY2xvc2VzIHRoZSBjb25uZWN0aW9uIDxiciAvPlBlcmZvcm0gYWJvdmUgc3RlcHMgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jYWxsLHBzYV9yZWFkLHBzYV9za2lwLHBzYV9nZXQsICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgMS4gcHNhX2NhbGwoKTogVGhlIGNhbGxlciBjYW4gb3B0aW9uYWxseSBwcm92aWRlIG9uZSBvciBtb3JlIGJ1ZmZlcnMgdG8gcmVjZWl2ZSBhIHJlc3BvbnNlIChvdXRfdmVjKS4gT24gcmV0dXJuIGZyb20gcHNhX2NhbGwoKSB0aGUgbGVuIHZhbHVlIHdpbGwgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gaW5kaWNhdGUgdGhlIG51bWJlciBvZiBieXRlcyBvZiBkYXRhIHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlciBieSB0aGUgUm9UIFNlcnZpY2UuIDxiciAvPjIuIHBzYV93cml0ZSgpOiBBcHBlbmRzIG51bV9ieXRlcyBvZiBkYXRhIGZyb20gYnVmZmVyIHRvIHRoZSBjbGllbnQgb3V0cHV0IHZlY3RvciBvdXR2ZWNfaWR4IGluIHRoZSBtZXNzYWdlIGlkZW50aWZpZWQgYnkgbXNnX2hhbmRsZS4gU2VxdWVudGlhbCBjYWxscyB1c2luZyB0aGUgc2FtZSBtc2dfaGFuZGxlIGFuZCBvdXR2ZWNfaWR4IHdpbGwgYmUgY29uY2F0ZW5hdGVkIGluIHRoZSBvdXRwdXQgdmVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9jYWxsX2FuZF93cml0ZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBDbGllbnQgY29ubmVjdHMgdG8gUm9UIHNlcnZpY2UgPGJyIC8+Mi4gQ2xpZW50IHNlbmRzIGZvdXIgb3V0cHV0IHZlY3RvcnMgdG8gUm9UIHNlcnZpY2UgdXNpbmcgcHNhX2NhbGwgPGJyIC8+My4gUm9UIHNlcnZpY2UgY2hlY2tzIGZvbGxvd2luZzogPGJyIC8+ICAtIFJlcG9ydGluZyBvZiBvdXRwdXQgdmVjdG9ycyBzaXplIHRocm91Z2ggbXNnLm91dF9zaXplIDxiciAvPiAgLSBpbl9sZW49MCBjaGVjayA8YnIgLz4gIC0gemVybyBieXRlIHdyaXRlIDxiciAvPiAgLSBPdXQgdmVjdG9yIHdyaXRlcyB1c2luZyBwc2Ffd3JpdGUgPGJyIC8+ICAgLSAgVmVjdG9yIHdyaXRlIGNvbmNhdGVuYXRpb24gPGJyIC8+NC4gQ2xpZW50IHJlY2lldmVzIHRoZSBzdGF0dXMgb2YgUm9UIHNlcnZpY2UgY2hlY2tzLCBjcm9zcyBjaGVjayB0aGUgY29udGVudCBvZiBvdXQgdmVjdG9ycyBhbmQgY2xvc2VzIHRoZSBjb25uZWN0aW9uIDxiciAvPlBlcmZvcm0gYWJvdmUgc3RlcHMgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY2FsbCxwc2FfZ2V0LHBzYV93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICB8IDEuICBwc2FfY2FsbCgpOiAgQW55IEkvTyB2ZWN0b3Igb2YgbGVuZ3RoIHplcm8gaXMgcGVybWl0dGVkIGFuZCB3aWxsIGJlIHRyZWF0ZWQgYXMgYW4gZW1wdHkgb3Igbm9uLWV4aXN0ZW50IHZlY3RvciBieSB0aGUgZnJhbWV3b3JrLiBXaGVuIGxlc3MgdGhhbiBmb3VyIHZlY3RvcnMgYXJlIHByb3ZpZGVkIHRvIHBzYV9jYWxsKCkgZm9yIGVpdGhlciBpbnB1dCBvciBvdXRwdXQsIHRoZW4gdGhlIHJlbWFpbmluZyB2ZWN0b3JzIGhhdmUgemVybyBsZW5ndGggYW5kIHRoZSBpbl9zaXplIGFuZCBvdXRfc2l6ZSBlbGVtZW50cyBmb3IgdGhlc2UgdmVjdG9ycyB3aWxsIGJlIHplcm8uQSBtZW1vcnkgcmVmZXJlbmNlIGNvbnRhaW5zIGEgc3RhcnQgYWRkcmVzcyBhbmQgYW4gYXNzb2NpYXRlZCBsZW5ndGguIEEgemVyby1sZW5ndGggbWVtb3J5IHJlZmVyZW5jZSBpcyBvbmUgd2hlcmUgdGhlIGxlbmd0aCBpcyB6ZXJvLiBUaGUgc3RhcnQgYWRkcmVzcyBvZiBhIHplcm8tbGVuZ3RoIG1lbW9yeSByZWZlcmVuY2UgY2FuIHNhZmVseSB0YWtlIGFueSB2YWx1ZSBhbmQgbXVzdCBiZSBpZ25vcmVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbi4gPGJyIC8+Mi4gcHNhX2NhbGwoKTogSWYgaW5fbGVuIGlzIHplcm8gdGhlbiBpbl92ZWMgaXMgaWdub3JlZCAgPGJyIC8+My4gc2FfY2FsbCgpOiBJZiBvdXRfbGVuIGlzIHplcm8gdGhlbiBvdXRfdmVjIGlzIGlnbm9yZWQgIDxiciAvPjQuIHBzYV9nZXQoKTogSWYgYW4gaW5wdXQgYW5kIG91dHB1dCB2ZWN0b3IgaGFzIG5vdCBiZWVuIHBhc3NlZCBieSB0aGUgY2xpZW50IHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcgaW5fc2l6ZVtdIGFuZCBvdXRfc2l6ZVtdIGZvciB0aGF0IHZlY3RvciBpcyB6ZXJvLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfemVyb19sZW5ndGhfaW52ZWMoKVtjbGllbnQvc2VydmVyXV90ZXN0X3plcm9fbGVuZ3RoX291dHZlYygpIHwgVGVzdCB6ZXJvIGxlbnRoIGlucHV0IHZlY3RvcjogPGJyIC8+MS4gQ2xpZW50IGNvbm5lY3RzIHRvIFJvVCBzZXJ2aWNlIDxiciAvPjIuIENsaWVudCBzZW5kcyB0aHJlZSBpbnB1dCBhbmQgb25lIG91dHZlYyB2ZWN0b3JzIHRvIFJvVCBzZXJ2aWNlIHVzaW5nIHBzYV9jYWxsIC0gaW52ZWMgMCBhcyB6ZXJvIGxlbmd0aCB2ZWN0b3IsIGludmVjIDEgYXMgTlVMTCBhbmQgaW52ZWMgMiBhbmQgb3V0dmVjIDAgYXMgbm9uLXplcm8gbGVuZ3RoIHZlY3RvciA8YnIgLz4zLiBSb1Qgc2VydmljZSBjaGVja3Mgc2l6ZSBvZiBlYWNoIHZlY3RvcnMgcmVwb3J0ZWQgdGhyb3VnaCBtc2cuaW5fc2l6ZSBhbmQgbXNnLm91dF9zaXplIDxiciAvPjQuIENsaWVudCByZWNpZXZlcyB0aGUgc3RhdHVzIG9mIGNoZWNrcyBhbmQgY2xvc2VzIHRoZSBjb25uZWN0aW9uIDxiciAvPlRlc3QgemVybyBsZW50aCBvdXRwdXQgdmVjdG9yOiA8YnIgLz4xLiBDbGllbnQgY29ubmVjdHMgdG8gUm9UIHNlcnZpY2UgPGJyIC8+Mi4gQ2xpZW50IHNlbmRzIG9uZSAgaW5wdXQgYW5kIHRocmVlIG91dHZlYyB2ZWN0b3JzdG8gUm9UIHNlcnZpY2UgdXNpbmcgcHNhX2NhbGwgLSBvdXR2ZWMgMCBhcyB6ZXJvIGxlbmd0aCB2ZWN0b3IsIG91dHZlYyAwIGFzIE5VTEwgYW5kIGludmVjIDAgYW5kIG91dHZlYyAyIGFzIG5vbi16ZXJvIGxlbmd0aCB2ZWN0b3IgPGJyIC8+My4gUm9UIHNlcnZpY2UgY2hlY2tzIHNpemUgb2YgZWFjaCB2ZWN0b3JzIHJlcG9ydGVkIHRocm91Z2ggbXNnLmluX3NpemUgYW5kIG1zZy5vdXRfc2l6ZSA8YnIgLz40LiBDbGllbnQgcmVjaWV2ZXMgdGhlIHN0YXR1cyBvZiBjaGVja3MgYW5kIGNsb3NlcyB0aGUgY29ubmVjdGlvbiA8YnIgLz5QZXJmb3JtIGFib3ZlIHN0ZXBzIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguIHwgcHNhX2NhbGwscHNhX2dldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgfCAxLiBXaGVuIGNsaWVudCBwcm92aWRlcyBhbiBpbnB1dCBhbmQgb3V0cHV0IHZlY3RvcnMgd2hpY2ggYXJlIHJlZmVyZW5jaW5nIHRvIHNhbWUgbWVtb3J5IGxvY2F0aW9uLCBhIHBzYV9yZWFkIGFmdGVyIHBzYV93cml0ZSB0byB0aGUgc2FtZSBtZW1vcnkgbG9jYXRpb24gY2FuIHJldHVybiBvcmlnaW5hbCBvciBtb2RpZmllZCB2YWx1ZS4gIDxiciAvPjIuIFdoZW4gY2xpZW50IHByb3ZpZGVzIGFuIGlucHV0IGFuZCBvdXRwdXQgdmVjdG9ycyB3aGljaCBhcmUgcmVmZXJlbmNpbmcgdG8gc2FtZSBtZW1vcnkgbG9jYXRpb24sIGEgcHNhX3dyaXRlKHMpIHRvIGJvdGggbWVtb3J5IHZlY3RvcnMgY2FuIHJldHVybiBlaXRoZXIgdGhlIDFzdCBvciB0aGUgMm5kIHZhbHVlIHdyaXR0ZW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X292ZXJsYXBwaW5nX3ZlY3RvcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIENsaWVudCBwcm92aWRlcyBvbmUgaW5wdXQgYW5kIDIgb3V0cHV0IHZlY3RvcnMgd2hpY2ggYXJlIHBvaW50aW5nIHRvIHNhbWUgbG9jYXRpb24uICA8YnIgLz4yLiBSb1Qgc2VydmljZSBwZXJmb3JtcyByZWFkIGFmdGVyIHdyaXRlIG9wZXJhdGlvbiBvbiB0byBvdXR2ZWMtMCBhbmQgZXhwZWN0cyByZXR1cm4gdmFsdWUgZWl0aGVyIG1vZGlmaWVkIG9uZSBvciB0aGUgb3JpZ2luYWwgIDxiciAvPjMuIFJvVCBzZXJ2aWNlIHBlcmZvcm1zIHdyaXRlIG9wZXJhdGlvbiB0byBvdXR2ZWMtMSBhbmQgdW5ibG9jayB0aGUgY29ubmVjdGlvbi4gVGhlIHdyaXRlIHBlcmZvcm1lZCBpcyB0byBtaW1pYyB3cml0ZSBhZnRlciB3cml0ZSBvcGVyYXRpbyB0byB0aGUgb3ZlcmxhcHBpbmcgdmVjdG9yLiA8YnIgLz40LiBDbGllbnQgY2hlY2sgdGhlIHZhbHVlIG9mIG91dHZlYy4gVGhlIHZhbHVlIHNob3VsZCBiZSBlaXRoZXIgdGhlIHZhbHVlIHdyaXR0ZW4gYnkgZmlyc3QgcHNhX3dyaXRlIG9yIHRoZSBzZWNvbmQgcHNhX3dyaXRlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jYWxsLHBzYV93cml0ZSxwc2FfcmVhZCAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMDQgICAgICAgIHwgcHNhX2Nvbm5lY3QoKSBkb2VzIG5vdCByZXR1cm4gaWYgUm9UIFNlcnZpY2UgZG9lcyBub3QgZXhpc3Qgb24gcGxhdGZvcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9zaWRfZG9lc19ub3RfZXhpc3RzKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jb25uZWN0IHdpdGggU0lEIHdoaWNoIGRvZXMgbm90IGV4aXN0IG9uIGEgcGxhdGZvcm0gPGJyIC8+UGVyZm9ybSBhYm92ZSBzdGVwIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9pMDA1ICAgICAgICB8IHBzYV9jb25uZWN0KCkgZG9lcyBub3QgcmV0dXJuIGlmIFZlcnNpb24gcG9saWN5IGlzIFNUUklDVCBhbmQgcmVxdWVzdGVkIHZlcnNpb24gaXMgSElHSEVSIHRoYW4gbWluaW11bSB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3Rfc3RyaWN0X3BvbGljeV9oaWdoZXJfbWlub3JfdmVyc2lvbigpICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FsbCBwc2FfY29ubmVjdCB3aXRoIFNJRCB3aG9zZSBWZXJzaW9uIHBvbGljeSBpcyBTVFJJQ1QgYW5kIHJlcXVlc3RlZCBtaW5vciB2ZXJzaW9uIGlzIEhJR0hFUiB0aGFuIG1pbmltdW0gdmVyc2lvbi4gPGJyIC8+UGVyZm9ybSBhYm92ZSBzdGVwIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2Nvbm5lY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfaTAwNiAgICAgICAgfCBwc2FfY29ubmVjdCgpIGRvZXMgbm90IHJldHVybiBpZiBWZXJzaW9uIHBvbGljeSBpcyBTVFJJQ1QgYW5kIHJlcXVlc3RlZCB2ZXJzaW9uIGxvd2VyIHRoYW4gbWluaW11bSB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3N0cmljdF9wb2xpY3lfbG93ZXJfbWlub3JfdmVyc2lvbigpICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhbGwgcHNhX2Nvbm5lY3Qgd2l0aCBTSUQgd2hvc2UgVmVyc2lvbiBwb2xpY3kgaXMgU1RSSUNUIGFuZCByZXF1ZXN0ZWQgbWlub3IgdmVyc2lvbiBpcyBMb3dlciB0aGFuIG1pbmltdW0gdmVyc2lvbi4gPGJyIC8+UGVyZm9ybSBhYm92ZSBzdGVwIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jb25uZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMDcgICAgICAgIHwgcHNhX2Nvbm5lY3QoKSBkb2VzIG5vdCByZXR1cm4gaWYgVmVyc2lvbiBwb2xpY3kgaXMgUkVMQVhFRCBhbmQgcmVxdWVzdGVkIHZlcnNpb24gaXMgYmlnZ2VyIHRoYW4gbWluaW11bSB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9yZWxheF9wb2xpY3lfaGlnaGVyX21pbm9yX3ZlcnNpb24oKSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYWxsIHBzYV9jb25uZWN0IHdpdGggU0lEIHdob3NlIFZlcnNpb24gcG9saWN5IGlzIFJFTEFYRUQgYW5kIHJlcXVlc3RlZCBtaW5vciB2ZXJzaW9uIGlzIEhJR0hFUiB0aGFuIG1pbmltdW0gdmVyc2lvbi4gPGJyIC8+UGVyZm9ybSBhYm92ZSBzdGVwIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9pMDA4ICAgICAgICB8IDEuIHBzYV9jb25uZWN0KCkgZG9lcyBub3QgcmV0dXJuIGlmIFNlcnZpY2UgdG8gbm9uX3NlY3VyZV9jbGllbnQgaXMgbm90IGF2YWlsYWJsZSA8YnIgLz4yLiBNYW5pZmVzdCBwYXJhbWV0ZXIgLSBUaGUgbm9uX3NlY3VyZV9jbGllbnRzIGZpZWxkIGNvbnRhaW5zIGEgYm9vbGVhbiB0byBpbmRpY2F0ZSBpZiBpdCBpcyBhY2Nlc3NpYmxlIHRvIE5TUEUgY2xpZW50cy4gUm9UIFNlcnZpY2VzIGFyZSBhbHdheXMgYWNjZXNzaWJsZSB0byBTUEUgY2xpZW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3Rfc2VjdXJlX2FjY2Vzc19vbmx5X2Nvbm5lY3Rpb24oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfY29ubmVjdCB3aXRoIFNJRCB3aGljaCBhbGxvdyBzZWN1cmUgb25seSBjb25uZWN0aW9uLiAgPGJyIC8+UGVyZm9ybSBhYm92ZSBzdGVwIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2Nvbm5lY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfaTAwOSAgICAgICAgfCAxLiBwc2FfY29ubmVjdCgpIGRvZXMgbm90IHJldHVybiBpZiBTSUQgaXMgbm90IG1lbnRpb25lZCBpbiBkZXBlbmRlbmNpZXMgZmllbGQuIDxiciAvPjIuIE1hbmlmZXN0IHBhcmFtZXRlci0gZGVwZW5kZW5jaWVzIChvcHRpb25hbCkgPGJyIC8+SWYgYWNjZXNzIGJldHdlZW4gYSBTZWN1cmUgUGFydGl0aW9uIChhY3RpbmcgYXMgY2xpZW50KSBhbmQgYSBSb1QgU2VydmljZSAoYWN0aW5nIGFzIHNlcnZlcikgaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgbWFuaWZlc3QsIHRoZW4gdGhlIGNsaWVudCBpcyBub3QgcGVybWl0dGVkIHRvIGNvbm5lY3QgdG8gdGhlIFJvVCBTZXJ2aWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3VuZXh0ZXJuX3NpZF9jb25uZWN0aW9uKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX2Nvbm5lY3Qgd2l0aCBTSUQgd2hpY2ggaXMgbm90IG1lbnRpb25lZCBhcyBleHRlcm5hbCBTSUQgaW4gbWFuaWZlc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jb25uZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMTAgICAgICAgIHwgSXQgaXMgbm90IHJlcXVpcmVkIGZvciB0aGUgbWlub3JfdmVyc2lvbiBvciBtaW5vcl9wb2xpY3kgYXR0cmlidXRlcyB0byBiZSBzcGVjaWZpZWQuIElmIHRoZXkgYXJlIG5vdCBzcGVjaWZpZWQgaW4gdGhlIG1hbmlmZXN0LCB0aGUgUm9UIFNlcnZpY2Ugd2lsbCBoYXZlIGRlZmF1bHQgYXR0cmlidXRlcyBvZiBtaW5vcl92ZXJzaW9uPTEgYW5kIG1pbm9yX3BvbGljeT0iU1RSSUNUIi4gcHNhX2Nvbm5lY3QoKSBkb2VzIG5vdCByZXR1cm4gaWYgcmVxdWVzdGVkIHZlcnNpb24gaGlnaGVyIHRoYW4gbWluaW11bSB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF91bnNwZWNpZmllZF9wb2xpY3lfd2l0aF9oaWdoZXJfbWlub3JfdmVyKCkgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jb25uZWN0IHdpdGggU0lEIHdob3NlIFZlcnNpb24gcG9saWN5IGlzIG5vdCBtZW50aW9uZWQgYW5kIHJlcXVlc3RlZCBtaW5vciB2ZXJzaW9uIGlzIEhJR0hFUiB0aGFuIG1pbmltdW0gdmVyc2lvbi4gPGJyIC8+UGVyZm9ybSBhYm92ZSBzdGVwIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9pMDExICAgICAgICB8IEl0IGlzIG5vdCByZXF1aXJlZCBmb3IgdGhlIG1pbm9yX3ZlcnNpb24gb3IgbWlub3JfcG9saWN5IGF0dHJpYnV0ZXMgdG8gYmUgc3BlY2lmaWVkLiBJZiB0aGV5IGFyZSBub3Qgc3BlY2lmaWVkIGluIHRoZSBtYW5pZmVzdCwgdGhlIFJvVCBTZXJ2aWNlIHdpbGwgaGF2ZSBkZWZhdWx0IGF0dHJpYnV0ZXMgb2YgbWlub3JfdmVyc2lvbj0xIGFuZCBtaW5vcl9wb2xpY3k9IlNUUklDVCIuICBwc2FfY29ubmVjdCgpIGRvZXMgbm90IHJldHVybiBpZiByZXF1ZXN0ZWQgdmVyc2lvbiBsb3dlciB0aGFuIG1pbmltdW0gdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfdW5zcGVjaWZpZWRfcG9saWN5X3dpdGhfbG93ZXJfbWlub3JfdmVyKCkgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfY29ubmVjdCB3aXRoIFNJRCB3aG9zZSBWZXJzaW9uIHBvbGljeSBpcyBub3QgbWVudGlvbmVkIGFuZCByZXF1ZXN0ZWQgbWlub3IgdmVyc2lvbiBpcyBsb3dlciB0aGFuIG1pbmltdW0gdmVyc2lvbi4gPGJyIC8+UGVyZm9ybSBhYm92ZSBzdGVwIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2Nvbm5lY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfaTAxMiAgICAgICAgfCBwc2FfY2xvc2UoKSBkb2VzIG5vdCByZXR1cm4gaWYgYW4gaW52YWxpZCBoYW5kbGUgd2FzIHByb3ZpZGVkIHRoYXQgaXMgbm90IHRoZSBudWxsIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9jbG9zZV93aXRoX2ludmFsaWRfaGFuZGxlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX2Nsb3NlIHdpdGggSU5WQUxJRF9IQU5ETEUgd2hpY2ggaXMgbm90IE5VTEwuIDxiciAvPlBlcmZvcm0gYWJvdmUgc3RlcCBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jbG9zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMTMgICAgICAgIHwgcHNhX2dldCgpIGRvZXMgbm90IHJldHVybiBpZiBzaWduYWwgaGFzIG1vcmUgdGhhbiBhIHNpbmdsZSBiaXQgc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfZ2V0X3dpdGhfbW9yZV90aGFuX29uZV9zaWduYWwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9nZXQgd2l0aCBhIHNpZ25hbCB3aG8gaGFzIG1vcmUgdGhhbiBhIHNpbmdsZSBiaXQgc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfZ2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9pMDE0ICAgICAgICB8IEFmdGVyIGEgUm9UIFNlcnZpY2UgbWVzc2FnZSBpcyBzaWduYWxlZCwgcHNhX2dldCgpIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmV0cmlldmUgdGhlIG1lc3NhZ2UgZGV0YWlscy4gRWFjaCBtZXNzYWdlIGNhbiBvbmx5IGJlIHJldHJpZXZlZCBvbmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX2dldF9jYWxsZWRfdHdpY2UoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfZ2V0IHdpdGggYSB2YWxpZCBzaWduYWwgYmFjayB0byBiYWNrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2dldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfaTAxNSAgICAgICAgfCBwc2FfZ2V0KCkgZG9lcyBub3QgcmV0dXJuIGlmIHNpZ25hbCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgUm9UIFNlcnZpY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9nZXRfd2l0aF9ub25fcm90X3NpZ25hbCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX2dldCB3aXRoIERPT1JCRUxMIHNpZ25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9nZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMTYgICAgICAgIHwgcHNhX2dldCgpIGRvZXMgbm90IHJldHVybiBpZiBUaGUgUm9UIFNlcnZpY2Ugc2lnbmFsIGlzIG5vdCBjdXJyZW50bHkgYXNzZXJ0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfZ2V0X3dpdGhfdW5hc3NlcnRlZF9zaWduYWwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9nZXQgd2l0aCBzaW5nYWwgd2hpY2ggaXMgY3VycmVudGx5IG5vdCBhc3NlcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfZ2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9pMDE3ICAgICAgICB8IEVhY2ggUm9UIFNlcnZpY2UgbGlzdGVkIGNyZWF0ZXMgYSBkZXBlbmRlbmN5IGZyb20gdGhlIGNsaWVudCBQYXJ0aXRpb24gdG8gYSBzZXJ2ZXIgUGFydGl0aW9uLiBXaXRoaW4gdGhlIHJlc3VsdGluZyBuZXR3b3JrIG9mIGRlcGVuZGVuY2llcywgdGhlcmUgbXVzdCBiZSBubyBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYmV0d2VlbiBTZWN1cmUgUGFydGl0aW9ucy4gVGhpcyB3b3VsZCByZXN1bHQgaW4gZGVhZGxvY2sgYmVjYXVzZSB0aGUgU2VydmljZSByZXF1ZXN0cyBhcmUgYWx3YXlzIHN5bmNocm9ub3VzLkZvciB0aGUgc2FtZSByZWFzb24sIGEgU2VjdXJlIFBhcnRpdGlvbiBtdXN0IG5vdCB1c2UgYSBSb1QgU2VydmljZSB0aGF0IGlzIGRlZmluZWQgd2l0aGluIGl0c2VsZi4gRGlyZWN0IGZ1bmN0aW9uIGNhbGxzIG11c3QgYmUgdXNlZCBpbnN0ZWFkIG9mIElQQyB3aGVyZSB0aGVyZSBpcyBhIGRlcGVuZGVuY3kgYmV0d2VlbiBSb1QgU2VydmljZXMgd2l0aGluIGEgc2luZ2xlIFNlY3VyZSBQYXJ0aXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcGFydGl0aW9uX2NhbGxpbmdfaXRzX293bl9yb3Rfc2VydmljZSgpICAgICAgICAgICAgICAgICAgICAgIHwgUGFydGl0aW9uIGNhbGxpbmcgaXRzIG93biBST1Qgc2VydmljZSB1c2luZyBwc2FfY29ubmVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2Nvbm5lY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfaTAxOCAgICAgICAgfCBwc2Ffc2V0X3JoYW5kbGUoKSBkb2VzIG5vdCByZXR1cm4gIGlmIGFuIGludmFsaWQgbWVzc2FnZSBoYW5kbGUgd2FzIHByb3ZpZGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9zZXRfcmhhbmRsZV93aXRoX2ludmFsaWRfaGFuZGxlKCkgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX3NldF9yaGFubGRlIHdpdGggYW4gSU5WQUxJRF9IQU5ETEUgd2hpY2ggaXMgbm90IE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9zZXRfcmhhbmRsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMTkgICAgICAgIHwgcHNhX3NldF9yaGFuZGxlKCkgZG9lcyBub3QgcmV0dXJuIGlmIE51bGwgaGFuZGxlIHdhcyBwYXNzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffc2V0X3JoYW5kbGVfd2l0aF9udWxsX2hhbmRsZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9zZXRfcmhhbmxkZSB3aXRoIE5VTEwgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffc2V0X3JoYW5kbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9pMDIwICAgICAgICB8IElmIG1lc3NnYWUgdHlwZSBpZiBpcyBQU0FfSVBDX0NPTk5FQ1QgdGhlbiB1c2Ugb2Ygc3RhdHVzIHZhbHVlcyBpbiBwc2FfcmVwbHkoKSBvdGhlciB0aGFuIFBTQV9TVUNDRVNTIG9yIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQgaXMgYSBmYXRhbCBwcm9ncmFtbWluZyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3JlcGx5X3dpdGhfaW52YWxpZF9jb25uZWN0X3N0YXR1c19jb2RlKCkgICAgICAgICAgICAgICAgIHwgQ2FsbCB0byBwc2FfcmVwbHkgZHVyaW5nIFBTQV9JUENfQ09OTkVDVCB3aXRoIHN0YXR1cyBjb2RlIG90aGVyIHRoYW4gUFNBX1NVQ0NFU1MgYW5kIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX3JlcGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfaTAyMSAgICAgICAgfCBJZiBtZXNzYWdlIHR5cGUgaWYgUFNBX0lQQ19DQUxMICwgdGhlIHVzZSBvZiBvdGhlciByZXNlcnZlZCBzdGF0dXMgY29kZXMgaW4gdGhlIHJhbmdlIElOVDMyX01JTisxIHRvIElOVDMyX01JTisxMjcgZm9yIHBzYV9yZXBseSgpIGlzIGEgZmF0YWwgcHJvZ3JhbW1pbmcgZXJyb3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9yZXBseV93aXRoX2ludmFsaWRfY2FsbF9zdGF0dXNfY29kZSgpICAgICAgICAgICAgICAgICAgICB8IENhbGwgdG8gcHNhX3JlcGx5IGR1cmluZyBQU0FfSVBDX0NBTEwgd2l0aCBzdGF0dXMgY29kZSBvdGhlciB0aGFuIGFsbG93ZWQgY29kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9yZXBseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMjIgICAgICAgIHwgcHNhX3JlcGx5KCkgZG9lcyBub3QgcmV0dXJuIGlmIHRoZSBtZXNzYWdlIGhhbmRsZSBpcyBpbnZhbGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfcmVwbHlfd2l0aF9pbnZhbGlkX2hhbmRsZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9yZXBseSB3aXRoIGFuIElOVkFMSURfSEFORExFIHdoaWNoIGlzIG5vdCBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfcmVwbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9pMDIzICAgICAgICB8IHBzYV9yZXBseSgpIGRvZXMgbm90IHJldHVybiBpZiB0aGUgbWVzc2FnZSBoYW5kbGUgaXMgIE51bGwgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3JlcGx5X3dpdGhfbnVsbF9oYW5kbGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfcmVwbHkgd2l0aCBhIE5VTEwgSEFORExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX3JlcGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfaTAyNCAgICAgICAgfCBwc2FfY2FsbCgpIGRvZXMgbm90IHJldHVybiBpZiBhbiBpbnZhbGlkIGhhbmRsZSB3YXMgcGFzc2VkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9jYWxsX3dpdGhfaW52YWxpZF9oYW5kbGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX2NhbGwgd2l0aCBhbiBJTlZBTElEX0hBTkRMRSB3aGljaCBpcyBub3QgTlVMTC5QZXJmb3JtIHRoaXMgc3RlcCBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMjUgICAgICAgIHwgcHNhX2NhbGwoKSBkb2VzIG5vdCByZXR1cm4gaWYgYW4gbnVsbCBoYW5kbGUgd2FzIHBhc3NlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfY2FsbF93aXRoX251bGxfaGFuZGxlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jYWxsIHdpdGggYSBOVUxMIEhBTkRMRS4gPGJyIC8+UGVyZm9ybSB0aGlzIHN0ZXAgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY2FsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9pMDI2ICAgICAgICB8IHBzYV9jYWxsKCkgZG9lcyBub3QgcmV0dXJuIGlmICBpbl9sZW4gKyBvdXRfbGVuID4gUFNBX01BWF9JT1ZFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX2NhbGxfd2l0aF9pb3ZlY19tb3JlX3RoYW5fbWF4X2xpbWl0KCkgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfY2FsbCB3aXRoIG1vcmUgdGhhbiBmb3VyIElPVkVDcy4gPGJyIC8+UGVyZm9ybSB0aGlzIHN0ZXAgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2NhbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfaTAyNyAgICAgICAgfCAxLiBwc2FfY2FsbCgpIHJldHVybnMgIFBTQV9EUk9QX0NPTk5FQ1RJT04gd2hlbiB0aGUgY29ubmVjdGlvbiBoYXMgYmVlbiBkcm9wcGVkIGJ5IHRoZSBSb1QgU2VydmljZS4gVGhpcyBpbmRpY2F0ZXMgdGhhdCBlaXRoZXIgdGhpcyBvciBhIHByZXZpb3VzIG1lc3NhZ2Ugd2FzIGludmFsaWQoVGhlIFNQTSB3aWxsIGltcGxlbWVudCBvbmUgb2YgdGhlIGZvbGxvd2luZyBiZWhhdmlvcnMgaW4gdGhpcyBzaXR1YXRpb246vyB0aGlzIGlzIGEgY2xpZW50IGZhdGFsIGVycm9yIGFuZCBwc2FfY2FsbCgpIHdpbGwgbm90IHJldHVybr8gcHNhX2NhbGwoKSByZXR1cm5pbmcgUFNBX0RST1BfQ09OTkVDVElPTi4gSW4gdGhpcyBjYXNlLCBhbGwgc3Vic2VxdWVudCBjYWxscyB0byBwc2FfY2FsbCgpIG9uIHRoaXMgY29ubmVjdGlvbiB3aWxsIGltbWVkaWF0ZWx5IHJldHVybiBQU0FfRFJPUF9DT05ORUNUSU9OIGFuZCB0aGUgY29ubmVjdGlvbiBtdXN0IGJlIGNsb3NlZCkgPGJyIC8+Mi4gcHNhX3JlcGx5KCk6IElmIHRoZSBtZXNzYWdlIHR5cGUgaXMgUFNBX0lQQ19DQUxMIGFuZCB0aGUgY2xpZW50IGhhcyBtYWRlIGFuIGludmFsaWQgcmVxdWVzdCwgdGhlbiB0aGUgUm9UIFNlcnZpY2UgY2FuIHJlcXVlc3QgZm9yIHRoZSBjb25uZWN0aW9uIHRvIGJlIHRlcm1pbmF0ZWQgYnkgY2FsbGluZyBwc2FfcmVwbHkoKSB3aXRoIHJldHVybiB2YWx1ZSBQU0FfRFJPUF9DT05ORUNUSU9OLiBBZnRlciB0aGlzLCB0aGUgUm9UIFNlcnZpY2Ugd2lsbCByZWNlaXZlIG5vIGZ1cnRoZXIgUFNBX0lQQ19DQUxMIG1lc3NhZ2VzIG9uIHRoYXQgY29ubmVjdGlvbi4gVGhlIFNQTSB3aWxsIGRlbGl2ZXIgYSBQU0FfSVBDX0RJU0NPTk5FQ1QgdG8gdGhlIFJvVCBTZXJ2aWNlIHRvIHJlbGVhc2UgYW55IHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBjb25uZWN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9kcm9wX2Nvbm5lY3Rpb24oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJvVCBzZXJ2aWNlIGV4ZWN1dGVzIHBzYV9yZXBseSB3aXRoIHN0YXR1cyBjb2RlIGVxYXVsIHRvIFBTQV9EUk9QX0NPTk5FQ1RJT04gZHVyaW5nIFBTQV9JUENfQ0FMTC5DbGllbnQgZXhwZWN0cyBlaXRoZXIgUFNBX0RST1BfQ09OTkVDVElPTiBhcyByZXR1cm5lZCBzdGF0dXMgY29kZSAgb3IgZG9lcyBub3QgcmV0dXJuIGNvbmRpdGlvbiBmb3IgcHNhX2NhbGwuIDxiciAvPlBlcmZvcm0gYWJvdmUgc3RlcHMgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMjggICAgICAgIHwgcHNhX3JlYWQoKSBkb2VzIG5vdCByZXR1cm4gaWYgIG1zZ19oYW5kbGUgZG9lcyBub3QgcmVmZXIgdG8gYSBQU0FfSVBDX0NBTEwgbWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfcmVhZF9hdF9pcGNfY29ubmVjdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9yZWFkIGR1cmluZyBQU0FfSVBDX0NPTk5FQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9pMDI5ICAgICAgICB8IHBzYV9yZWFkKCkgZG9lcyBub3QgcmV0dXJuIGlmICAgbXNnX2hhbmRsZSBkb2VzIG5vdCByZWZlciB0byBhIFBTQV9JUENfQ0FMTCBtZXNzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3JlYWRfYXRfaXBjX2Rpc2Nvbm5lY3QoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfcmVhZCBkdXJpbmcgUFNBX0lQQ19ESVNDT05ORUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX3JlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfaTAzMCAgICAgICAgfCBwc2FfcmVhZCgpIGRvZXMgbm90IHJldHVybiBpZiBOdWxsIGhhbmRsZSB3YXMgcGFzc2VkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9yZWFkX3dpdGhfbnVsbF9oYW5kbGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX3JlYWQgd2l0aCBOVUxMIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9yZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMzEgICAgICAgIHwgcHNhX3JlYWQoKSBkb2VzIG5vdCByZXR1cm4gaWYgIEludmFsaWQgaGFuZGxlIHdhcyBwYXNzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfcmVhZF93aXRoX2ludmFsaWRfaGFuZGxlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsbCBwc2FfcmVhZCB3aXRoIElOVkFMSURfSEFORExFIHdoaWNoIGlzIG5vdCBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9pMDMyICAgICAgICB8IHBzYV9yZWFkKCkgZG9lcyBub3QgcmV0dXJuIGlmIGludmVjX2lkeCBpcyBlcXVhbCB0byBQU0FfTUFYX0lPVkVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3JlYWRfd2l0aF9pbnZlY19lcXVhbF90b19tYXhfaW92ZWMoKSAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfcmVhZCB3aXRoIGludmVjX2lkeD1QU0FfTUFYX0lPVkVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX3JlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfaTAzMyAgICAgICAgfCBwc2FfcmVhZCgpIGRvZXMgbm90IHJldHVybiBpZiAgaW52ZWNfaWR4IGlzIGdyZWF0ZXIgdGhhbiBQU0FfTUFYX0lPVkVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9yZWFkX3dpdGhfaW52ZWNfZ3JlYXRlcl90aGFuX21heF9pb3ZlYygpICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX3JlYWQgd2l0aCBpbnZlY19pZHg+UFNBX01BWF9JT1ZFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9yZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMzQgICAgICAgIHwgcHNhX3NraXAoKSBkb2VzIG5vdCByZXR1cm4gaWYgIG1zZ19oYW5kbGUgZG9lcyBub3QgcmVmZXIgdG8gYSBQU0FfSVBDX0NBTEwgbWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffc2tpcF9hdF9pcGNfY29ubmVjdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9za2lwIGR1cmluZyBQU0FfSVBDX0NPTk5FQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffc2tpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9pMDM1ICAgICAgICB8IHBzYV9za2lwKCkgZG9lcyBub3QgcmV0dXJuIGlmICBtc2dfaGFuZGxlIGRvZXMgbm90IHJlZmVyIHRvIGEgUFNBX0lQQ19DQUxMIG1lc3NhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3NraXBfYXRfaXBjX2Rpc2Nvbm5lY3QoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2Ffc2tpcCBkdXJpbmcgUFNBX0lQQ19ESVNDT05ORUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX3NraXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfaTAzNiAgICAgICAgfCBwc2Ffc2tpcCgpIGRvZXMgbm90IHJldHVybiBpZiAgIE51bGwgaGFuZGxlIHdhcyBwYXNzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9za2lwX3dpdGhfbnVsbF9oYW5kbGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX3NraXB3aXRoIE5VTEwgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9za2lwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwMzcgICAgICAgIHwgcHNhX3NraXAoKSBkb2VzIG5vdCByZXR1cm4gaWYgIEludmFsaWQgaGFuZGxlIHdhcyBwYXNzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffc2tpcF93aXRoX2ludmFsaWRfaGFuZGxlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsbCBwc2Ffc2tpcCB3aXRoIElOVkFMSURfSEFORExFIHdoaWNoIGlzIG5vdCBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffc2tpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9pMDM4ICAgICAgICB8IHBzYV9za2lwKCkgZG9lcyBub3QgcmV0dXJuIGlmICBpbnZlY19pZHggaXMgZXF1YWwgdG8gUFNBX01BWF9JT1ZFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3NraXBfd2l0aF9pbnZlY19lcXVhbF90b19tYXhfaW92ZWMoKSAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2Ffc2tpcCB3aXRoIGludmVjX2lkeD1QU0FfTUFYX0lPVkVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX3NraXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfaTAzOSAgICAgICAgfCBwc2Ffc2tpcCgpIGRvZXMgbm90IHJldHVybiBpZiAgaW52ZWNfaWR4IGlzIGdyZWF0ZXIgdGhhbiBQU0FfTUFYX0lPVkVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9za2lwX3dpdGhfaW52ZWNfZ3JlYXRlcl90aGFuX21heF9pb3ZlYygpICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX3NraXAgd2l0aCBpbnZlY19pZHg+UFNBX01BWF9JT1ZFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9za2lwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwNDAgICAgICAgIHwgcHNhX3dyaXRlKCkgZG9lcyBub3QgcmV0dXJuIGlmICAgbXNnX2hhbmRsZSBkb2VzIG5vdCByZWZlciB0byBhIFBTQV9JUENfQ0FMTCBtZXNzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffd3JpdGVfYXRfaXBjX2Nvbm5lY3QoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV93cml0ZSBkdXJpbmcgUFNBX0lQQ19DT05ORUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9pMDQxICAgICAgICB8IHBzYV93cml0ZSgpIGRvZXMgbm90IHJldHVybiBpZiAgbXNnX2hhbmRsZSBkb2VzIG5vdCByZWZlciB0byBhIFBTQV9JUENfQ0FMTCBtZXNzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3dyaXRlX2F0X2lwY19kaXNjb25uZWN0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2Ffd3JpdGUgZHVyaW5nIFBTQV9JUENfRElTQ09OTkVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfaTA0MiAgICAgICAgfCBwc2Ffd3JpdGUoKSBkb2VzIG5vdCByZXR1cm4gaWYgTnVsbCBoYW5kbGUgd2FzIHBhc3NlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV93cml0ZV93aXRoX251bGxfaGFuZGxlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX3dyaXRlIHdpdGggTlVMTCBoYW5kbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwNDMgICAgICAgIHwgcHNhX3dyaXRlKCkgZG9lcyBub3QgcmV0dXJuIGlmICBJbnZhbGlkIGhhbmRsZSB3YXMgcGFzc2VkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffd3JpdGVfd2l0aF9pbnZhbGlkX2hhbmRsZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsbCBwc2Ffd3JpdGUgd2l0aCBJTlZBTElEX0hBTkRMRSB3aGljaCBpcyBub3QgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9pMDQ0ICAgICAgICB8IHBzYV93cml0ZSgpIGRvZXMgbm90IHJldHVybiBpZiAgaW52ZWNfaWR4IGlzIGVxdWFsIHRvIFBTQV9NQVhfSU9WRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3dyaXRlX3dpdGhfaW52ZWNfZXF1YWxfdG9fbWF4X2lvdmVjKCkgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2Ffd3JpdGUgd2l0aCBpbnZlY19pZHg9UFNBX01BWF9JT1ZFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfaTA0NSAgICAgICAgfCBwc2Ffd3JpdGUoKSBkb2VzIG5vdCByZXR1cm4gaWYgIGludmVjX2lkeCBpcyBncmVhdGVyIHRoYW4gUFNBX01BWF9JT1ZFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV93cml0ZV93aXRoX2ludmVjX2dyZWF0ZXJfdGhhbl9tYXhfaW92ZWMoKSAgICAgICAgICAgICAgICB8IENhbGwgcHNhX3dyaXRlIHdpdGggaW52ZWNfaWR4PlBTQV9NQVhfSU9WRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwNDYgICAgICAgIHwgcHNhX3dyaXRlKCkgZG9lcyBub3QgcmV0dXJuIGlmICB0aGUgY2FsbCBhdHRlbXB0cyB0byB3cml0ZSBkYXRhIHBhc3QgdGhlIGVuZCBvZiB0aGUgY2xpZW50IG91dHB1dCB2ZWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffd3JpdGVfd2l0aF9zaXplX292ZXJmbG93KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV93cml0ZSB3aXRoIGEgc2l6ZSBpbnB1dCBvbmUgYnl0ZSBiaWdnZXIgdGhhbiBhbGxvd2VkIHNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9pMDQ3ICAgICAgICB8IHBzYV9nZXQgZG9lcyBub3QgcmV0dXJuIGlmICBUaGUgbXNnIHBvaW50ZXIgcHJvdmlkZWQgaXMgbm90IGEgdmFsaWQgbWVtb3J5IHJlZmVyZW5jZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX2dldF93aXRoX2ludmFsaWRfbXNnX3BvaW50ZXIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfZ2V0IHdpdGggaW52YWxpZCBtc2cgcG9pbnRlci4gPGJyIC8+IFNlbGVjdGlvbiBvZiBpbnZhbGlkIHBvaW50ZXIgaXMgYXMgYmVsb3c6PGJyIC8+aWYgKElTT0xBVElPTl9MRVZFTCA+IDEpPGJyIC8+ICAgICAvLyBQU0EgUm9UIFBvaW50ZXIgPGJyIC8+ICAgICAgcHNhX2dldChtc2dfcG9pbnRlciA9IGRyaXZlcl9tbWlvX2Jhc2UpOzxiciAvPmVsc2U8YnIgLz4gICAgICBwc2FfZ2V0KG1zZ19wb2ludGVyID0gTlVMTCk7PGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2dldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfaTA0OCAgICAgICAgfCBwc2FfY2FsbCBkb2VzIG5vdCByZXR1cm4gaWYgYWRkcmVzcyBvZiBpbl92ZWMgaXMgaW52YWxpZCBmb3IgY2xpZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9jYWxsX3dpdGhfaW52YWxpZF9pbnZlY19wb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX2NhbGwgd2l0aCBpbnZhbGlkIGFkZHJlc3MgZm9yIGludmVjPGJyIC8+IFNlbGVjdGlvbiBvZiBpbnZhbGlkIGludmVjIHBvaW50ZXIgaXMgYXMgYmVsb3c6PGJyIC8+ICAgICBpZiBjYWxsZXIgPT0gTk9OU0VDVVJFPGJyIC8+ICAgICAgICAvLyBQU0EgUm9UIHBvaW50ZXI8YnIgLz4gICAgICAgIGludmVjX3BvaW50ZXIgPSBkcml2ZXJfbW1pb19iYXNlOzxiciAvPjxiciAvPiAgICAgZWxzZTxiciAvPjxiciAvPiAgICAgICAgaWYgKElTT0xBVElPTl9MRVZFTCA+IDEpPGJyIC8+ICAgICAgICAgICBpbnZlY19wb2ludGVyID0gZHJpdmVyX21taW9fYmFzZTs8YnIgLz4gICAgICAgIGVsc2U8YnIgLz4gICAgICAgICAgIGludmVjX3BvaW50ZXIgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwNDkgICAgICAgIHwgcHNhX2NhbGwgZG9lcyBub3QgcmV0dXJuIGlmICBhZGRyZXNzIG9mIG91dF92ZWMgaXMgaW52YWxpZCBmb3IgY2xpZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfb3V0dmVjX3BvaW50ZXIoKSAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jYWxsIHdpdGggaW52YWxpZCBhZGRyZXNzIGZvciBvdXR2ZWM8YnIgLz4gU2VsZWN0aW9uIG9mIGludmFsaWQgb3V0dmVjIHBvaW50ZXIgaXMgYXMgYmVsb3c6PGJyIC8+ICAgICBpZiBjYWxsZXIgPT0gTk9OU0VDVVJFPGJyIC8+ICAgICAgICAvLyBQU0EgUm9UIHBvaW50ZXI8YnIgLz4gICAgICAgIG91dHZlY19wb2ludGVyID0gZHJpdmVyX21taW9fYmFzZTs8YnIgLz48YnIgLz4gICAgIGVsc2U8YnIgLz48YnIgLz4gICAgICAgIGlmIChJU09MQVRJT05fTEVWRUwgPiAxKTxiciAvPiAgICAgICAgICAgb3V0dmVjX3BvaW50ZXIgPSBkcml2ZXJfbW1pb19iYXNlOzxiciAvPiAgICAgICAgZWxzZTxiciAvPiAgICAgICAgICAgb3V0dmVjX3BvaW50ZXIgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY2FsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9pMDUwICAgICAgICB8IHBzYV9jYWxsIGRvZXMgbm90IHJldHVybiBpZiBwc2FfaW52ZWMuYmFzZSBhZGRyZXNzIGlzIGludmFsaWQgZm9yIGNsaWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX2NhbGxfd2l0aF9pbnZhbGlkX2ludmVjX2Jhc2UoKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfY2FsbCB3aXRoIGludmFsaWQgYWRkcmVzcyBmb3IgcHNhX2ludmVjLmJhc2U8YnIgLz4gU2VsZWN0aW9uIG9mIGludmFsaWQgYmFzZSBpcyBhcyBiZWxvdzo8YnIgLz4gICAgIGlmIGNhbGxlciA9PSBOT05TRUNVUkU8YnIgLz4gICAgICAgIC8vIFBTQSBSb1QgcG9pbnRlcjxiciAvPiAgICAgICAgaW52YWxpZF9iYXNlID0gZHJpdmVyX21taW9fYmFzZTs8YnIgLz48YnIgLz4gICAgIGVsc2U8YnIgLz48YnIgLz4gICAgICAgIGlmIChJU09MQVRJT05fTEVWRUwgPiAxKTxiciAvPiAgICAgICAgICAgaW52YWxpZF9iYXNlID0gZHJpdmVyX21taW9fYmFzZTs8YnIgLz4gICAgICAgIGVsc2U8YnIgLz4gICAgICAgICAgIGludmFsaWRfYmFzZSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2NhbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfaTA1MSAgICAgICAgfCBwc2FfY2FsbCBkb2VzIG5vdCByZXR1cm4gaWYgcHNhX291dHZlYy5iYXNlIGFkZHJlc3MgaXMgaW52YWxpZCBmb3IgY2xpZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9jYWxsX3dpdGhfaW52YWxpZF9vdXR2ZWNfYmFzZSgpICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX2NhbGwgd2l0aCBpbnZhbGlkIGFkZHJlc3MgZm9yIHBzYV9vdXR2ZWMuYmFzZTxiciAvPiBTZWxlY3Rpb24gb2YgaW52YWxpZCBiYXNlIGlzIGFzIGJlbG93OjxiciAvPiAgICAgaWYgY2FsbGVyID09IE5PTlNFQ1VSRTxiciAvPiAgICAgICAgLy8gUFNBIFJvVCBwb2ludGVyPGJyIC8+ICAgICAgICBpbnZhbGlkX2Jhc2UgPSBkcml2ZXJfbW1pb19iYXNlOzxiciAvPjxiciAvPiAgICAgZWxzZTxiciAvPjxiciAvPiAgICAgICAgaWYgKElTT0xBVElPTl9MRVZFTCA+IDEpPGJyIC8+ICAgICAgICAgICBpbnZhbGlkX2Jhc2UgPSBkcml2ZXJfbW1pb19iYXNlOzxiciAvPiAgICAgICAgZWxzZTxiciAvPiAgICAgICAgICAgaW52YWxpZF9iYXNlID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwNTIgICAgICAgIHwgcHNhX2NhbGwgZG9lcyBub3QgcmV0dXJuIGlmIHBzYV9pbnZlYy5iYXNlIGFkZHIgaXMgdmFsaWQgYnV0ICBwc2FfaW52ZWMuYmFzZStzaXplIGFkZHJlc3MgaXMgaW52YWxpZCBmb3IgY2xpZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfaW52ZWNfZW5kX2FkZHIoKSAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jYWxsIHdpdGggdmFsaWQgYWRkcmVzcyBmb3IgcHNhX2ludmVjLmJhc2UgYnV0IChwc2FfaW52ZWMuYmFzZSArIHBzYV9pbnZlYy5zaXplKSBwb2ludGluZyB0byBpbnZhbGlkIGFkZHJlc3M8YnIgLz4gU2VsZWN0aW9uIG9mIGJhc2UgYW5kIHNpemUgYXJlIGFzIGJlbG93OjxiciAvPiAgICAgaWYgY2FsbGVyID09IE5PTlNFQ1VSRTxiciAvPiAgICAgICAgICB2YWxpZF9iYXNlID0gbnNwZV9tbWlvX3JlZ2lvbl9iYXNlOzxiciAvPiAgICAgICAgICBpbnZhbGlkX3NpemUgPSAoZHJpdmVyX21taW9fcmVnaW9uX2Jhc2UgLSBuc3BlX21taW9fcmVnaW9uX2Jhc2UgKyAxKTs8YnIgLz48YnIgLz4gICAgIGVsc2U8YnIgLz48YnIgLz4gICAgICAgIGlmIChJU09MQVRJT05fTEVWRUwgPiAxKTxiciAvPiAgICAgICAgICB2YWxpZF9iYXNlID0gY2xpZW50X21taW9fcmVnaW9uX2Jhc2U7PGJyIC8+ICAgICAgICAgIGludmFsaWRfc2l6ZSA9IChkcml2ZXJfbW1pb19yZWdpb25fYmFzZSAtIGNsaWVudF9tbWlvX3JlZ2lvbl9iYXNlICsgMSk7PGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY2FsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9pMDUzICAgICAgICB8IHBzYV9jYWxsIGRvZXMgbm90IHJldHVybiBpZiBwc2Ffb3V0dmVjLmJhc2UgYWRkciBpcyB2YWxpZCBidXQgIHBzYV9pbnZlYy5iYXNlK3NpemVhZGRyZXNzIGlzIGludmFsaWQgZm9yIGNsaWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX2NhbGxfd2l0aF9pbnZhbGlkX291dHZlY19lbmRfYWRkcigpICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfY2FsbCB3aXRoIHZhbGlkIGFkZHJlc3MgZm9yIHBzYV9vdXR2ZWMuYmFzZSBidXQgKHBzYV9vdXR2ZWMuYmFzZSArIHBzYV9vdXR2ZWMuc2l6ZSkgcG9pbnRpbmcgdG8gaW52YWxpZCBhZGRyZXNzPGJyIC8+IFNlbGVjdGlvbiBvZiBiYXNlIGFuZCBzaXplIGFyZSBhcyBiZWxvdzo8YnIgLz4gICAgIGlmIGNhbGxlciA9PSBOT05TRUNVUkU8YnIgLz4gICAgICAgICAgdmFsaWRfYmFzZSA9IG5zcGVfbW1pb19yZWdpb25fYmFzZTs8YnIgLz4gICAgICAgICAgaW52YWxpZF9zaXplID0gKGRyaXZlcl9tbWlvX3JlZ2lvbl9iYXNlIC0gbnNwZV9tbWlvX3JlZ2lvbl9iYXNlICsgMSk7PGJyIC8+PGJyIC8+ICAgICBlbHNlPGJyIC8+PGJyIC8+ICAgICAgICBpZiAoSVNPTEFUSU9OX0xFVkVMID4gMSk8YnIgLz4gICAgICAgICAgdmFsaWRfYmFzZSA9IGNsaWVudF9tbWlvX3JlZ2lvbl9iYXNlOzxiciAvPiAgICAgICAgICBpbnZhbGlkX3NpemUgPSAoZHJpdmVyX21taW9fcmVnaW9uX2Jhc2UgLSBjbGllbnRfbW1pb19yZWdpb25fYmFzZSArIDEpOzxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2NhbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfaTA1NCAgICAgICAgfCBwc2FfY2FsbCBkb2VzIG5vdCByZXR1cm4gaWYgcHNhX291dHZlYy5iYXNlIGlzIG5vdCB3cml0YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9jYWxsX3dpdGhfbm90X3dyaXRhYmxlX291dHZlY19iYXNlKCkgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX2NhbGwgd2l0aCBub3Qgd3JpdGFibGUgKGZ1bmN0aW9uIGFkZHJlc3MgLSBjb2RlIG1lbW9yeSkgcHNhX291dHZlYy5iYXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwNTUgICAgICAgIHwgcHNhX3JlYWQgZG9lcyBub3QgcmV0dXJuIGlmICB0aGUgbWVtb3J5IHJlZmVyZW5jZSBmb3IgYnVmZmVyIGlzIGludmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfcmVhZF93aXRoX2ludmFsaWRfYnVmZmVyX2FkZHIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9yZWFkIHdpdGggaW52YWxpZCBidWZmZXIgYWRkci48YnIgLz5TZWxlY3Rpb24gb2YgYnVmZmVyIGFkZHJlc3MgaXMgYXMgYmVsb3c6PGJyIC8+aWYgKElTT0xBVElPTl9MRVZFTCA+IDEpPGJyIC8+ICAgICAgICAgIGJ1ZmZlciA9IGRyaXZlcl9tbWlvX3JlZ2lvbl9iYXNlOzxiciAvPmVsc2UgPGJyIC8+ICAgICAgICAgYnVmZmVyID0gTlVMTDsgPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9pMDU2ICAgICAgICB8IHBzYV9yZWFkIGRvZXMgbm90IHJldHVybiBpZiAgdGhlIG1lbW9yeSByZWZlcmVuY2UgZm9yIGJ1ZmZlciBpcyBub3Qgd3JpdGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3JlYWRfd2l0aF9ub3Rfd3JpdGFibGVfYnVmZmVyX2FkZHIoKSAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfcmVhZCB3aXRoIG5vdCB3cml0YWJsZSAoZnVuY3Rpb24gYWRkcmVzcy0gY29kZSBtZW1vcnkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX3JlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfaTA1NyAgICAgICAgfCBwc2Ffd3JpdGUgZG9lcyBub3QgcmV0dXJuIGlmIHRoZSBtZW1vcnkgcmVmZXJlbmNlIGZvciBidWZmZXIgaXMgaW52YWxpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV93cml0ZV93aXRoX2ludmFsaWRfYnVmZmVyX2FkZHIoKSAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX3dyaXRlIHdpdGggaW52YWxpZCBidWZmZXIgYWRkci48YnIgLz4gU2VsZWN0aW9uIG9mIGJ1ZmZlciBhZGRyZXNzIGlzIGFzIGJlbG93OjxiciAvPmlmIChJU09MQVRJT05fTEVWRUwgPiAxKTxiciAvPiAgICAgICAgICBidWZmZXIgPSBkcml2ZXJfbW1pb19yZWdpb25fYmFzZTs8YnIgLz5lbHNlIDxiciAvPiAgICAgICAgIGJ1ZmZlciA9IE5VTEw7IDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwNTggICAgICAgIHwgMS4gcHNhX25vdGlmeSgpIGlzIHVzZWQgdG8gYXN5bmNocm9ub3VzbHkgd2FrZSB1cCBhbm90aGVyIFNlY3VyZSBQYXJ0aXRpb24uIFRoZSByZWNlaXZpbmcgcGFydGl0aW9uIHVzZXMgcHNhX3dhaXQoKSB0byBkZXRlY3QsIG9yIHdhaXQgZm9yLCBhc3NlcnRpb24gb2YgaXRzIFBTQV9ET09SQkVMTCBzaWduYWwuIFRoZSB2YWx1ZSBvZiBwYXJ0aXRpb25faWQgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyBhcyB0aGUgdGFyZ2V0IG9mIG5vdGlmaWNhdGlvbiBtdXN0IGJlIGEgU2VjdXJlIFBhcnRpdGlvbi4gPGJyIC8+Mi4gcHNhX2NsZWFyKCkgY2xlYXJzIHRoZSBQU0FfRE9PUkJFTEwgc2lnbmFsLiAgPGJyIC8+My4gcHNhX2NsZWFyKCk6IFRoZSB0YXJnZXQgUGFydGl0aW9uIGRvb3JiZWxsIHdpbGwgcmVtYWluIGFzc2VydGVkIHVudGlsIGl0IGNhbGxzIHBzYV9jbGVhcigpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfZG9vcmJlbGxfc2lnbmFsKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBDbGllbnQgY29ubmVjdHMgdG8gUm9UIHNlcnZpY2UuIDxiciAvPjIuIFJvVCBzZXJ2aWNlcyBleGVjdXRlcyBhc3NlcnRzIFBTQV9ET09SQkVMTCBzaW5nYWwgYmFjayB0byBjbGllbnQgYWZ0ZXIgYWNjZXB0aW5nIHRoZSBjb25uZWN0aW9uLjxiciAvPjMuIENsaWVudCBjaGVja3MgdGhlIGRlbGl2ZXJ5IG9mIFBTQV9ET09SQkVMTCBzaW5nYWwgdXNpbmcgcHNhX3dhaXQoKS48YnIgLz40LiBDbGllbnQgY2xlYXJzIHRoZSBkb29yYmVsbCBhbmQgY2xvc2VzIHRoZSBjb25uZWN0aW9uLiA8YnIgLz41LiBSb1Qgc2VydmljZSByZWNlaXZlcyB0aGUgY2xvc2luZyBjb25uZWN0aW9uIHJlcXVlc3QuPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffbm90aWZ5LHBzYV93YWl0LHBzYV9jbGVhciAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9pMDU5ICAgICAgICB8IHBzYV9ub3RpZnkgZG9lcyBub3QgcmV0dXJuIGlmIFBhcnRpdGlvbiBJRCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgU2VjdXJlIFBhcnRpdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX25vdGlmeV93aXRoX25lZ19wYXJ0X2lkKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2Ffbm90aWZ5IHdpdGggbmVnYXRpdmUgcGFydGl0aW9uIGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX25vdGlmeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfaTA2MCAgICAgICAgfCBwc2Ffbm90aWZ5IGRvZXMgbm90IHJldHVybiBpZiBQYXJ0aXRpb24gSUQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIFNlY3VyZSBQYXJ0aXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9ub3RpZnlfd2l0aF9pbnZhbGlkX3Bvc19wYXJ0X2lkKCkgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX25vdGlmeSB3aXRoIHBvc2l0aXZlIHBhcnRpdGlvbiBpZCB3aGljaCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgcGxhdGZvcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9ub3RpZnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwNjEgICAgICAgIHwgcHNhX2NsZWFyIGRvZXMgbm90IHJldHVybiBpZiBUaGUgU2VjdXJlIFBhcnRpdGlvbr9zIGRvb3JiZWxsIHNpZ25hbCBpcyBub3QgY3VycmVudGx5IGFzc2VydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfY2xlYXJfYXRfdW5hc3NlcnRlZF9kb29yYmVsbF9zaWcoKSAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jbGVhciB3aGVuIGRvb3JiZWxsIHNpZ25hbCBpcyBub3QgYXNzZXJ0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY2xlYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9pMDYyICAgICAgICB8IHBzYV93YWl0KCkgZG9lcyBub3QgcmV0dXJuIHNpZ25hbF9tYXNrIGRvZXMgbm90IGluY2x1ZGUgYW55IGFzc2lnbmVkIHNpZ25hbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJfdGVzdF9wc2Ffd2FpdF93aXRoX3VuYXNzaWduZWRfc2lnbmFsKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2Ffd2FpdCB3aXRoIHNpZ25hbCBtYXNrIHRoYXQgZG9lc24ndCBpbmNsdWRlIGFueSBhc3NpZ25lZCBzaWduYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX3dhaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfaTA2MyAgICAgICAgfCBwc2Ffd2FpdCgpIHJldHVybnMgdGhlIFNlY3VyZSBQYXJ0aXRpb24gaW50ZXJydXB0IHNpZ25hbHMgdGhhdCBoYXZlIGJlZW4gYXNzZXJ0ZWQgZnJvbSB0aGUgc3Vic2V0IG9mIHNpZ25hbHMgaW5kaWNhdGVkIGluIHRoZSBiaXRtYXNrIHByb3ZpZGVkLiBUaGUgbWFzayBtdXN0IGNvbnRhaW4gdGhlIHNldCBvZiBzaWduYWxzIHRoZSBjYWxsZXIgaXMgaW50ZXJlc3RlZCBpbiBoYW5kbGluZy4gU2lnbmFscyB0aGF0IGFyZSBub3QgaW4gc2lnbmFsX21hc2sgc2hvdWxkIGJlIGlnbm9yZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV93YWl0X3NpZ25hbF9tYXNrKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIFNlbGVjdCBzaWduYWxfbWFzayA9ICAgKFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHIHwgU0VSVkVSX1JFTEFYX01JTk9SX1ZFUlNJT05fU0lHKTsgPGJyIC8+Mi4gU2VydmVyIHBhcnRpdGlvbiByZXF1ZXN0cyB0aGUgY2xpZW50IHBhcnRpdGlvbiB0byBtYWtlIGNvbm5lY3Rpb24gdXNpbmcgIHNpZD1TRVJWRVJfU0VDVVJFX0NPTk5FQ1RfT05MWV9TSUQuICBUaGlzIGNvbm5lY3Rpb24gcmVxdWVzdCBhY3QgYXMgaXJyaXRhdG9yIHRvIHBzYV93YWl0KHNpZ25hbF9tYXNrKSBjYWxsIGFuZCBpdCBpcyB1c2VkIHRvIGNvdmVyIHRoZSBydWxlIC0gU2lnbmFscyB0aGF0IGFyZSBub3QgaW4gc2lnbmFsX21hc2sgc2hvdWxkIGJlIGlnbm9yZWQgYnkgcHNhX3dhaXQuPGJyIC8+My4gTlNQRSBjbGllbnQgY29ubmVjdHMgdG8gYSBzZXJ2ZXIgcGFydGl0aW9uIHVzaW5nIFNJRCB3aG9zZSBzaWduYWwgYXJlIHBhcnQgb2Ygc2lnbmFsX21hc2s8YnIgLz40LiBTZXJ2ZXIgcGFydGl0aW9uIGV4ZWN1dGVzIHBzYV93YWl0IHdpdGggbmVjZXNzYXJ5IHNpZ25hbF9tYXNrLiBSb1Qgc2VydmljZSBjaGVja3MgdGhhdCByZXR1cm5lZCBzaWduYWwgdmFsdWUgaXMgc3Vic2V0IG9mIHNpZ25hbHMgaW5kaWNhdGVkIGluIHRoZSBzaWduYWxfbWFzayA8YnIgLz4gNS4gQXQgdGhlIGVuZCwgc2VydmVyIHBhcnRpdGlvbiBjb21wbGV0ZXMgdGhlIHN0YXJ2ZWQgKGlycml0YXRvcikgY29ubmVjdGlvbiByZXF1ZXN0IG9mIFNFUlZFUl9TRUNVUkVfQ09OTkVDVF9PTkxZX1NJRC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV93YWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X2kwNjQgICAgICAgIHwgcHNhX2VvaSBkb2VzIG5vdCByZXR1cm4gaWYgaXJxX3NpZ25hbCBpcyBub3QgYW4gaW50ZXJydXB0IHNpZ25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkcml2ZXJfdGVzdF9wc2FfZW9pX3dpdGhfbm9uX2ludHJfc2lnbmFsKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHRvIHBzYV9lb2kgd2l0aCBub24taW50ZXJydXB0IHNpZ25hbChQU0FfRE9PUkJFTEwpLjxiciAvPiBOb3RlOiBUaGUgaW50ZXJydXB0IHJlbGF0ZWQgdGVzdCBjaGVjayBpcyBjYXB0dXJlZCBpbiBkcml2ZXJfcGFydGl0aW9uLmMgYXMgdGhpcyBpcyB0aGUgb25seSBwYXJ0aXRpb24gaW4gdGVzdCBzdWl0ZSB0aGF0IGhvbGRzIHRoZSBpbnRlcnJ1cHQgbGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfZW9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9pMDY1ICAgICAgICB8IHBzYV9lb2kgZG9lcyBub3QgcmV0dXJuIGlmIGlycV9zaWduYWwgaXMgbm90IGN1cnJlbnRseSBhc3NlcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZHJpdmVyX3Rlc3RfcHNhX2VvaV93aXRoX3VuYXNzZXJ0ZWRfc2lnbmFsKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCB0byBwc2FfZW9pIHdpdGggaW50ZXJydXB0IHNpZ25hbCB3aGljaCBpcyBjdXJyZW50bHkgbm90IGFzc2VydGVkLjxiciAvPiBOb3RlOiBUaGUgaW50ZXJydXB0IHJlbGF0ZWQgdGVzdCBjaGVjayBpcyBjYXB0dXJlZCBpbiBkcml2ZXJfcGFydGl0aW9uLmMgYXMgdGhpcyBpcyB0aGUgb25seSBwYXJ0aXRpb24gaW4gdGVzdCBzdWl0ZSB0aGF0IGhvbGRzIHRoZSBpbnRlcnJ1cHQgbGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2VvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfaTA2NiAgICAgICAgfCBwc2FfZW9pIGRvZXMgbm90IHJldHVybiBpZiBpcnFfc2lnbmFsIGluZGljYXRlcyBtb3JlIHRoYW4gb25lIHNpZ25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRyaXZlcl90ZXN0X3BzYV9lb2lfd2l0aF9tdWx0aXBsZV9zaWduYWxzKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgdG8gcHNhX2VvaSB3aXRoIGlycV9zaWduYWwgcHJvdmlkZWQgd2l0aCBtdWx0aXBsZSBzaWduYWxzLjxiciAvPiBOb3RlOiBUaGUgaW50ZXJydXB0IHJlbGF0ZWQgdGVzdCBjaGVjayBpcyBjYXB0dXJlZCBpbiBkcml2ZXJfcGFydGl0aW9uLmMgYXMgdGhpcyBpcyB0aGUgb25seSBwYXJ0aXRpb24gaW4gdGVzdCBzdWl0ZSB0aGF0IGhvbGRzIHRoZSBpbnRlcnJ1cHQgbGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9lb2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgMS4gcHNhX3dhaXQoKSByZXR1cm5zIHRoZSBTZWN1cmUgUGFydGl0aW9uIGludGVycnVwdCBzaWduYWxzIHRoYXQgaGF2ZSBiZWVuIGFzc2VydGVkIGZyb20gdGhlIHN1YnNldCBvZiBzaWduYWxzIGluZGljYXRlZCBpbiB0aGUgYml0bWFzayBwcm92aWRlZC4gKHBzYV93YWl0IEFQSSB0byByZWNpZXZlIGludGVycnVwdCBzaWduYWwpIDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLiBwc2FfZW9pKCk6SW5mb3JtcyB0aGUgU1BNIHRoYXQgYW4gaW50ZXJydXB0IGhhcyBiZWVuIGhhbmRsZWQgKGVuZCBvZiBpbnRlcnJ1cHQpLiBUaGlzIHdpbGwgcmUtZW5hYmxlIHRoZSBpbnRlcnJ1cHQgbGluZS4gPGJyIC8+My5wc2FfZW9pKCk6IEEgc2lnbmFsIHJlbWFpbnMgYWN0aXZlIHVudGlsIGl0IGlzIHByb2Nlc3NlZCBieSBwc2FfZW9pIDxiciAvPjQuIE1hbmlmZXN0LSBpcnFzIChvcHRpb25hbCwgdW5pcXVlKVRoaXMgYXR0cmlidXRlIGlzIGEgbGlzdCBvZiBJUlEgbGluZXMgd2hpY2ggYXJlIGFzc2lnbmVkIHRvIHRoZSBTZWN1cmUgUGFydGl0aW9uLkEgU2VjdXJlIFBhcnRpdGlvbiBhbHdheXMgaGFzIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gYW4gYXNzaWduZWQgSVJRLiBTZWN1cmUgUGFydGl0aW9ucyBhcmUgbm90IGFsbG93ZWQgdG8gc2hhcmUgSVJRcyB3aXRoIG90aGVyIFNlY3VyZSBQYXJ0aXRpb25zLkVhY2ggSVJRIHNwZWNpZmllZCBtdXN0IHByb3ZpZGUgYSBzaWduYWwgZmllbGQuIFRoaXMgZmllbGQgY29udGFpbnMgYSBzeW1ib2xpYyBuYW1lIGZvciB0aGUgc2lnbmFsLCB1c2VkIGJ5IHRoZSBTUE0gdG8gaW5kaWNhdGUgd2hlbiB0aGUgaW50ZXJydXB0IGlzIGFzc2VydGVkLiBFYWNoIElSUSBsaW5lIGlzIGRlY2xhcmVkIGFzIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nOr8gbGluZV9udW06IEEgdmFsaWQgSVJRIG51bWJlciBmb3IgdGhlIHBsYXRmb3JtLr8gbGluZV9uYW1lOiBBIG5hbWVkIElSUSwgcmVwcmVzZW50ZWQgYnkgYSBzdHJpbmcgaWRlbnRpZmllci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUaGUgdGVzdCBmb3IgdGhpcyBzY2VuYXJpbyB3aWxsIGJlIGltcGxlbWVudGVkIGluIGZ1dHVyZSByZWxlYXNlIGZvciBQU0EgVGVzdCBzdWl0ZS4gVGVzdCBMaW1pdGF0aW9uOjxiciAvPjEuIFJ1bGVzIGFyb3VuZCBzaGFyaW5nIG9mIGlycSBsaW5lcyBjYW4ndCBiZSB0ZXN0ZWQgYXMgc3BlY2lmaXlpbmcgaXQgY2FuIHJlc3VsdCBpbnRvIGJ1aWxkIGVycm9yLjxiciAvPjIuIFRlc3Qgc3VpdGUgcGFydGl0aW9uIG1hbmlmZXN0cyBhcmUgcmVseSBvbiBvbmx5IGxpbmVfbnVtIGZvciBzcGVjaWZ5aW5nIGlycSBsaW5lIG51bWJlciBhcyBsaW5lX25hbWUgaXMgc3ViamVjdCB0byByZXNvbHZlZCBpbiBJbXBsZW1lbnRhdGlvbiBkZWZpbmVkIG1hbm5lci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2Ffd2FpdCxwc2FfZW9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBObyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICB8IE9ubHkgQ29kZSBpcyBleGVjdXRhYmxlIGluIHNlY3VyZSBwYXJ0aXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGhlIHRlc3QgZm9yIHRoaXMgc2NlbmFyaW8gd2lsbCBiZSBpbXBsZW1lbnRlZCBpbiBmdXR1cmUgcmVsZWFzZSBmb3IgUFNBIFRlc3Qgc3VpdGUuIENoZWNrczo8YnIgLz4xLiBFeGVjdXRlIGluc3RydWN0aW9uIGZyb20gd3JpdGFibGUgbWVtb3J5PGJyIC8+Mi4gRXhlY3V0ZSBpbnN0cnVjdGlvbiBmcm9tIHJlYWQtb25seSBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgfCBPbmx5IFByaXZhdGUgZGF0YSBpcyB3cml0YWJsZSBpbiBzZWN1cmUgcGFydGl0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRoZSB0ZXN0IGZvciB0aGlzIHNjZW5hcmlvIHdpbGwgYmUgaW1wbGVtZW50ZWQgaW4gZnV0dXJlIHJlbGVhc2UgZm9yIFBTQSBUZXN0IHN1aXRlLiBDaGVja3M6PGJyIC8+MS4gV3JpdGUgdG8gY29kZSBzcGFjZTxiciAvPjIuIFdyaXRlIHRvIGNvbnN0YW50IGRhdGEgc3BhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgSXNvbGF0aW9uIExldmVsLTEgcnVsZXM6PGJyIC8+STM6IElmIGRvbWFpbiBBIG5lZWRzIHByb3RlY3Rpb24gZnJvbSBkb21haW4gQiwgdGhlbiBQcml2YXRlIGRhdGEgaW4gZG9tYWluIEEgY2Fubm90IGJlIGFjY2Vzc2VkIGJ5IGRvbWFpbiBCLiBGcm9tIEIgYWNjZXNzIGJlbG93IGFzc2VydHMgb2YgQTo8YnIgLz4tIFZhcmlhYmxlczxiciAvPi0gRXhlY3V0aW9uIHN0YWNrczxiciAvPi0gQWxsb2NhdGlvbiBoZWFwPGJyIC8+LSBNZW1vcnktbWFwcGVkIEkvTyByZWdpb25zPGJyIC8+PGJyIC8+V2hlcmUsIEEgJiBCIGNvbWJpbmF0aW9uIGFyZTo8YnIgLz5BPUFwcGxpY2F0aW9uIFJvVCAmIEI9TlNQRTxiciAvPkE9UFNBIFJvVCAmIEI9TlNQRTxiciAvPkE9U1BNICYgQj1OU1BFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUaGUgdGVzdCBmb3IgdGhpcyBzY2VuYXJpbyB3aWxsIGJlIGltcGxlbWVudGVkIGluIGZ1dHVyZSByZWxlYXNlIGZvciBQU0EgVGVzdCBzdWl0ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBObyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICB8IElzb2xhdGlvbiBMZXZlbC0yIHJ1bGVzLSBJbiBhZGRpdGlvbiB0byB0aGUgTGV2ZWwgMSByZXF1aXJlbWVudHMsIExldmVsIDIgZmlybXdhcmUgaXNvbGF0aW9uIG11c3QgZm9sbG93IGJlbG93IHJ1bGU6PGJyIC8+STM6IElmIGRvbWFpbiBBIG5lZWRzIHByb3RlY3Rpb24gZnJvbSBkb21haW4gQiwgdGhlbiBQcml2YXRlIGRhdGEgaW4gZG9tYWluIEEgY2Fubm90IGJlIGFjY2Vzc2VkIGJ5IGRvbWFpbiBCLiBGcm9tIEIgYWNjZXNzIGJlbG93IGFzc2VydHMgb2YgQTo8YnIgLz4tIFZhcmlhYmxlczxiciAvPi0gRXhlY3V0aW9uIHN0YWNrczxiciAvPi0gQWxsb2NhdGlvbiBoZWFwPGJyIC8+LSBNZW1vcnktbWFwcGVkIEkvTyByZWdpb25zPGJyIC8+PGJyIC8+V2hlcmUsIEEgJiBCIGNvbWJpbmF0aW9uIGFyZTo8YnIgLz5BPVBTQSBSb1QgcGFydGl0aW9uICYgQj1BcHBsaWNhdGlvbiBSb1QgcGFydGl0aW9uPGJyIC8+QT1TUE0gJiBCPUFwcGxpY2F0aW9uIFJvVCBwYXJ0aXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGhlIHRlc3QgZm9yIHRoaXMgc2NlbmFyaW8gd2lsbCBiZSBpbXBsZW1lbnRlZCBpbiBmdXR1cmUgcmVsZWFzZSBmb3IgUFNBIFRlc3Qgc3VpdGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgfCBJc29sYXRpb24gTGV2ZWwtMyBydWxlcy0gSW4gYWRkaXRpb24gdG8gdGhlIExldmVsIDIgcmVxdWlyZW1lbnRzLCBMZXZlbCAzIGZpcm13YXJlIGlzb2xhdGlvbiBtdXN0IGZvbGxvdyBiZWxvdyBydWxlOjxiciAvPkkzOiBJZiBkb21haW4gQSBuZWVkcyBwcm90ZWN0aW9uIGZyb20gZG9tYWluIEIsIHRoZW4gUHJpdmF0ZSBkYXRhIGluIGRvbWFpbiBBIGNhbm5vdCBiZSBhY2Nlc3NlZCBieSBkb21haW4gQi4gRnJvbSBCIGFjY2VzcyBiZWxvdyBhc3NlcnRzIG9mIEE6PGJyIC8+LSBWYXJpYWJsZXM8YnIgLz4tIEV4ZWN1dGlvbiBzdGFja3M8YnIgLz4tIEFsbG9jYXRpb24gaGVhcDxiciAvPi0gTWVtb3J5LW1hcHBlZCBJL08gcmVnaW9uczxiciAvPjxiciAvPldoZXJlLCBBICYgQiBjb21iaW5hdGlvbiBhcmU6PGJyIC8+QT1TZWN1cmUgUGFydGl0aW9uICYgQj0gT3RoZXIgU2VjdXJlIFBhcnRpdGlvbjxiciAvPkE9U1BNICYgQj1TZWN1cmUgUGFydGl0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRoZSB0ZXN0IGZvciB0aGlzIHNjZW5hcmlvIHdpbGwgYmUgaW1wbGVtZW50ZWQgaW4gZnV0dXJlIHJlbGVhc2UgZm9yIFBTQSBUZXN0IHN1aXRlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgIHwgQSBTZWN1cmUgUGFydGl0aW9uIGlzIGd1YXJhbnRlZWQgdG8gYmUgYWJsZSB0byByZWFkIGFuZCB3cml0ZSBpdHMgcHJpdmF0ZSBoZWFwIHJlZ2lvbnMuPGJyIC8+TWFuaWZlc3QgUGFyYW1ldGVyLSBoZWFwX3NpemUuIFByb3BlcnRpZXM6IE9wdGlvbmFsLlRoaXMgYXR0cmlidXRlIGluZGljYXRlcyB0aGUgU2VjdXJlIFBhcnRpdGlvbr9zIGhlYXAgc2l6ZSBpbiBieXRlcy5UaGUgc2l6ZSB2YWx1ZSBpcyByZXByZXNlbnRlZCBlaXRoZXIgYXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nLklmIHRoaXMgZmllbGQgaXMgc3BlY2lmaWVkIGluIHRoZSBtYW5pZmVzdCB0aGVuIHRoZSB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLiBJZiB0aGlzIGZpZWxkIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIG1hbmlmZXN0IHRoZW4gdGhlIFNQTSBjYW4gYXNzdW1lIHRoZSBzaXplIGlzIDAuSWYgdGhlIGZyYW1ld29yayBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gQVBJLCB0aGVuIGEgbWFuaWZlc3Qgd2hpY2ggc3BlY2lmaWVzIGEgaGVhcF9zaXplIG11c3QgcHJvZHVjZSBhIGJ1aWxkIGVycm9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUaGUgdGVzdCBmb3IgdGhpcyBzY2VuYXJpbyB3aWxsIGJlIGltcGxlbWVudGVkIGluIGZ1dHVyZSByZWxlYXNlIGZvciBQU0EgVGVzdCBzdWl0ZS4gQ2hlY2sgdGhhdCBzcGVjaWZpZWQgaGVhcCBtZW1vcnkgIGlzIHdyaXRhYmxlIHVzaW5nIG1hbGxvYyBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBObyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgTk9fRVhQTElDSVRfVEVTVCB8IEEgU2VjdXJlIFBhcnRpdGlvbiBpcyBndWFyYW50ZWVkIHRvIGJlIGFibGUgdG8gIHJlYWQgYW5kIHdyaXRlIGl0cyBwcml2YXRlIHN0YWNrLiA8YnIgLz5NYW5pZmVzdCBQYXJhbWV0ZXItIHN0YWNrX3NpemUgKHJlcXVpcmVkKSA8YnIgLz5QYXJ0aXRpb24ncyBzdGFjayBzaXplIGluIGJ5dGVzLiBUaGUgc2l6ZSB2YWx1ZSBtdXN0IGJlIHJlcHJlc2VudGVkIGVpdGhlciBhcyBhIHBvc2l0aXZlIGludGVnZXIgb3IgYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm8gZXhwbGljaXQgdGVzdCB3cml0dGVuIHRvIGNvdmVyIHRoaXMgcnVsZS4gUFNBIElQQyB0ZXN0cyBtYW5pZmVzdHMgYXJlIHByb3ZpZGVkIHdpdGggdGVzdHMgcGFydGl0aW9uIHJlcXVpcmVkIHN0YWNrX3NpemUuICBBIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIG9mIHRlc3RzIHBhcnRpdGlvbiBjb2RlIHdpdGhvdXQgc3RhY2sgYWNjZXNzIHJlbGF0ZWQgZmF1bHRzLCBpbmRpcmVjdGx5IHZlcmlmeSB0aGlzIGZpZWxkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IE5PX0VYUExJQ0lUX1RFU1QgfCBtbWlvX3JlZ2lvbnMgKG9wdGlvbmFsLCB1bmlxdWUpOiA8YnIgLz5MaXN0IG9mIG1lbW9yeS1tYXBwZWQgSS9PIHJlZ2lvbiBvYmplY3RzIHdoaWNoIHRoZSBTZWN1cmUgUGFydGl0aW9uIG5lZWRzIGFjY2VzcyB0by4gIEEgU2VjdXJlIFBhcnRpdGlvbiBhbHdheXMgaGFzIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gYW4gTU1JTyByZWdpb24uIFNlY3VyZSBQYXJ0aXRpb25zIGFyZSBub3QgcGVybWl0dGVkIHRvIHNoYXJlIE1NSU8gcmVnaW9ucyB3aXRoIG90aGVyIFNlY3VyZSBQYXJ0aXRpb25zLjxiciAvPkFuIE1NSU8gcmVnaW9uIGNhbiBiZSBkZWZpbmVkIGVpdGhlciBhcyBhOjxiciAvPm51bWJlcmVkX3JlZ2lvbjxiciAvPm5hbWVkX3JlZ2lvbjxiciAvPkEgbnVtYmVyZWQgcmVnaW9uIGNvbnNpc3RzIG9mIGEgYmFzZSBhZGRyZXNzIGFuZCBhIHNpemUuIFRoZSBzaXplIG11c3QgYmUgcmVwcmVzZW50ZWQgZWl0aGVyIGFzIGEgcG9zaXRpdmUgaW50ZWdlciBvciBhcyBhIGhleGFkZWNpbWFsIHN0cmluZy4gVGhlIGJhc2UgYWRkcmVzcyBtdXN0IGJlIHJlcHJlc2VudGVkIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nLjxiciAvPk1NSU8gcmVnaW9ucyBtdXN0IG5vdCBvdmVybGFwLjxiciAvPkFuIE1NSU8gcmVnaW9uIG11c3QgaW5jbHVkZSBhIHBlcm1pc3Npb24gYXR0cmlidXRlLiBUaGUgZm9sbG93aW5nIHBlcm1pc3Npb25zIGFyZSBhdmFpbGFibGU6PGJyIC8+UkVBRC1PTkxZPGJyIC8+UkVBRC1XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENvbW1lbnRzOjxiciAvPjEuIFBTQSBJUEMgdGVzdHMgZGV2aWNlIGRyaXZlciBwYXJ0aXRpb24gbWFuaWZlc3RzIGFyZSBwcm92aWRlZCB3aXRoIHRoZXNlIGZpZWxkcy4gQSBzdWNjZXNzZnVsIGNvbXBpbGF0aW9uIGFuZCBydW4gb2YgZGV2aWNlIGRyaXZlciBwYXJ0aXRpb24gY29kZSBpbmRpcmVjdGx5IHZlcmlmeSB0aGlzIGZpZWxkLiA8YnIgIC8+Mi4gUnVsZXMgYXJvdW5kIHNoYXJpbmcgb2YgTU1JTyByZWdpb25zIGlzIGNvdmVyZWQgYXMgcGFydCBvZiBpc29sYXRpb24gdGVzdHMuPGJyICAvPjMuIFJ1bGVzIGFyb3VuZCBvdmVybGFwcGluZyBvZiBNTUlPIHJlZ2lvbnMgY2FuJ3QgYmUgdGVzdGVkIGFzIHNwZWNpZnlpbmcgdGhhdCBpbnRvIG1hbmlmZXN0IHJlc3VsdHMgaW50byBjb21waWxhdGlvbiBmYWlsLiA8YnIgLz40LiBUZXN0IHN1aXRlIHBhcnRpdGlvbiBtYW5pZmVzdHMgYXJlIHJlbHkgb24gbnVtYmVyZWRfcmVnaW9uIG9ubHkgYXMgbmFtZWRfcmVnaW9uIGlzIHN1YmplY3QgdG8gcmVzb2x2ZWQgaW4gSW1wbGVtZW50YXRpb24gZGVmaW5lZCBtYW5uZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCBOT19FWFBMSUNJVF9URVNUIHwgTWFuaWZlc3QgUGFyYW1ldGVyIC0gaWQgKHJlcXVpcmVkLCB1bmlxdWUpOkEgU2VjdXJlIFBhcnRpdGlvbiBJRCBtdXN0IGJlIGEgbm9uLXplcm8gcG9zaXRpdmUgMzItYml0IHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQU0EgSVBDIHRlc3RzIHBhcnRpdGlvbnMgYXJlIHByb3ZpZGVkIHdpdGggdW5pcXVlIFBhcnRpdGlvbiBJRCAod2hpY2ggaXMgbm9uLXplcm8gcG9zaXRpdmUpIGFuZCBuYW1lIGZpZWxkIGNvbXBsaWFudCB0byBtYW5pZmVzdCBydWxlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgTk9fRVhQTElDSVRfVEVTVCB8IE1hbmlmZXN0IFBhcmFtZXRlci0gIHR5cGUgKHJlcXVpcmVkKSA8YnIgLz5XaGV0aGVyIHRoZSBQYXJ0aXRpb24gaXMgYSBwYXJ0IG9mIHRoZSBQU0EgUm9vdCBvZiBUcnVzdCBTZXJ2aWNlcyBvciBpcyBwYXJ0IG9mIHRoZSBBcHBsaWNhdGlvbiBSb290IG9mIFRydXN0IFNlcnZpY2VzLlR5cGUgbXVzdCBiZSBhc3NpZ25lZCBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6LSBBUFBMSUNBVElPTi1ST1QtIFBTQS1ST1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFNBIElQQyB0ZXN0cyBwYXJ0aXRpb24gZmlsZXMgYXJlIHByb3ZpZGVkIHdpdGggdGhlc2UgZmllbGRzLiBBY2Nlc3MgcGVybWlzc2lvbiBiZWhhdmlvdXIgcmVsYXRlZCB0byB0aGVzZSBmaWVsZHMgd2lsbCBiZSB2ZXJpZmllZCBhcyBwYXJ0IG9mIHRlc3RzIGNvdmVyaW5nIGlzb2xhdGlvbiBsZXZlbCBydWxlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IE5PX0VYUExJQ0lUX1RFU1QgfCBNYW5pZmVzdCBQYXJhbWV0ZXIgLSBkZXNjcmlwdGlvbiAob3B0aW9uYWwpIDxiciAvPlRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIGEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gYW5kIGNvbW1lbnRzIGZvciB0aGUgU2VjdXJlIFBhcnRpdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRlc3Qgc3VpdGUgbWFuaWZlc3RzIGFyZSBwcm92aWRlZCB3aXRoIHRoZXNlIGZpZWxkIHdpdGggYWRoZXJlIHRvIG1hbmlmZXN0IHJ1bGVzLiBNYW5pZmVzdCBidWlsZCB0b29sIHBhcnNlciBtdXN0IHBhcnNlIHRoaXMgZmllbGQgd2l0aG91dCBhbnkgY29tcGlsYXRpb24gZmFpbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCBOT19FWFBMSUNJVF9URVNUIHwgTWFuaWZlc3QgUGFyYW1ldGVyIC1lbnRyeV9wb2ludCAocmVxdWlyZWQsIHVuaXF1ZSkgPGJyIC8+VGhlIFBhcnRpdGlvbiBlbnRyeSBwb2ludCBpbiB0aGUgZm9ybSBvZiBhbiBDIGZ1bmN0aW9uIHN5bWJvbC4gQSBzaW5nbGUgZW50cnkgcG9pbnQgbXVzdCBiZSBwcm92aWRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBObyBleHBsaWNpdCB0ZXN0IHdyaXR0ZW4gdG8gY292ZXIgdGhpcyBydWxlLiBUZXN0IHN1aXRlIG1hbmlmZXN0cyBhcmUgcHJvdmlkZWQgd2l0aCB0ZXN0cyBwYXJ0aXRpb24gZW50cnlfcG9pbnQuICBBIHN1Y2Nlc3NmdWwgbGF1bmNoIGFuZCBydW4gb2YgdGVzdHMgcGFydGl0aW9uIGNvZGUgaW5kaXJlY3RseSB2ZXJpZnkgdGhpcyBmaWVsZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgTk9fRVhQTElDSVRfVEVTVCB8IE1hbmlmZXN0IFBhcmFtZXRlci0gbGlua2VyX3BhdHRlcm4oUmVxdWlyZWQpIDxiciAvPlRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIHRoZSBtaW5pbXVtIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGxpbmsgYSBTZWN1cmUgUGFydGl0aW9uv3MgY29tcGlsZWQgc3RhdGljIG9iamVjdHMuIEl0IGNvbnRhaW5zIGEgbWFuZGF0b3J5IHN1YiBhdHRyaWJ1dGUgY2FsbGVkIG9iamVjdF9saXN0LlRoZSBvYmplY3RfbGlzdCBpcyBhbiBleHBsaWNpdCBsaXN0IG9mIHRoZSBleHBlY3RlZCBiaW5hcnkgb2JqZWN0cyBvZiBhIFNlY3VyZSBQYXJ0aXRpb24gb25jZSBpdCBpcyBjb21waWxlZC4gRm9yIGV4YW1wbGUsIHRoaXMgbGlzdCBtYXkgY29udGFpbiB0aGUgbmFtZXMgb2YgdGhlIG1haW4gZW50cnktcG9pbnQgYmluYXJ5IGFuZCBhbnkgb3RoZXIgc3RhdGljIGxpYnJhcnkgb2JqZWN0cyB0aGF0IHRoZSBTZWN1cmUgUGFydGl0aW9uIGNvbnRhaW5zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm8gZXhwbGljaXQgdGVzdCB3cml0dGVuIHRvIGNvdmVyIHRoaXMgcnVsZS4gVGVzdCBzdWl0ZSBtYW5pZmVzdHMgYXJlIHByb3ZpZGVkIHdpdGggbGlua2VyX3BhdHRlcm4gZmlsbGVkIHdpdGggcmVxdWlyZWQgdGVzdHMgcGFydGl0aW9uIG9iamVjdCBhcmNoaXZlcy4gQSBzdWNjZXNzZnVsIHVzZSBvZiB0aGlzIGZpZWxkIHRvIGxhdW5jaCB0aGUgcGFydGl0aW9ucyBhbmQgZnVsbGZpbGxpbmcgdGhlIFBTQSBkZWZpbmVkIGlzb2xhdGlvbiByZXF1aXJlbWVudCB3aGljaCBhcmUgYWxzbyBiZWluZyB2ZXJpZmllZCBpbiBpc29sYXRpb24gdGVzdHMsICBpbmRpcmVjdGx5IHZlcmlmeSB0aGlzIGZpZWxkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IE5PX0VYUExJQ0lUX1RFU1QgfCBUaGUgU1BNIG11c3QgZXZlbnR1YWxseSBkZWxpdmVyIGFsbCBzaWduYWxzIGFuZCBJUEMgbWVzc2FnZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vIGV4cGxpY2l0IHRlc3Qgd3JpdHRlbiB0byBjb3ZlciB0aGlzIHJ1bGUuIEhvd2V2ZXIgYWxsIFBTQSBJUEMgdGVzdHMgYXJlIHdyaXR0ZW4gd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCB0aGUgU1BNIGRlbGl2ZXJzIGFsbCByZXF1ZXN0ZWQgc2lnbmFscyBhbmQgSVBDIG1lc3NhZ2UgaW4gYSB0aW1lbHkgZmFzaGlvbi4gRmFpbHVyZSB0byBwcm92aWRlIHRoaXMgd2lsbCByZXN1bHQgaW4gc2ltdWxhdGlvbiB0aW1lIG91dC4gIDxiciAvPlRoaXMgcnVsZSBpcyB1bmJvdW5kZWQgYW5kIGNhbm5vdCBoYXZlIGZ1bGwgY292ZXJhZ2UuIEl0IGlzIGdvb2QgdG8gdGhhdCB0aGluZ3MgYXJlIGRlbGl2ZXJlZCBpbiBhIHRpbWVseSBtYW5uZXIsIGhvd2V2ZXIgZmFpbHVyZSB3aWxsIG5vdCBicmVhayBjb21wbGlhbmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCBOT19FWFBMSUNJVF9URVNUIHwgQSBTZWN1cmUgUGFydGl0aW9uIGlzIGd1YXJhbnRlZWQgdG8gYmUgYWJsZSB0byAgZXhlY3V0ZSBhbmQgcmVhZCBpdHMgb3duIGNvZGUgcmVnaW9ucyBhbmQgcmVhZCBpdHMgb3duIHJlYWQtb25seSBkYXRhIHJlZ2lvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBObyBleHBsaWNpdCB0ZXN0IHdyaXR0ZW4gdG8gY292ZXIgdGhpcyBydWxlLiBUaGlzIGlzIGEgbWluaW11bSByZXF1aXJlbWVudCB0byBhYmxlIHRvIGxhdW5jaCBhbmQgcnVuIHNlY3VyZSBwYXJ0aXRpb24uIEZhaWxpbmcgdG8gcHJvdmlkZSB0aGlzLCB3aWxsIG5vdCBiZSBhYmxlIHRvIHJ1biBJUEMgdGVzdCBzdWl0ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgTk9UX0NPVkVSRUQgICAgICB8IHBzYV9nZXQgcmV0dXJucyBQU0FfRVJSX05PTVNHIGlmIHRoZSBTUE0gY2Fubm90IGRlbGl2ZXIgYSBtZXNzYWdlIHRvIHRoZSBTZWN1cmUgUGFydGl0aW9uIGZvbGxvd2luZyB0aGUgYXNzZXJ0aW9uIG9mIHRoZSBSb1QgU2VydmljZSBzaWduYWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGhpcyBzY2VuYXJpbyBjYW5ub3QgYmUgc2ltdWxhdGVkIGFzIHRlc3QgY2FuJ3QgZ2VuZXJhdGUgc3RpbXVsdXMgd2hlcmUgcHNhX2dldCgpIEFQSSByZXR1cm5zIFBTQV9FUlJfTk9NU0cuIEhvd2V2ZXIgZXZlcnkgaW5zdGFuY2VzIG9mIHBzYV9nZXQoKSBBUEkgY2FsbCBpbiB0ZXN0IHN1aXRlIGNoZWNrcyB0aGUgQVBJIHJldHVybiB2YWx1ZSBhbmQgcmUtd2FpdHMgZm9yIHNpZ25hbCBkZWxpdmVyeSBpZiByZXR1cm4gdmFsdWUgaXMgUFNBX0VSUl9OT01TRy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2dldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IE5PVF9DT1ZFUkVEICAgICAgfCBwc2FfY2FsbCAgZG9lcyBub3QgcmV0dXJuIGlmIHRoZSBjb25uZWN0aW9uIGlzIGFscmVhZHkgaGFuZGxpbmcgYSByZXF1ZXN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRoaXMgcnVsZSBpcyBub3QgdmVyaWZpZWQgYmVhY3VzZSBvZiBmb2xsb3dpbmcgcmVhc29uczogPGJyIC8+LSBUaGVyZSBpcyBubyBjb21tb24gaW5mcmFzdHJ1Y3R1cmUgdG8gdGVzdCB0aGlzIHJ1bGUgYXMgdGhpcyBuZWVkcyB0d28gT1Mgc3BlY2lmaWMgdGFza3Mgd2hlcmUgb25lIHRhc2sgaW50ZXJydXB0ZWQgZHVyaW5nIGV4ZWN1dGlvbiBvZiBwc2FfY2FsbCBvciBwc2FfY2xvc2UgIGFuZCBzZWNvbmQgdGFzayBzY2hlZHVsZWQgdG8gZXhlY3V0ZSBwc2FfY2FsbCB1c2luZyBzYW1lIGhhbmRsZS48YnIgLz4tIEl0IGlzIGhhcmQgdG8gd3JpdGUgdGVzdCBzdGltdWx1cyB3aGVyZSB0aGlzIHJ1bGUgaXMgYWx3YXlzIGhpdCBhcyBpdCBpcyBoaWdobHkgZGVwZW5kZW50IG9mIHBsYXRmb3JtIHNvZnR3YXJlIHNjaGVkdWxpbmcgcG9saWN5LiA8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9jYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCBOT1RfQ09WRVJFRCAgICAgIHwgcHNhX2Nsb3NlIGRvZXMgbm90IHJldHVybiBpZiB0aGUgY29ubmVjdGlvbiBpcyBhbHJlYWR5IGhhbmRsaW5nIGEgcmVxdWVzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUaGlzIHJ1bGUgaXMgbm90IHZlcmlmaWVkIGJlYWN1c2Ugb2YgZm9sbG93aW5nIHJlYXNvbnM6IDxiciAvPi0gVGhlcmUgaXMgbm8gY29tbW9uIGluZnJhc3RydWN0dXJlIHRvIHRlc3QgdGhpcyBydWxlIGFzIHRoaXMgbmVlZHMgdHdvIE9TIHNwZWNpZmljIHRhc2tzIHdoZXJlIG9uZSB0YXNrIGludGVycnVwdGVkIGR1cmluZyBleGVjdXRpb24gb2YgcHNhX2NhbGwgb3IgcHNhX2Nsb3NlICBhbmQgc2Vjb25kIHRhc2sgc2NoZWR1bGVkIHRvIGV4ZWN1dGUgcHNhX2Nsb3NlIHVzaW5nIHNhbWUgaGFuZGxlLjxiciAvPi0gSXQgaXMgaGFyZCB0byB3cml0ZSB0ZXN0IHN0aW11bHVzIHdoZXJlIHRoaXMgcnVsZSBpcyBhbHdheXMgaGl0IGFzIGl0IGlzIGhpZ2hseSBkZXBlbmRlbnQgb2YgcGxhdGZvcm0gc29mdHdhcmUgc2NoZWR1bGluZyBwb2xpY3kuIDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfY2xvc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBObyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgTk9UX0NPVkVSRUQgICAgICB8IE1hbmlmZXN0IFBhcmFtZXRlciAtIHByaW9yaXR5IChyZXF1aXJlZCkgPGJyIC8+UGFydGl0aW9ucyBtdXN0IGJlIGFzc2lnbmVkIG9uZSBvZiB0aGUgZm9sbG93aW5nIHByaW9yaXR5IGdyb3Vwczq/IEhJR0i/IE5PUk1BTL8gTE9XTE9XIGlzIHRoZSBsb3dlc3QgcHJpb3JpdHkuIFByaW9yaXR5IGlzIGlnbm9yZWQgYnkgU1BNcyB0aGF0IGRvIG5vdCBpbXBsZW1lbnQgYW55IHByaW9yaXR5LWJhc2VkIHNjaGVkdWxpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVXNlIG9mIHRoZXNlIGZpZWxkcyBhcmUgaGlnaGx5IGRlcGVuZGVudCBvbiB0eXBlIG9mIFNQTSBzY2hlZHVsaW5nIHBvbGljeSwgaGVuY2UgY2FuJ3QgdGVzdCB0aGUgYmVoYXZpb3VzIG9mIHRoaXMgZmllbGQuIEFuZCB0ZXN0IHN1aXRlIHBhcnRpdGlvbiBtYW5pZmVzdHMgYXJlIHByb3ZpZGVkIHdpdGggcHJpb3JpdHkgZmllbGQgZXF1YWwgdG8gTE9XLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IE5PVF9DT1ZFUkVEICAgICAgfCBTZWN1cmUgUGFydGl0aW9uIElEcyBtdXN0IGJlIGZpeGVkIGFjcm9zcyB1cGRhdGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENoZWNraW5nIGZvciBQYXJ0aXRpb24gSURzIGFjcm9zcyBTUE0gdXBkYXRlcyBpcyBvdXQgb2Ygc2NvcGUgZm9yIFBTQSBJUEMgdGVzdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBUZXN0cyAgICAgICAgICAgIHwgU2NlbmFyaW8gUnVsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDbGllbnQtIFNlcnZlciBUZXN0IEZ1bmN0aW9ucyBQYWlyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGVzdCBBbGdvcml0aG0vQ29tbWVudHMvVGVzdCBMaW1pdGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUnVsZSBvcHRpb25hbCBmb3IgQVBJIGNvbXBsaWFuY2U/IHwgSXMgc2NlbmFyaW8gaW1wbGVtZW50ZWQgaW4gdGhpcyByZWxlYXNlPyB8Cit8LS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKK3wgdGVzdF9pMDAxICAgICAgICB8IDEuIHBzYV9mcmFtZXdvcmtfdmVyc2lvbigpOiBSZXRyaWV2ZSB0aGUgdmVyc2lvbiBvZiB0aGUgUFNBIEZyYW1ld29yayBBUEkgdGhhdCBpcyBpbXBsZW1lbnRlZC4gTWFuaWZlc3QgZmllbGQtIHBzYV9mcmFtZXdvcmtfdmVyc2lvbjogVmVyc2lvbiBvZiB0aGUgUFNBIEZpcm13YXJlIEZyYW1ld29yayBzcGVjaWZpY2F0aW9uIHRoaXMgbWFuaWZlc3QgY29uZm9ybXMgdG8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX2ZyYW1ld29ya192ZXJzaW9uKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgdGhlIHBzYV9mcmFtZXdvcmtfdmVyc2lvbigpIEFQSSBmcm9tIGJvdGggU1BFIGFuZCBOU1BFIHNpZGUgYW5kIGNvbXBhcmUgdGhlIHJldHVybiB2YWx1ZSB3aXRoIFBTQV9GUkFNRVdPUktfVkVSU0lPTi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1hbmRhdG9yeSAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgIHwgMS4gcHNhX3ZlcnNpb24oKSByZXR1cm5zIFBTQV9WRVJTSU9OX05PTkUgd2hlbiB0aGUgUm9UIFNlcnZpY2UgaXMgbm90IGltcGxlbWVudGVkLCBvciB0aGUgY2FsbGVyIGlzIG5vdCBwZXJtaXR0ZWQgdG8gYWNjZXNzIHRoZSBzZXJ2aWNlIE9SIHJldHVybiA+IDAgd2l0aCB0aGUgbWlub3IgdmVyc2lvbiBvZiB0aGUgaW1wbGVtZW50ZWQgUm9UIFNlcnZpY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfdmVyc2lvbigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gUGFzcyB1bi1pbXBsZW1lbnRlZCBTSUQgYW5kIGV4cGVjdHMgUFNBX1ZFUlNJT05fTk9ORSBhcyByZXR1cm4gdmFsdWUuIDxiciAvPjIuIENhbGwgdG8gQVBJIGZyb20gTlNQRSB3aXRoIGEgU0lEIHdobyBkb2Vzbid0IHByb3ZpZGUgc2VydmljZSB0byBOU1BFIGFuZCBleHBlY3RzIFBTQV9WRVJTSU9OX05PTkUgYXMgcmV0dXJuIHZhbHVlLiA8YnIgLz4zLiBQYXNzIFNJRCB3aG8gaXMgaW1wbGVtZW50ZWQgYW5kIHByb3ZpZGVzIHNlcnZpY2UgdG8gTlNQRSBhbmQgZXhwZWN0ICBtaW5vciBudW1iZXIoPjApIG9mIGdpdmVuIFJvVCBzZXJ2aWNlIGFzIHJldHVybi4gPGJyIC8+UGVyZm9ybSBhbGwgYWJvdmUgY2hlY2tzIGZyb20gU1BFIHRvby4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTWFuZGF0b3J5ICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTAwMiAgICAgICAgfCAxLiBwc2FfY29ubmVjdCgpIHJldHVybnMgdGhlIFBTQV9FUlJPUl9DT05ORUNUSU9OX0JVU1kgd2hlbiBSb1QgU2VydmljZSBjYW5ub3QgbWFrZSB0aGUgY29ubmVjdGlvbiBhdCB0aGUgbW9tZW50ICh0cmFuc2llbnQgZXJyb3IpLiA8YnIgLz4yLiBwc2FfY29ubmVjdCgpIHJldHVybnMgdGhlIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQgd2hlbiBSb1QgU2VydmljZSBoYXMgcmVmdXNlZCB0aGUgY29ubmVjdGlvbiA8YnIgLz4zLiBwc2Ffd2FpdCgpIHJldHVybnMgdGhlIFNlY3VyZSBQYXJ0aXRpb24gaW50ZXJydXB0IHNpZ25hbHMgdGhhdCBoYXZlIGJlZW4gYXNzZXJ0ZWQgZnJvbSBhIHN1YnNldCBvZiBzaWduYWxzIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIuIFJldHVybnMgPiAwIHdoZW4gYXQgbGVhc3Qgb25lIHNpZ25hbCBpcyBhc3NlcnRlZCA8YnIgLz40LiBwc2FfZ2V0KCk6R2V0IHRoZSBtZXNzYWdlIHdoaWNoIGNvcnJlc3BvbmRzIHRvIGEgZ2l2ZW4gUm9UIFNlcnZpY2Ugc2lnbmFsIGFuZCByZW1vdmUgdGhlIG1lc3NhZ2UgZnJvbSB0aGUgcXVldWUuICA8YnIgLz41LiBwc2FfZ2V0KCkgcmV0dXJucyBQU0FfU1VDQ0VTUyB3aGVuICptc2cgd2lsbCBjb250YWluIHRoZSBkZWxpdmVyZWQgbWVzc2FnZS4gPGJyIC8+Ni4gVGhlIHR5cGUgbWVtYmVyIG9mIHRoZSBwc2FfbXNnX3Qgb2JqZWN0IHNob3VsZCByZXR1cm4gUFNBX0lQQ19DT05ORUNUIGZvciBhIG5ldyBjb25uZWN0aW9uIHJlcXVlc3QgZm9sbG93aW5nIGEgcHNhX2dldCgpIGNhbGwgdG8gcHNhX2Nvbm5lY3QoKSBhbmQgbXNnLmhhbmRsZSBtdXN0IGJlIHBvc2l0aXZlLiA8YnIgLz43LiBwc2FfcmVwbHkoKTogIElmIHRoZSBtZXNzYWdlIHR5cGUgaXMgUFNBX0lQQ19DT05ORUNUIHRoZW4gc2VydmVyIGNhbiByZWplY3QgdGhlIGNvbm5lY3Rpb24gYnkgc2VuZGluZyBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEIChwZXJtYW5lbnQgZXJyb3IpIG9yIFBTQV9FUlJPUl9DT05ORUNUSU9OX0JVU1kgKHRyYW5zaWVudCBlcnJvcikgc3RhdHVzIGNvZGUuIDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X2Nvbm5lY3Rpb25fYnVzeV9hbmRfcmVqZWN0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBDbGllbnQgdHJpZXMgdG8gY29ubmVjdCB0byBST1Qgc2VydmljZSB1c2luZyBwc2FfY29ubmVjdCgpIDxiciAvPjIuIFJvVCBzZXJ2aWNlIGNoZWNrcyB0aGUgZGVsaXZlcnkgb2YgIFBTQV9JUENfQ09OTkVDVCBtZXNzYWdlIHR5cGUgYW5kIHBvc2l0aXZlIGhhbmRsZSB2YWx1ZSByZXR1cm5lZCBieSBwc2FfZ2V0KCkgIDxiciAvPjMuIFJvVCBzZXJ2aWNlIHJlamVjdHMgdGhlIGNvbm5lY3Rpb24gYnkgZXhlY3V0aW5nIHBzYV9yZXBseShoYW5kbGUsUFNBX0VSUk9SX0NPTk5FQ1RJT05fQlVTWSkgPGJyIC8+NC4gQ2xpZW50IHRyaWVzIHRvIGNvbm5lY3QgdG8gc2FtZSBST1Qgc2VydmljZSB1c2luZyBwc2FfY29ubmVjdCgpIGFnYWluIDxiciAvPjUuIFRoaXMgdGltZSwgUm9UIHNlcnZpY2UgcmVqZWN0cyB0aGUgY29ubmVjdGlvbiBieSBleGVjdXRpbmcgcHNhX3JlcGx5KGhhbmRsZSxQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKSA8YnIgLz5QZXJmb3JtIGFsbCBhYm92ZSBzdGVwcyBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNYW5kYXRvcnkgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICB8IDEuIHBzYV9jb25uZWN0KCk6IFdoZW4gU0lEIGlzIGltcGxlbWVudGVkIGFuZCBjbGllbnQgaXMgcGVybWl0dGVkIHRvIGFjY2VzcyB0aGUgc2VydmljZSwgU1BNIGRlbGl2ZXJzIGEgUFNBX0lQQ19DT05ORUNUIG1lc3NhZ2UgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBTZWN1cmUgUGFydGl0aW9uIHRoYXQgaW1wbGVtZW50cyB0aGUgUm9UIFNlcnZpY2UgYW5kIHBvc2l0aXZlIGhhbmRsZSBpcyByZXR1cm5lZCB0byBjbGllbnQuIDxiciAvPjIuIHBzYV9nZXQoKTpHZXQgdGhlIG1lc3NhZ2Ugd2hpY2ggY29ycmVzcG9uZHMgdG8gYSBnaXZlbiBSb1QgU2VydmljZSBzaWduYWwgYW5kIHJlbW92ZSB0aGUgbWVzc2FnZSBmcm9tIHRoZSBxdWV1ZS4gPGJyIC8+My4gcHNhX2dldCgpIHJldHVybnMgUFNBX1NVQ0NFU1Mgd2hlbiAqbXNnIHdpbGwgY29udGFpbiB0aGUgZGVsaXZlcmVkIG1lc3NhZ2UgPGJyIC8+NC4gcHNhX2dldCgpOlRoZSB0eXBlIG1lbWJlciBvZiB0aGUgcHNhX21zZ190IG9iamVjdCBzaG91bGQgcmV0dXJuIFBTQV9JUENfQ09OTkVDVCBmb3IgYSBuZXcgY29ubmVjdGlvbiByZXF1ZXN0IGZvbGxvd2luZyBhIHBzYV9nZXQoKSBjYWxsIHRvIHBzYV9jb25uZWN0KCkgYW5kIG1zZy5oYW5kbGUgbXVzdCBiZSBwb3NpdGl2ZS4gPGJyIC8+NS4gcHNhX2dldCgpOiBUaGUgdHlwZSBtZW1iZXIgb2YgdGhlIHBzYV9tc2dfdCBvYmplY3Qgc2hvdWxkIHJldHVybiBQU0FfSVBDX0RJU0NPTk5FQ1QgZm9yIGEgbmV3IGNvbm5lY3Rpb24gcmVxdWVzdCBmb2xsb3dpbmcgYSBwc2FfZ2V0KCkgY2FsbCB0byBwc2FfY2xvc2UoKSBhbmQgbXNnLmhhbmRsZSBtdXN0IGJlIHBvc2l0aXZlLiA8YnIgLz42LiBwc2FfcmVwbHkoKTogIElmIHRoZSBtZXNzYWdlIHR5cGUgaXMgUFNBX0lQQ19DT05ORUNUIHRoZW4gc2VydmVyIGNhbiBhY2NlcHQgdGhlIGNvbm5lY3Rpb24gYnkgc2VuZGluZyBQU0FfU1VDQ0VTUyBzdGF0dXMgY29kZS4gSWYgdGhlIG1lc3NhZ2UgdHlwZSBpcyBQU0FfSVBDX0RJU0NPTk5FQ1QgdGhlbiB0aGUgc3RhdHVzIGNvZGUgaXMgaWdub3JlZC4gPGJyIC8+Ny4gcHNhX2Nsb3NlKCk6IENsb3NlcyBhIGNvbm5lY3Rpb24gdG8gYSBSb1QgU2VydmljZS4gU2VuZHMgdGhlIFBTQV9JUENfRElTQ09OTkVDVCBtZXNzYWdlIHRvIHRoZSBSb1QgU2VydmljZS4gIFRoaXMgZnVuY3Rpb24gd2lsbCBoYXZlIG5vIGVmZmVjdCBpZiBjYWxsZWQgd2l0aCB0aGUgbnVsbCBoYW5kbGUuIDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfYWNjZXB0X2FuZF9jbG9zZV9jb25uZWN0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuQ2xpZW50IHRyaWVzIHRvIGNvbm5lY3QgdG8gUk9UIHNlcnZpY2UgPGJyIC8+IDIuIFJvVCBzZXJ2aWNlIGNoZWNrcyB0aGUgZGVsaXZlcnkgb2YgIFBTQV9JUENfQ09OTkVDVCBtZXNzYWdlIHR5cGUgYW5kIHBvc2l0aXZlIGhhbmRsZSB2YWx1ZSByZXR1cm4gYnkgcHNhX2dldCgpIDxiciAvPjMuIFJvVCBzZXJ2aWNlICBhY2NlcHRzIHRoZSBjb25uZWN0aW9uIGJ5IGV4ZWN1dGluZyBwc2FfcmVwbHkoLi4sIFBTQV9DT05ORUNUSU9OX0FDQ0VQVEVEKS4gIDxiciAvPjQuIENsaWVudCBjYWxscyB0aGUgcHNhX2Nsb3NlIHdpdGggUFNBX05VTExfSEFORExFIGFuZCBsYXRlciBpdCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gdXNpbmcgcHNhX2Nsb3NlKCkgd2l0aCBhY3R1YWwgaGFuZGxlIHZhbHVlIDxiciAvPjUuIFJvVCBzZXJ2aWNlIGNoZWNrcyB0aGUgZGVsaXZlcnkgb2YgIFBTQV9JUENfRElTQ09OTkVDVCBtZXNzYWdlIHR5cGUsIGNoZWNrcyBoYW5kbGUgdmFsdWUgZXFhdWwgdG8gTlVMTCByZXR1cm5lZCBieSBwc2FfZ2V0KCkgYW5kIGNvbXBsZXRlcyB0aGUgUFNBX0lQQ19ESVNDT05ORUNUIGJ5IGV4ZWN1dGluZyBwc2FfcmVwbHkoKSAuIDxiciAvPlBlcmZvcm0gYWxsIGFib3ZlIHN0ZXBzIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1hbmRhdG9yeSAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgIHwgRm9sbG93aW5nIGFyZSBhbGxvd2VkIG1pbm9yIHZlcnNpb24gY29uZGl0aW9uIHRvIHBzYV9jb25uZWN0KCk6IDxiciAvPiAgMS4gVmVyc2lvbiBwb2xpY3kgaXMgbm90IG1lbnRpb25lZCBhbmQgcmVxdWVzdGVkIHZlcnNpb24gaXMgMSB3aGljaCBpcyBkZWZhdWx0IG1pbmltdW0gdmVyc2lvbiAgPGJyIC8+Mi4gVmVyc2lvbiBwb2xpY3kgaXMgU1RSSUNUIGFuZCByZXF1ZXN0ZWQgdmVyc2lvbiBlcXVhbHMgbWluaW11bSB2ZXJzaW9uICA8YnIgLz4zLiBWZXJzaW9uIHBvbGljeSBpcyByZWxheGVkIGFuZCByZXF1ZXN0ZWQgdmVyc2lvbiBpcyBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gdmVyc2lvbiAgPGJyIC8+IDQuIFZlcnNpb24gcG9saWN5IGlzIHJlbGF4ZWQgYW5kIHJlcXVlc3RlZCB2ZXJzaW9uIGlzIGV1cWFsIHRvIHRoZSBtaW5pbXVtIHZlcnNpb24gIDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9jb25uZWN0X3dpdGhfYWxsb3dlZF9taW5vcl92ZXJzaW9uX3BvbGljeSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2xpZW50IHRyaWVzIGNvbm5lY3RpbmcgUk9UIHNlcnZpY2Ugb2YgZm9sbG93aW5nIHByb3BlcnRpZXMgYW5kIGV4cGVjdHMgY29ubmVjdGlvbiB0byBlc3RhYmxpc2g6IDxiciAvPiAgIC0gVmVyc2lvbiBwb2xpY3kgaXMgbm90IG1lbnRpb25lZCBhbmQgcmVxdWVzdGVkIHZlcnNpb24gaXMgMSB3aGljaCBpcyBkZWZhdWx0IG1pbmltdW0gdmVyc2lvbiAgPGJyIC8+ICAgLSBWZXJzaW9uIHBvbGljeSBpcyBTVFJJQ1QgYW5kIHJlcXVlc3RlZCB2ZXJzaW9uIGVxdWFscyBtaW5pbXVtIHZlcnNpb24gIDxiciAvPiAgIC0gVmVyc2lvbiBwb2xpY3kgaXMgcmVsYXhlZCBhbmQgcmVxdWVzdGVkIHZlcnNpb24gaXMgc21hbGxlciB0aGFuIHRoZSBtaW5pbXVtIHZlcnNpb24gIDxiciAvPiAgLSBWZXJzaW9uIHBvbGljeSBpcyByZWxheGVkIGFuZCByZXF1ZXN0ZWQgdmVyc2lvbiBpcyBlcXVhbCB0byB0aGUgbWluaW11bSB2ZXJzaW9uICA8YnIgLz5QZXJmb3JtIGFsbCBhYm92ZSBzdGVwcyBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTWFuZGF0b3J5ICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgfCAxLiBwc2FfY2FsbCgpOiBUaGUgdmFsaWQgcHNhX2NhbGwsIG1ha2UgU1BNIHRvIHNlbmQgUFNBX0lQQ19DQUxMIG1zZy50eXBlIHRvIHRoZSBSb1Qgc2VydmljZWUgcGFydGl0aW9uIGFuZCB0aGUgc3VjY2Vzc2Z1bCBjYWxsIHNob3VsZCByZXR1cm4gPj0wIGhhbmRsZSB2YWx1ZS4gIDxiciAvPjIuIHBzYV9jYWxsKCkgcmVjZWl2ZXMgcmV0dXJuIHZhbHVlID49IDAgZm9yIFJvVC1zcGVjaWZpYyByZXR1cm4gY29kZSA8YnIgLz4zLiBwc2FfY2FsbCgpIHJlY2VpdmUgcmV0dXJuIHZhbHVlICA8IDAgZm9yIFJvVC1zcGVjaWZpYyBlcnJvciBjb2RlIDxiciAvPjQuIHBzYV9yZXBseSgpOiAgSWYgdGhlIG1lc3NhZ2UgdHlwZSBpcyBQU0FfSVBDX0NBTEwsIGFsbCBzdGF0dXMgY29kZXMgb3RoZXIgdGhhbiBQU0FfRVJST1JfUFJPR1JBTU1FUl9FUlJPUiBtdXN0IGJlIHJlcG9ydGVkIHRvIHRoZSBjbGllbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9jYWxsX3dpdGhfYWxsb3dlZF9zdGF0dXNfY29kZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBDbGllbnQgY29ubmVjdHMgdG8gUm9UIHNlcnZpY2UgPGJyIC8+Mi4gQ2xpZW50IHNlbmRzIG1lc3NhZ2UgdXNpbmcgcHNhX2NhbGwoKSA8YnIgLz4zLiAgUm9UIHNlcnZpY2UgY2hlY2tzIHRoZSBkZWxpdmVyeSBvZiAgUFNBX0lQQ19DQUxMIG1lc3NhZ2UgdHlwZSBhbmQgcG9zaXRpdmUgaGFuZGxlIHZhbHVlICByZXR1cm4gYnkgcHNhX2dldCgpICA8YnIgLz40LiBSb1Qgc2VydmljZSBlbmRzIHRoZSBjYWxsIHVzaW5nIHBzYV9yZXBseShzdGF0dXNfY29kZSkgPGJyIC8+NS4gQ2xpZW50IGNoZWNrcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHBzYV9jYWxsKCkgYW5kIENsaWVudCBjbG9zZXMgdGhlIGNvbm5lY3Rpb25SZXBlYXQgKDEpIHRvICg1KSBmb3IgZGlmZmVyZW50IHN0YXR1cyBjb2RlLCBTVUNDRVNTLCArdmUsIC12ZS4uIDxiciAvPlBlcmZvcm0gYWxsIGFib3ZlIHN0ZXBzIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNYW5kYXRvcnkgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICB8IDEuIEEgbXNnLmNsaWVudF9pZCB0aGF0IGhhcyBhIHBvc2l0aXZlIHZhbHVlIGluZGljYXRlcyB0aGF0IHRoZSBjbGllbnQgaXMgaW4gdGhlIFNQRSBhbmQgdGhpcyB0aGUgU2VjdXJlIFBhcnRpdGlvbiBJRCBvZiB0aGUgY2xpZW50LiBBIG5lZ2F0aXZlIGNsaWVudF9pZCBpbmRpY2F0ZXMgdGhhdCB0aGUgY2xpZW50IGlzIGluIHRoZSBOU1BFLiAgPGJyIC8+Mi4gQ2xpZW50X2lkIGlzIHZhbGlkIGR1cmluZyBQU0FfSVBDX0NPTk5FQ1QsIFBTQV9JUENfQ0FMTCBhbmQgUFNBX0lQQ19ESVNDT05ORUNUIG1zZyB0eXBlLiA8YnIgLz4zLiBNYW5pZmVzdCBQYXJhbWV0ZXItICBuYW1lIChyZXF1aXJlZCwgdW5pcXVlKSA8YnIgLz5BIFBhcnRpdGlvbiBtdXN0IGhhdmUgYW4gYWxwaGFudW1lcmljIG5hbWUgZm9yIHNvdXJjZSBjb2RlIHRvIGRpcmVjdGx5IHJlZmVyIHRvIGEgc3BlY2lmaWMgUGFydGl0aW9uLiBUaGUgZm9ybWF0IG9mIHRoZSBuYW1lIG11c3QgZm9sbG93IHRoZSBydWxlcyBvZiBhIEMgbWFjcm8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfaWRlbnRpdHkoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IC0gQ2hlY2sgdGhlIHZhbHVlIHJldHVybmVkIGJ5IG1zZy5jbGllbnRfaWQgZHVyaW5nIFBTQV9JUENfQ09OTkVDVCwgUFNBX0lQQ19DQUxMIGFuZCBQU0FfSVBDX0RJU0NPTk5FQ1QuIEZvciBOU1BFIGNvbm5lY3Rpb24sIGNsaWVudF9pZCBzaG91bGQgYmUgPDAgYW5kIGZvciBTUEUsIGl0IHNob3VsZCBiZSA+MC4gIDxiciAvPlBlcmZvcm0gYWxsIGFib3ZlIHN0ZXBzIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguIDxiciAvPi0gQWNjZXNzIHRoZSBQYXJ0aXRpb24gSUQgb2YgY2xpZW50IHBhcnRpdGlvbiBhbmQgY29tcGFyZSB0aGUgdmFsdWUgd2l0aCBleHBlY3RlZCBJRCB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1hbmRhdG9yeSAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgIHwgMS4gcHNhX2Nvbm5lY3QoKSB3aWxsIHJldHVybiB0aGUgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCAgT1IgUFNBX0VSUk9SX0NPTk5FQ1RJT05fQlVTWSB3aGVuIHRoZSBTUE0gaGFzIHJlYWNoZWQgdGhlIGxpbWl0IG9mIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9zcG1fY29uY3VycmVudF9jb25uZWN0X2xpbWl0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRXhlY3V0ZSBwc2FfY29ubmVjdCgpIEFQSSBpbiBhIGxvb3AgdW50aWwgaXQgcmV0dXJucyBQU0FfQ09OTkVDVElPTl9SRUZVU0VEIG9yIFBTQV9DT05ORUNUSU9OX0JVU1kgdG8gaW5kaWNhdGUgZW5kIG9mIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMgbGltaXQuIDxiciAvPlBlcmZvcm0gYWJvdmUgc3RlcCBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTWFuZGF0b3J5ICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgfCAxLiBwc2Ffd2FpdCgpOiBXaGVuIE1PREUoUFNBX0JMT0NLKSBpcyBvbmUsIHRoZSBmdW5jdGlvbiB3aWxsIGJsb2NrIHRoZSBjYWxsZXIgdW50aWwgb25lIG9mIHRoZSByZXF1ZXN0ZWQgc2lnbmFscyBpcyBhc3NlcnRlZC4gICA8YnIgLz4yLiAgcHNhX3dhaXQoKTogQ2FsbGVycyBtdXN0IHNldCBSRVMgdG8gemVybywgaW1wbGVtZW50YXRpb25zIG11c3QgaWdub3JlIHRoZSB2YWx1ZSBvZiBSRVMuIDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9ibG9ja19iZWhhdmUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBDbGllbnQgY29ubmVjdHMgdG8gYSBSb1Qgc2VydmljZSBtdXRpbHBlIHRpbWVzLiAgPGJyIC8+Mi4gUm9UIHNlcnZpY2UgcHNhX3dhaXQoUFNBX0JMT0NLfChOb24temVybyB2YWx1ZSBmb3IgdGltZW91dFszMDowXSkpIEFQSSBpcyBleGVjdXRlZCB3aXRob3V0IHdoaWxlKDEpIGxvb3AuICA8YnIgLz4zLiAgUm9UIHNlcnZpY2Ugc2VydmVzIHRoZSBjb25uZWN0aW9ucyBieSByZWplY3RpbmcgdGhlbS4gICA8YnIgLz5UaGlzIGlzIGEgc2FuaXR5IGNoZWNrLCBhIHN1Y2Nlc3NmdWwgaGFuZHNoYWtpbmcgYmV0d2VlbiBjbGllbnQgYW5kIHNlcnZlciBmb3IgcmVxdWVzdGVkIGNvbm5lY3Rpb24gIHJlcHJlc2VudHMgY2hlY2sgcGFzcy4gPGJyIC8+UGVyZm9ybSBhYm92ZSBzdGVwcyBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNYW5kYXRvcnkgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICB8IDEuIHBzYV93YWl0KCk6IFdoZW4gTU9ERSBpcyB6ZXJvLCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkgd2l0aCB0aGUgY3VycmVudCBzaWduYWwgc3RhdGUsIHdoaWNoIGNhbiBiZSB6ZXJvIGlmIG5vIHNpZ25hbHMgYXJlIGFjdGl2ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3BvbGxfYmVoYXZlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIENsaWVudCBjb25uZWN0cyB0byBhIFJvVCBzZXJ2aWNlIG11dGlscGUgdGltZXMuICA8YnIgLz4yLiBSb1Qgc2VydmljZSBleGVjdXRlcyBwc2Ffd2FpdChQU0FfUE9MTCkgIGluIGEgd2hpbGUgbG9vcCBhbmQgY2hlY2tzIHRoZSBBUEkncyBwb2xsaW5nIGJlaGF2aW91ci4gIDxiciAvPjMuIENhbGwgcHNhX3dhaXQoUFNBX1BPTEwpIHdoZW4gbm8gcmVxdWVzdCBpcyBtYWRlIGJ5IGNsaWVudCBhbmQgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUuIDxiciAvPlBlcmZvcm0gYWJvdmUgc3RlcHMgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1hbmRhdG9yeSAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMDMgICAgICAgIHwgMS4gVGhlIHJldmVyc2UgaGFuZGxlIGZvciBhIGNvbm5lY3Rpb24gaXMgTlVMTCB1bnRpbCBwc2Ffc2V0X3JoYW5kbGUoKSBpcyB1c2VkLiAgcHNhX3NldF9yaGFuZGxlKCkgY2FuIGJlIHVzZWQgdG8gYXNzb2NpYXRlIHNvbWUgY2FsbGVyLXByb3ZpZGVkIHByaXZhdGUgZGF0YSB3aXRoIGEgc3BlY2lmaWVkIGNsaWVudCBjb25uZWN0aW9uLiBBbmQgU1BNIG11c3QgcHJvdmlkZSBzYW1lIHJoYW5kbGUgZm9yIG1zZy5yaGFuZGxlIHdpdGggYWxsIHN1YnNlcXVlbnQgbWVzc2FnZXMgZGVsaXZlcmVkIG9uIHRoaXMgY29ubmVjdGlvbi4gT24gc3VjY2VzcyB0aGUgcmhhbmRsZSBpcyByZXRhaW5lZCBieSB0aGUgaW1wbGVtZW50YXRpb24gYW5kIHByb3ZpZGVkIGluIGFsbCBmdXR1cmUgbWVzc2FnZXMgb24gdGhhdCBjb25uZWN0aW9uIGFzIHBhcnQgb2YgdGhlIHBzYV9tc2dfdCBzdHJ1Y3R1cmUuICA8YnIgLz4yLiBTZXR0aW5nIHRoZSByaGFuZGxlIGZvciBhIGNvbm5lY3Rpb24gZHVyaW5nIGRpc2Nvbm5lY3Rpb24gaGFzIG5vIG9ic2VydmFibGUgZWZmZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffc2V0X3JoYW5kbGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gQ2xpZW50IGNvbm5lY3RzIHRvIFJvVCBzZXJ2aWNlIGFuZCBSb1Qgc2VydmljZSBjaGVja3MgdGhlIHZhbHVlIG9mIG1zZy5yaGFubGRlIHZhbHVlIGR1aW5nIFBTQV9JUENfQ09OTkVDVDIuIENsaWVudCBzZW5kIGNhbGwgbXNnIHRvIFJvVCBzZXJ2aWNlIGFuZCBSb1Qgc2VydmljZSBjaGVja3MgdGhlIHZhbHVlIG9mIG1zZy5yaGFubGRlIHZhbHVlIGR1aW5nIFBTQV9JUENfQ09OTkVDVCA8YnIgLz4zLiBST1Qgc2VydmljZSBzZXRzIHRoZSByaGFuZGxlIHdpdGgga25vd24gdmFsdWUuIDxiciAvPjQuIENsaWVudCBzZW5kIGNhbGwgbXNnIHRvIFJvVCBzZXJ2aWNlIGFuZCBSb1Qgc2VydmljZSBub3cgY29tcGFyZSB0aGUgdmFsdWUgb2YgbXNnLnJoYW5uZGxlICB3aXRoIHByZXZpb3VzbHkgc2V0IHZhbHVlIDxiciAvPjUuIFJPVCBzZXJ2aWNlIHNldHMgdGhlIHJoYW5kbGUgd2l0aCBrbm93biB2YWx1ZSBvdGhlciB0aGFuIHByZXZpb3VzbHkgc2V0IHZhbHVlIDxiciAvPjYuIENsaWVudCBzZW5kIGNhbGwgbXNnIHRvIFJvVCBzZXJ2aWNlIGFuZCBSb1Qgc2VydmljZSBub3cgY29tcGFyZSB0aGUgdmFsdWUgb2YgbXNnLnJoYW5uZGxlIHdpdGggbGFzdCBzZXQgdmFsdWUgPGJyIC8+Ny4gVGhlIHJldmVyc2UgaGFuZGxlIGZvciBhIGNvbm5lY3Rpb24gaXMgTlVMTCB1bnRpbCBwc2Ffc2V0X3JoYW5kbGUoKSBpcyB1c2VkIDxiciAvPlBlcmZvcm0gYWJvdmUgc3RlcHMgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTWFuZGF0b3J5ICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgfCAxLiBwc2FfY2FsbCgpOlRoZSBjYWxsZXIgY2FuIG9wdGlvbmFsbHkgcHJvdmlkZSBvbmUgb3IgbW9yZSBidWZmZXJzIHRvIHJlY2VpdmUgYSByZXNwb25zZSAob3V0X3ZlYykuIDxiciAvPjIuIHBzYV9nZXQoKTogVGhlIGFycmF5IGluX3NpemUgcHJvdmlkZXMgdGhlIHNpemUgb2YgZWFjaCBjbGllbnQgaW5wdXQgdmVjdG9yIGluIGJ5dGVzLiBUaGUgYXJyYXkgb3V0X3NpemUgcHJvdmlkZXMgdGhlIHNpemUgb2YgZWFjaCBjbGllbnQgb3V0cHV0IHZlY3RvciBpbiBieXRlcy4gPGJyIC8+My4gcHNhX3JlYWQoKTogcGFyYW1ldGVyIGZyb20gdGhlIGNsaWVudCBpbnB1dCB2ZWN0b3IuIFN0cmVhbXMgdXAgdG8gdGhlIG5leHQgbnVtX2J5dGVzIGJ5dGVzIG9mIGNsaWVudCBpbnB1dCB2ZWN0b3IgaW52ZWNfaWR4IGluIHRoZSBtZXNzYWdlIGlkZW50aWZpZWQgYnkgbXNnX2hhbmRsZSB0byB0aGUgU2VjdXJlIFBhcnRpdGlvbiBidWZmZXIuIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQuIDxiciAvPjQuIHBzYV9yZWFkKCk6IElmIG51bV9ieXRlcyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGF2YWlsYWJsZSBkYXRhIGluIHRoZSBpbnB1dCB2ZWN0b3IgdGhlbiBudW1fYnl0ZXMgYXJlIGNvcGllZCB0byBidWZmZXIsIGFuZCB0aGUgcmVtYWluaW5nIGRhdGEgaW4gdGhlIGlucHV0IHZlY3RvciBjYW4gYmUgcmVhZCBieSBzdWJzZXF1ZW50IGNhbGxzIHRvIHBzYV9yZWFkKCkgd2l0aCB0aGUgc2FtZSBtc2dfaGFuZGxlIGFuZCBpbnZlY19pZHguIDxiciAvPjUuIHBzYV9yZWFkKCk6IFJvVCBTZXJ2aWNlcyBjYW4gZGV0ZXJtaW5lIGhvdyBtdWNoIGRhdGEgaXMgYXZhaWxhYmxlIHRvIHJlYWQgZnJvbSB0aGUgbWVzc2FnZSBiYXNlZCBvbiB0aGUgaW5fc2l6ZVtdIGF0dHJpYnV0ZSBvZiB0aGUgcHNhX21zZ190IG1lc3NhZ2UgcmV0dXJuZWQgZnJvbSBwc2FfZ2V0KCkuIElmIGFuIGlucHV0IHZlY3RvciBoYXMgbm90IGJlZW4gcGFzc2VkIGJ5IHRoZSBjbGllbnQgdGhlbiB0aGUgY29ycmVzcG9uZGluZyBpbl9zaXplW10gZm9yIHRoYXQgdmVjdG9yIGlzIHplcm8uIDxiciAvPjYuIHBzYV9yZWFkKCk6IElmIG51bV9ieXRlcyBpcyBncmVhdGVyIHRoYW4gdGhlIHJlbWFpbmluZyBkYXRhIGluIHRoZSBpbnB1dCB2ZWN0b3IgdGhlbiB0aGUgcmVtYWluaW5nIGlucHV0IGJ5dGVzIGFyZSBjb3BpZWQgdG8gYnVmZmVyIGFuZCB0aGUgY2FsbCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkLiBBbnkgc3BhY2UgYWZ0ZXIgdGhpcyBpbiBidWZmZXIgaXMgbm90IG1vZGlmaWVkLiBTdWJzZXF1ZW50IGNhbGxzIG9mIHBzYV9yZWFkKCkgb3IgcHNhX3NraXAoKSB3aXRoIHRoZSBzYW1lIG1lc3NhZ2UgaW5wdXQgdmVjdG9yIHdpbGwgcmVwb3J0IHRoYXQgdGhlcmUgaXMgbm8gbW9yZSBkYXRhIGluIHRoZSB2ZWN0b3IuIDxiciAvPjcuIHBzYV9za2lwKCk6IFNraXAgb3ZlciBwYXJ0IG9mIGEgY2xpZW50IGlucHV0IHZlY3Rvci4gQWR2YW5jZXMgdGhlIGN1cnJlbnQgcmVhZCBvZmZzZXQgYnkgc2tpcHBpbmcgdXAgdG8gbnVtX2J5dGVzIGJ5dGVzIGZvciBpbnB1dCB2ZWN0b3IgaW52ZWNfaWR4IGluIHRoZSBtZXNzYWdlIGlkZW50aWZpZWQgYnkgbXNnX2hhbmRsZS4gcHNhX3NraXAoKTogV2hlbiBwc2Ffc2tpcCByZXR1cm5zLCBpdCByZXR1cm5zIHdpdGggdGhlIG51bWJlciBvZiBieXRlcyBza2lwcGVkICA8YnIgLz44LiBwc2Ffc2tpcCgpOiBJZiBUaGVyZSB3YXMgbm8gcmVtYWluaW5nIGRhdGEgaW4gdGhpcyBpbnB1dCB2ZWN0b3IsIHJldHVybiB6ZXJvIDxiciAvPjkucHNhX3NraXAoKTogSWYgbnVtX2J5dGVzIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcmVtYWluaW5nIHNpemUgb2YgdGhlIGlucHV0IHZlY3RvciB0aGVuIHRoZSByZW1haW5pbmcgc2l6ZSBvZiB0aGUgaW5wdXQgdmVjdG9yIGlzIHJldHVybmVkLiBTdWJzZXF1ZW50IGNhbGxzIG9mIHBzYV9yZWFkKCkgb3IgcHNhX3NraXAoKSB3aXRoIHRoZSBzYW1lIG1lc3NhZ2UgaW5wdXQgdmVjdG9yIHdpbGwgcmVwb3J0IHRoYXQgdGhlcmUgaXMgbm8gbW9yZSBkYXRhIGluIHRoZSB2ZWN0b3IuIDxiciAvPiB8IFtjbGllbnQvc2VydmVyXV90ZXN0X2NhbGxfcmVhZF9hbmRfc2tpcCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLkNsaWVudCBjb25uZWN0cyB0byBSb1Qgc2VydmljZSA8YnIgLz4yLkNsaWVudCBzZW5kcyBmb3VyIGlucHV0IHZlY3RvcnMgdG8gUm9UIHNlcnZpY2UgdXNpbmcgcHNhX2NhbGwgPGJyIC8+My4gUm9UIHNlcnZpY2UgY2hlY2tzIGZvbGxvd2luZzogPGJyIC8+ICAgIC0gUmVwb3J0aW5nIG9mIGlucHV0IHZlY3RvcnMgc2l6ZSB0aHJvdWdoIG1zZy5pbl9zaXplIDxiciAvPiAgICAtIElucHV0IHZlY3RvcnMgY29udGVudCByZWFkaW5nIHRocm91Z2ggcHNhX3JlYWQgPGJyIC8+ICAgIC1JbmJvdW5kIC9PdXRib3VuZCBvZmZzZXQgcmVhZGluZyA8YnIgLz4gICAgLUluYm91bmQvT3V0Ym91bmQgIG9mZnNldCBza2lwcGluZyA8YnIgLz4gICAgLVplcm8gYnl0ZSByZWFkIGFuZCBza2lwIDxiciAvPiAgICAtb3V0X2xlbj0wIGNoZWNrIDxiciAvPjQuIENsaWVudCByZWNpZXZlcyB0aGUgc3RhdHVzIG9mICBSb1Qgc2VydmljZSBjaGVja3MgYW5kIGNsb3NlcyB0aGUgY29ubmVjdGlvbiA8YnIgLz5QZXJmb3JtIGFib3ZlIHN0ZXBzIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNYW5kYXRvcnkgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICB8IDEuIHBzYV9jYWxsKCk6IFRoZSBjYWxsZXIgY2FuIG9wdGlvbmFsbHkgcHJvdmlkZSBvbmUgb3IgbW9yZSBidWZmZXJzIHRvIHJlY2VpdmUgYSByZXNwb25zZSAob3V0X3ZlYykuIE9uIHJldHVybiBmcm9tIHBzYV9jYWxsKCkgdGhlIGxlbiB2YWx1ZSB3aWxsIGhhdmUgYmVlbiB1cGRhdGVkIHRvIGluZGljYXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgZGF0YSB3cml0dGVuIHRvIHRoZSBidWZmZXIgYnkgdGhlIFJvVCBTZXJ2aWNlLiA8YnIgLz4yLiBwc2Ffd3JpdGUoKTogQXBwZW5kcyBudW1fYnl0ZXMgb2YgZGF0YSBmcm9tIGJ1ZmZlciB0byB0aGUgY2xpZW50IG91dHB1dCB2ZWN0b3Igb3V0dmVjX2lkeCBpbiB0aGUgbWVzc2FnZSBpZGVudGlmaWVkIGJ5IG1zZ19oYW5kbGUuIFNlcXVlbnRpYWwgY2FsbHMgdXNpbmcgdGhlIHNhbWUgbXNnX2hhbmRsZSBhbmQgb3V0dmVjX2lkeCB3aWxsIGJlIGNvbmNhdGVuYXRlZCBpbiB0aGUgb3V0cHV0IHZlY3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfY2FsbF9hbmRfd3JpdGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIENsaWVudCBjb25uZWN0cyB0byBSb1Qgc2VydmljZSA8YnIgLz4yLiBDbGllbnQgc2VuZHMgZm91ciBvdXRwdXQgdmVjdG9ycyB0byBSb1Qgc2VydmljZSB1c2luZyBwc2FfY2FsbCA8YnIgLz4zLiBSb1Qgc2VydmljZSBjaGVja3MgZm9sbG93aW5nOiA8YnIgLz4gIC0gUmVwb3J0aW5nIG9mIG91dHB1dCB2ZWN0b3JzIHNpemUgdGhyb3VnaCBtc2cub3V0X3NpemUgPGJyIC8+ICAtIGluX2xlbj0wIGNoZWNrIDxiciAvPiAgLSB6ZXJvIGJ5dGUgd3JpdGUgPGJyIC8+ICAtIE91dCB2ZWN0b3Igd3JpdGVzIHVzaW5nIHBzYV93cml0ZSA8YnIgLz4gICAtICBWZWN0b3Igd3JpdGUgY29uY2F0ZW5hdGlvbiA8YnIgLz40LiBDbGllbnQgcmVjaWV2ZXMgdGhlIHN0YXR1cyBvZiBSb1Qgc2VydmljZSBjaGVja3MsIGNyb3NzIGNoZWNrIHRoZSBjb250ZW50IG9mIG91dCB2ZWN0b3JzIGFuZCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gPGJyIC8+UGVyZm9ybSBhYm92ZSBzdGVwcyBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1hbmRhdG9yeSAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgIHwgMS4gIHBzYV9jYWxsKCk6ICBBbnkgSS9PIHZlY3RvciBvZiBsZW5ndGggemVybyBpcyBwZXJtaXR0ZWQgYW5kIHdpbGwgYmUgdHJlYXRlZCBhcyBhbiBlbXB0eSBvciBub24tZXhpc3RlbnQgdmVjdG9yIGJ5IHRoZSBmcmFtZXdvcmsuIFdoZW4gbGVzcyB0aGFuIGZvdXIgdmVjdG9ycyBhcmUgcHJvdmlkZWQgdG8gcHNhX2NhbGwoKSBmb3IgZWl0aGVyIGlucHV0IG9yIG91dHB1dCwgdGhlbiB0aGUgcmVtYWluaW5nIHZlY3RvcnMgaGF2ZSB6ZXJvIGxlbmd0aCBhbmQgdGhlIGluX3NpemUgYW5kIG91dF9zaXplIGVsZW1lbnRzIGZvciB0aGVzZSB2ZWN0b3JzIHdpbGwgYmUgemVyby5BIG1lbW9yeSByZWZlcmVuY2UgY29udGFpbnMgYSBzdGFydCBhZGRyZXNzIGFuZCBhbiBhc3NvY2lhdGVkIGxlbmd0aC4gQSB6ZXJvLWxlbmd0aCBtZW1vcnkgcmVmZXJlbmNlIGlzIG9uZSB3aGVyZSB0aGUgbGVuZ3RoIGlzIHplcm8uIFRoZSBzdGFydCBhZGRyZXNzIG9mIGEgemVyby1sZW5ndGggbWVtb3J5IHJlZmVyZW5jZSBjYW4gc2FmZWx5IHRha2UgYW55IHZhbHVlIGFuZCBtdXN0IGJlIGlnbm9yZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uLiA8YnIgLz4yLiBwc2FfY2FsbCgpOiBJZiBpbl9sZW4gaXMgemVybyB0aGVuIGluX3ZlYyBpcyBpZ25vcmVkICA8YnIgLz4zLiBzYV9jYWxsKCk6IElmIG91dF9sZW4gaXMgemVybyB0aGVuIG91dF92ZWMgaXMgaWdub3JlZCAgPGJyIC8+NC4gcHNhX2dldCgpOiBJZiBhbiBpbnB1dCBhbmQgb3V0cHV0IHZlY3RvciBoYXMgbm90IGJlZW4gcGFzc2VkIGJ5IHRoZSBjbGllbnQgdGhlbiB0aGUgY29ycmVzcG9uZGluZyBpbl9zaXplW10gYW5kIG91dF9zaXplW10gZm9yIHRoYXQgdmVjdG9yIGlzIHplcm8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF96ZXJvX2xlbmd0aF9pbnZlYygpW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfemVyb19sZW5ndGhfb3V0dmVjKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGVzdCB6ZXJvIGxlbnRoIGlucHV0IHZlY3RvcjogPGJyIC8+MS4gQ2xpZW50IGNvbm5lY3RzIHRvIFJvVCBzZXJ2aWNlIDxiciAvPjIuIENsaWVudCBzZW5kcyB0aHJlZSBpbnB1dCBhbmQgb25lIG91dHZlYyB2ZWN0b3JzIHRvIFJvVCBzZXJ2aWNlIHVzaW5nIHBzYV9jYWxsIC0gaW52ZWMgMCBhcyB6ZXJvIGxlbmd0aCB2ZWN0b3IsIGludmVjIDEgYXMgTlVMTCBhbmQgaW52ZWMgMiBhbmQgb3V0dmVjIDAgYXMgbm9uLXplcm8gbGVuZ3RoIHZlY3RvciA8YnIgLz4zLiBSb1Qgc2VydmljZSBjaGVja3Mgc2l6ZSBvZiBlYWNoIHZlY3RvcnMgcmVwb3J0ZWQgdGhyb3VnaCBtc2cuaW5fc2l6ZSBhbmQgbXNnLm91dF9zaXplIDxiciAvPjQuIENsaWVudCByZWNpZXZlcyB0aGUgc3RhdHVzIG9mIGNoZWNrcyBhbmQgY2xvc2VzIHRoZSBjb25uZWN0aW9uIDxiciAvPlRlc3QgemVybyBsZW50aCBvdXRwdXQgdmVjdG9yOiA8YnIgLz4xLiBDbGllbnQgY29ubmVjdHMgdG8gUm9UIHNlcnZpY2UgPGJyIC8+Mi4gQ2xpZW50IHNlbmRzIG9uZSAgaW5wdXQgYW5kIHRocmVlIG91dHZlYyB2ZWN0b3JzdG8gUm9UIHNlcnZpY2UgdXNpbmcgcHNhX2NhbGwgLSBvdXR2ZWMgMCBhcyB6ZXJvIGxlbmd0aCB2ZWN0b3IsIG91dHZlYyAwIGFzIE5VTEwgYW5kIGludmVjIDAgYW5kIG91dHZlYyAyIGFzIG5vbi16ZXJvIGxlbmd0aCB2ZWN0b3IgPGJyIC8+My4gUm9UIHNlcnZpY2UgY2hlY2tzIHNpemUgb2YgZWFjaCB2ZWN0b3JzIHJlcG9ydGVkIHRocm91Z2ggbXNnLmluX3NpemUgYW5kIG1zZy5vdXRfc2l6ZSA8YnIgLz40LiBDbGllbnQgcmVjaWV2ZXMgdGhlIHN0YXR1cyBvZiBjaGVja3MgYW5kIGNsb3NlcyB0aGUgY29ubmVjdGlvbiA8YnIgLz5QZXJmb3JtIGFib3ZlIHN0ZXBzIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguIHwgTWFuZGF0b3J5ICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgfCAxLiBXaGVuIGNsaWVudCBwcm92aWRlcyBhbiBpbnB1dCBhbmQgb3V0cHV0IHZlY3RvcnMgd2hpY2ggYXJlIHJlZmVyZW5jaW5nIHRvIHNhbWUgbWVtb3J5IGxvY2F0aW9uLCBhIHBzYV9yZWFkIGFmdGVyIHBzYV93cml0ZSB0byB0aGUgc2FtZSBtZW1vcnkgbG9jYXRpb24gY2FuIHJldHVybiBvcmlnaW5hbCBvciBtb2RpZmllZCB2YWx1ZS4gIDxiciAvPjIuIFdoZW4gY2xpZW50IHByb3ZpZGVzIGFuIGlucHV0IGFuZCBvdXRwdXQgdmVjdG9ycyB3aGljaCBhcmUgcmVmZXJlbmNpbmcgdG8gc2FtZSBtZW1vcnkgbG9jYXRpb24sIGEgcHNhX3dyaXRlKHMpIHRvIGJvdGggbWVtb3J5IHZlY3RvcnMgY2FuIHJldHVybiBlaXRoZXIgdGhlIDFzdCBvciB0aGUgMm5kIHZhbHVlIHdyaXR0ZW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X292ZXJsYXBwaW5nX3ZlY3RvcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBDbGllbnQgcHJvdmlkZXMgb25lIGlucHV0IGFuZCAyIG91dHB1dCB2ZWN0b3JzIHdoaWNoIGFyZSBwb2ludGluZyB0byBzYW1lIGxvY2F0aW9uLiAgPGJyIC8+Mi4gUm9UIHNlcnZpY2UgcGVyZm9ybXMgcmVhZCBhZnRlciB3cml0ZSBvcGVyYXRpb24gb24gdG8gb3V0dmVjLTAgYW5kIGV4cGVjdHMgcmV0dXJuIHZhbHVlIGVpdGhlciBtb2RpZmllZCBvbmUgb3IgdGhlIG9yaWdpbmFsICA8YnIgLz4zLiBSb1Qgc2VydmljZSBwZXJmb3JtcyB3cml0ZSBvcGVyYXRpb24gdG8gb3V0dmVjLTEgYW5kIHVuYmxvY2sgdGhlIGNvbm5lY3Rpb24uIFRoZSB3cml0ZSBwZXJmb3JtZWQgaXMgdG8gbWltaWMgd3JpdGUgYWZ0ZXIgd3JpdGUgb3BlcmF0aW8gdG8gdGhlIG92ZXJsYXBwaW5nIHZlY3Rvci4gPGJyIC8+NC4gQ2xpZW50IGNoZWNrIHRoZSB2YWx1ZSBvZiBvdXR2ZWMuIFRoZSB2YWx1ZSBzaG91bGQgYmUgZWl0aGVyIHRoZSB2YWx1ZSB3cml0dGVuIGJ5IGZpcnN0IHBzYV93cml0ZSBvciB0aGUgc2Vjb25kIHBzYV93cml0ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNYW5kYXRvcnkgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDA0ICAgICAgICB8IFRoZSBjYWxsIHRvIHBzYV9jb25uZWN0KCkgaXMgUFJPR1JBTU1FUiBFUlJPUiBpZiBSb1QgU2VydmljZSBkb2VzIG5vdCBleGlzdCBvbiBwbGF0Zm9ybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3Rfc2lkX2RvZXNfbm90X2V4aXN0cygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX2Nvbm5lY3Qgd2l0aCBTSUQgd2hpY2ggZG9lcyBub3QgZXhpc3Qgb24gYSBwbGF0Zm9ybSBhbmQgZXhwZWN0IFBST0dSQU1NRVIgRVJST1IgYmVoYXZpb3VyLjxiciAvPlBlcmZvcm0gYWJvdmUgc3RlcCBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMDUgICAgICAgIHwgVGhlIGNhbGwgdG8gcHNhX2Nvbm5lY3QoKSBpcyBQUk9HUkFNTUVSIEVSUk9SIGlmIFZlcnNpb24gcG9saWN5IGlzIFNUUklDVCBhbmQgcmVxdWVzdGVkIHZlcnNpb24gaXMgSElHSEVSIHRoYW4gbWluaW11bSB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9zdHJpY3RfcG9saWN5X2hpZ2hlcl9taW5vcl92ZXJzaW9uKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FsbCBwc2FfY29ubmVjdCB3aXRoIFNJRCB3aG9zZSBWZXJzaW9uIHBvbGljeSBpcyBTVFJJQ1QgYW5kIHJlcXVlc3RlZCBtaW5vciB2ZXJzaW9uIGlzIEhJR0hFUiB0aGFuIG1pbmltdW0gdmVyc2lvbiBhbmQgZXhwZWN0IFBST0dSQU1NRVIgRVJST1IgYmVoYXZpb3VyLjxiciAvPlBlcmZvcm0gYWJvdmUgc3RlcCBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTAwNiAgICAgICAgfCBUaGUgY2FsbCB0byBwc2FfY29ubmVjdCgpIGlzIFBST0dSQU1NRVIgRVJST1IgaWYgVmVyc2lvbiBwb2xpY3kgaXMgU1RSSUNUIGFuZCByZXF1ZXN0ZWQgdmVyc2lvbiBsb3dlciB0aGFuIG1pbmltdW0gdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3N0cmljdF9wb2xpY3lfbG93ZXJfbWlub3JfdmVyc2lvbigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYWxsIHBzYV9jb25uZWN0IHdpdGggU0lEIHdob3NlIFZlcnNpb24gcG9saWN5IGlzIFNUUklDVCBhbmQgcmVxdWVzdGVkIG1pbm9yIHZlcnNpb24gaXMgTG93ZXIgdGhhbiBtaW5pbXVtIHZlcnNpb24uIDxiciAvPlBlcmZvcm0gYWJvdmUgc3RlcCBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDA3ICAgICAgICB8IFRoZSBjYWxsIHRvIHBzYV9jb25uZWN0KCkgaXMgUFJPR1JBTU1FUiBFUlJPUiBpZiBWZXJzaW9uIHBvbGljeSBpcyBSRUxBWEVEIGFuZCByZXF1ZXN0ZWQgdmVyc2lvbiBpcyBiaWdnZXIgdGhhbiBtaW5pbXVtIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcmVsYXhfcG9saWN5X2hpZ2hlcl9taW5vcl92ZXJzaW9uKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhbGwgcHNhX2Nvbm5lY3Qgd2l0aCBTSUQgd2hvc2UgVmVyc2lvbiBwb2xpY3kgaXMgUkVMQVhFRCBhbmQgcmVxdWVzdGVkIG1pbm9yIHZlcnNpb24gaXMgSElHSEVSIHRoYW4gbWluaW11bSB2ZXJzaW9uIGFuZCBleHBlY3QgUFJPR1JBTU1FUiBFUlJPUiBiZWhhdmlvdXIuIDxiciAvPlBlcmZvcm0gYWJvdmUgc3RlcCBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMDggICAgICAgIHwgMS4gVGhlIGNhbGwgdG8gcHNhX2Nvbm5lY3QoKSBpcyBQUk9HUkFNTUVSIEVSUk9SICBpZiBzZXJ2aWNlIHRvIG5vbl9zZWN1cmVfY2xpZW50IGlzIG5vdCBhdmFpbGFibGUgPGJyIC8+Mi4gTWFuaWZlc3QgcGFyYW1ldGVyIC0gVGhlIG5vbl9zZWN1cmVfY2xpZW50cyBmaWVsZCBjb250YWlucyBhIGJvb2xlYW4gdG8gaW5kaWNhdGUgaWYgaXQgaXMgYWNjZXNzaWJsZSB0byBOU1BFIGNsaWVudHMuIFJvVCBTZXJ2aWNlcyBhcmUgYWx3YXlzIGFjY2Vzc2libGUgdG8gU1BFIGNsaWVudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9zZWN1cmVfYWNjZXNzX29ubHlfY29ubmVjdGlvbigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfY29ubmVjdCB3aXRoIFNJRCB3aGljaCBhbGxvdyBzZWN1cmUgb25seSBjb25uZWN0aW9uIGFuZCBleHBlY3QgUFJPR1JBTU1FUiBFUlJPUiBiZWhhdmlvdXIuPGJyIC8+UGVyZm9ybSBhYm92ZSBzdGVwIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTAwOSAgICAgICAgfCAxLiBUaGUgY2FsbCB0byBwc2FfY29ubmVjdCgpIGlzIFBST0dSQU1NRVIgRVJST1IgaWYgU0lEIGlzIG5vdCBtZW50aW9uZWQgaW4gZGVwZW5kZW5jaWVzIGZpZWxkLiA8YnIgLz4yLiBNYW5pZmVzdCBwYXJhbWV0ZXItIGRlcGVuZGVuY2llcyAob3B0aW9uYWwpIDxiciAvPklmIGFjY2VzcyBiZXR3ZWVuIGEgU2VjdXJlIFBhcnRpdGlvbiAoYWN0aW5nIGFzIGNsaWVudCkgYW5kIGEgUm9UIFNlcnZpY2UgKGFjdGluZyBhcyBzZXJ2ZXIpIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIG1hbmlmZXN0LCB0aGVuIHRoZSBjbGllbnQgaXMgbm90IHBlcm1pdHRlZCB0byBjb25uZWN0IHRvIHRoZSBSb1QgU2VydmljZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3VuZXh0ZXJuX3NpZF9jb25uZWN0aW9uKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jb25uZWN0IHdpdGggU0lEIHdoaWNoIGlzIG5vdCBtZW50aW9uZWQgYXMgZXh0ZXJuYWwgU0lEIGluIG1hbmlmZXN0IGFuZCBleHBlY3QgUFJPR1JBTU1FUiBFUlJPUiBiZWhhdmlvdXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDEwICAgICAgICB8IEl0IGlzIG5vdCByZXF1aXJlZCBmb3IgdGhlIG1pbm9yX3ZlcnNpb24gb3IgbWlub3JfcG9saWN5IGF0dHJpYnV0ZXMgdG8gYmUgc3BlY2lmaWVkLiBJZiB0aGV5IGFyZSBub3Qgc3BlY2lmaWVkIGluIHRoZSBtYW5pZmVzdCwgdGhlIFJvVCBTZXJ2aWNlIHdpbGwgaGF2ZSBkZWZhdWx0IGF0dHJpYnV0ZXMgb2YgbWlub3JfdmVyc2lvbj0xIGFuZCBtaW5vcl9wb2xpY3k9IlNUUklDVCIuIEluIHRoaXMgY2FzZSwgdGhlIGNhbGwgdG8gcHNhX2Nvbm5lY3QoKSBpcyBQUk9HUkFNTUVSIEVSUk9SIGlmIHJlcXVlc3RlZCB2ZXJzaW9uIGhpZ2hlciB0aGFuIG1pbmltdW0gdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfdW5zcGVjaWZpZWRfcG9saWN5X3dpdGhfaGlnaGVyX21pbm9yX3ZlcigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX2Nvbm5lY3Qgd2l0aCBTSUQgd2hvc2UgVmVyc2lvbiBwb2xpY3kgaXMgbm90IG1lbnRpb25lZCBhbmQgcmVxdWVzdGVkIG1pbm9yIHZlcnNpb24gaXMgSElHSEVSIHRoYW4gbWluaW11bSB2ZXJzaW9uIGFuZCBleHBlY3QgUFJPR1JBTU1FUiBFUlJPUiBiZWhhdmlvdXIuIDxiciAvPlBlcmZvcm0gYWJvdmUgc3RlcCBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMTEgICAgICAgIHwgSXQgaXMgbm90IHJlcXVpcmVkIGZvciB0aGUgbWlub3JfdmVyc2lvbiBvciBtaW5vcl9wb2xpY3kgYXR0cmlidXRlcyB0byBiZSBzcGVjaWZpZWQuIElmIHRoZXkgYXJlIG5vdCBzcGVjaWZpZWQgaW4gdGhlIG1hbmlmZXN0LCB0aGUgUm9UIFNlcnZpY2Ugd2lsbCBoYXZlIGRlZmF1bHQgYXR0cmlidXRlcyBvZiBtaW5vcl92ZXJzaW9uPTEgYW5kIG1pbm9yX3BvbGljeT0iU1RSSUNUIi4gIEluIHRoaXMgY2FzZSwgdGhlIGNhbGwgdG8gcHNhX2Nvbm5lY3QoKSBpcyBQUk9HUkFNTUVSIEVSUk9SIGlmIHJlcXVlc3RlZCB2ZXJzaW9uIGxvd2VyIHRoYW4gbWluaW11bSB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF91bnNwZWNpZmllZF9wb2xpY3lfd2l0aF9sb3dlcl9taW5vcl92ZXIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfY29ubmVjdCB3aXRoIFNJRCB3aG9zZSBWZXJzaW9uIHBvbGljeSBpcyBub3QgbWVudGlvbmVkIGFuZCByZXF1ZXN0ZWQgbWlub3IgdmVyc2lvbiBpcyBsb3dlciB0aGFuIG1pbmltdW0gdmVyc2lvbiBhbmQgZXhwZWN0IFBST0dSQU1NRVIgRVJST1IgYmVoYXZpb3VyLjxiciAvPlBlcmZvcm0gYWJvdmUgc3RlcCBmcm9tIE5TUEUgYW5kIFNQRSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTAxMiAgICAgICAgfCBUaGUgY2FsbCB0byBwc2FfY2xvc2UoKSBpcyBQUk9HUkFNTUVSIEVSUk9SIGlmIGFuIGludmFsaWQgaGFuZGxlIHdhcyBwcm92aWRlZCB0aGF0IGlzIG5vdCB0aGUgbnVsbCBoYW5kbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9jbG9zZV93aXRoX2ludmFsaWRfaGFuZGxlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jbG9zZSB3aXRoIElOVkFMSURfSEFORExFIHdoaWNoIGlzIG5vdCBOVUxMIGFuZCBleHBlY3QgUFJPR1JBTU1FUiBFUlJPUiBiZWhhdmlvdXIuPGJyIC8+UGVyZm9ybSBhYm92ZSBzdGVwIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDEzICAgICAgICB8IFRoZSBjYWxsIHRvIHBzYV9nZXQoKSBpcyBQUk9HUkFNTUVSIEVSUk9SIGlmIHNpZ25hbCBoYXMgbW9yZSB0aGFuIGEgc2luZ2xlIGJpdCBzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX2dldF93aXRoX21vcmVfdGhhbl9vbmVfc2lnbmFsKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX2dldCB3aXRoIGEgc2lnbmFsIHdobyBoYXMgbW9yZSB0aGFuIGEgc2luZ2xlIGJpdCBzZXQgYW5kIGV4cGVjdCBQUk9HUkFNTUVSIEVSUk9SIGJlaGF2aW91ci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMTQgICAgICAgIHwgQWZ0ZXIgYSBSb1QgU2VydmljZSBtZXNzYWdlIGlzIHNpZ25hbGVkLCBwc2FfZ2V0KCkgZnVuY3Rpb24gaXMgdXNlZCB0byByZXRyaWV2ZSB0aGUgbWVzc2FnZSBkZXRhaWxzLiBFYWNoIG1lc3NhZ2UgY2FuIG9ubHkgYmUgcmV0cmlldmVkIG9uY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfZ2V0X2NhbGxlZF90d2ljZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfZ2V0IHdpdGggYSB2YWxpZCBzaWduYWwgYmFjayB0byBiYWNrIGFuZCBleHBlY3QgUFJPR1JBTU1FUiBFUlJPUiBiZWhhdmlvdXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTAxNSAgICAgICAgfCBUaGUgY2FsbCB0byBwc2FfZ2V0KCkgaXMgUFJPR1JBTU1FUiBFUlJPUiAgaWYgc2lnbmFsIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBSb1QgU2VydmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9nZXRfd2l0aF9ub25fcm90X3NpZ25hbCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9nZXQgd2l0aCBET09SQkVMTCBzaWduYWwgYW5kIGV4cGVjdCBQUk9HUkFNTUVSIEVSUk9SIGJlaGF2aW91ciBmb3IgQVBJIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDE2ICAgICAgICB8IFRoZSBjYWxsIHRvIHBzYV9nZXQoKSBpcyBQUk9HUkFNTUVSIEVSUk9SIGlmIFRoZSBSb1QgU2VydmljZSBzaWduYWwgaXMgbm90IGN1cnJlbnRseSBhc3NlcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX2dldF93aXRoX3VuYXNzZXJ0ZWRfc2lnbmFsKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX2dldCB3aXRoIHNpbmdhbCB3aGljaCBpcyBjdXJyZW50bHkgbm90IGFzc2VydGVkIGFuZCBleHBlY3QgUFJPR1JBTU1FUiBFUlJPUiBiZWhhdmlvdXIgZm9yIEFQSSBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMTcgICAgICAgIHwgRWFjaCBSb1QgU2VydmljZSBsaXN0ZWQgY3JlYXRlcyBhIGRlcGVuZGVuY3kgZnJvbSB0aGUgY2xpZW50IFBhcnRpdGlvbiB0byBhIHNlcnZlciBQYXJ0aXRpb24uIFdpdGhpbiB0aGUgcmVzdWx0aW5nIG5ldHdvcmsgb2YgZGVwZW5kZW5jaWVzLCB0aGVyZSBtdXN0IGJlIG5vIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBiZXR3ZWVuIFNlY3VyZSBQYXJ0aXRpb25zLiBUaGlzIHdvdWxkIHJlc3VsdCBpbiBkZWFkbG9jayBiZWNhdXNlIHRoZSBTZXJ2aWNlIHJlcXVlc3RzIGFyZSBhbHdheXMgc3luY2hyb25vdXMuRm9yIHRoZSBzYW1lIHJlYXNvbiwgYSBTZWN1cmUgUGFydGl0aW9uIG11c3Qgbm90IHVzZSBhIFJvVCBTZXJ2aWNlIHRoYXQgaXMgZGVmaW5lZCB3aXRoaW4gaXRzZWxmLiBEaXJlY3QgZnVuY3Rpb24gY2FsbHMgbXVzdCBiZSB1c2VkIGluc3RlYWQgb2YgSVBDIHdoZXJlIHRoZXJlIGlzIGEgZGVwZW5kZW5jeSBiZXR3ZWVuIFJvVCBTZXJ2aWNlcyB3aXRoaW4gYSBzaW5nbGUgU2VjdXJlIFBhcnRpdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wYXJ0aXRpb25fY2FsbGluZ19pdHNfb3duX3JvdF9zZXJ2aWNlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGFydGl0aW9uIGNhbGxpbmcgaXRzIG93biBST1Qgc2VydmljZSB1c2luZyBwc2FfY29ubmVjdCBhbmQgZXhwZWN0IFBST0dSQU1NRVIgRVJST1IgYmVoYXZpb3VyIGZvciBBUEkgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTAxOCAgICAgICAgfCBUaGUgY2FsbCB0byBwc2Ffc2V0X3JoYW5kbGUoKSBpcyBQUk9HUkFNTUVSIEVSUk9SICBpZiBhbiBpbnZhbGlkIG1lc3NhZ2UgaGFuZGxlIHdhcyBwcm92aWRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9zZXRfcmhhbmRsZV93aXRoX2ludmFsaWRfaGFuZGxlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9zZXRfcmhhbmxkZSB3aXRoIGFuIElOVkFMSURfSEFORExFIHdoaWNoIGlzIG5vdCBOVUxMIGFuZCBleHBlY3QgUFJPR1JBTU1FUiBFUlJPUiBiZWhhdmlvdXIgZm9yIEFQSSBjYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDE5ICAgICAgICB8IFRoZSBjYWxsIHRvIHBzYV9zZXRfcmhhbmRsZSgpIGlzIFBST0dSQU1NRVIgRVJST1IgaWYgTnVsbCBoYW5kbGUgd2FzIHBhc3NlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3NldF9yaGFuZGxlX3dpdGhfbnVsbF9oYW5kbGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX3NldF9yaGFubGRlIHdpdGggTlVMTCBoYW5kbGUgYW5kIGV4cGVjdCBQUk9HUkFNTUVSIEVSUk9SIGJlaGF2aW91ciBmb3IgQVBJIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMjAgICAgICAgIHwgSWYgbWVzc2dhZSB0eXBlIGlmIGlzIFBTQV9JUENfQ09OTkVDVCB0aGVuIHVzZSBvZiBzdGF0dXMgdmFsdWVzIGluIHBzYV9yZXBseSgpIG90aGVyIHRoYW4gUFNBX1NVQ0NFU1MsIFBTQV9FUlJPUl9DT05ORUNUSU9OX0JVU1kgYW5kIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQgaXMgYSBQUk9HUkFNTUVSIEVSUk9SLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfcmVwbHlfd2l0aF9pbnZhbGlkX2Nvbm5lY3Rfc3RhdHVzX2NvZGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCB0byBwc2FfcmVwbHkgZHVyaW5nIFBTQV9JUENfQ09OTkVDVCB3aXRoIHN0YXR1cyBjb2RlIG90aGVyIHRoYW4gUFNBX1NVQ0NFU1MgYW5kIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQgYW5kIGV4cGVjdCBQUk9HUkFNTUVSIEVSUk9SIGJlaGF2aW91ciBmb3IgQVBJIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTAyMSAgICAgICAgfCAxLiBwc2Ffd2FpdCgpIHJldHVybnMgdGhlIFNlY3VyZSBQYXJ0aXRpb24gaW50ZXJydXB0IHNpZ25hbHMgdGhhdCBoYXZlIGJlZW4gYXNzZXJ0ZWQgZnJvbSB0aGUgc3Vic2V0IG9mIHNpZ25hbHMgaW5kaWNhdGVkIGluIHRoZSBiaXRtYXNrIHByb3ZpZGVkLiAocHNhX3dhaXQgQVBJIHRvIHJlY2lldmUgaW50ZXJydXB0IHNpZ25hbCkgPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuIHBzYV9lb2koKTpJbmZvcm1zIHRoZSBTUE0gdGhhdCBhbiBpbnRlcnJ1cHQgaGFzIGJlZW4gaGFuZGxlZCAoZW5kIG9mIGludGVycnVwdCkuIFRoaXMgd2lsbCByZS1lbmFibGUgdGhlIGludGVycnVwdCBsaW5lLiA8YnIgLz4zLnBzYV9lb2koKTogQSBzaWduYWwgcmVtYWlucyBhY3RpdmUgdW50aWwgaXQgaXMgcHJvY2Vzc2VkIGJ5IHBzYV9lb2kgPGJyIC8+NC4gTWFuaWZlc3QtIGlycXMgKG9wdGlvbmFsLCB1bmlxdWUpVGhpcyBhdHRyaWJ1dGUgaXMgYSBsaXN0IG9mIElSUSBsaW5lcyB3aGljaCBhcmUgYXNzaWduZWQgdG8gdGhlIFNlY3VyZSBQYXJ0aXRpb24uQSBTZWN1cmUgUGFydGl0aW9uIGFsd2F5cyBoYXMgZXhjbHVzaXZlIGFjY2VzcyB0byBhbiBhc3NpZ25lZCBJUlEuIFNlY3VyZSBQYXJ0aXRpb25zIGFyZSBub3QgYWxsb3dlZCB0byBzaGFyZSBJUlFzIHdpdGggb3RoZXIgU2VjdXJlIFBhcnRpdGlvbnMuRWFjaCBJUlEgc3BlY2lmaWVkIG11c3QgcHJvdmlkZSBhIHNpZ25hbCBmaWVsZC4gVGhpcyBmaWVsZCBjb250YWlucyBhIHN5bWJvbGljIG5hbWUgZm9yIHRoZSBzaWduYWwsIHVzZWQgYnkgdGhlIFNQTSB0byBpbmRpY2F0ZSB3aGVuIHRoZSBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQuIEVhY2ggSVJRIGxpbmUgaXMgZGVjbGFyZWQgYXMgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmc6vyBsaW5lX251bTogQSB2YWxpZCBJUlEgbnVtYmVyIGZvciB0aGUgcGxhdGZvcm0uvyBsaW5lX25hbWU6IEEgbmFtZWQgSVJRLCByZXByZXNlbnRlZCBieSBhIHN0cmluZyBpZGVudGlmaWVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHZW5lcmF0ZSBpbnRlcnJ1cHQgZm9yIGRyaXZlciBwYXJ0aXRpb24gYXNzaWduZWQgaXJxIG51bWJlciBhbmQgY2hlY2tzIHRoYXQ6PGJyIC8+LSBpbnRlcnJ1cHQgaXMgcm91dGVkIHRvIGRyaXZlciBwYXRpdGlvbiA8YnIgLz4tIHBzYV93YWl0IHJldHVybnMgdGhlIHJlcXVpcmVkIGlycV9zaWduYWwgdmFsdWU8YnIgLz4tIGVuZCBvZiBpbnRlcnJ1cHQgdXNpbmcgcHNhX2VvaTxiciAvPlRlc3QgTGltaXRhdGlvbjo8YnIgLz4xLiBSdWxlcyBhcm91bmQgc2hhcmluZyBvZiBpcnEgbGluZXMgY2FuJ3QgYmUgdGVzdGVkIGFzIHNwZWNpZml5aW5nIGl0IGNhbiByZXN1bHQgaW50byBidWlsZCBlcnJvci48YnIgLz4yLiBUZXN0IHN1aXRlIHBhcnRpdGlvbiBtYW5pZmVzdHMgYXJlIHJlbHkgb24gb25seSBsaW5lX251bSBmb3Igc3BlY2lmeWluZyBpcnEgbGluZSBudW1iZXIgYXMgbGluZV9uYW1lIGlzIHN1YmplY3QgdG8gcmVzb2x2ZWQgaW4gSW1wbGVtZW50YXRpb24gZGVmaW5lZCBtYW5uZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNYW5kYXRvcnkgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDIyICAgICAgICB8IFRoZSBjYWxsIHRvIHBzYV9yZXBseSgpIGlzIFBST0dSQU1NRVIgRVJST1IgaWYgdGhlIG1lc3NhZ2UgaGFuZGxlIGlzIGludmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3JlcGx5X3dpdGhfaW52YWxpZF9oYW5kbGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX3JlcGx5IHdpdGggYW4gSU5WQUxJRF9IQU5ETEUgd2hpY2ggaXMgbm90IE5VTEwgYW5kIGV4cGVjdCBQUk9HUkFNTUVSIEVSUk9SIGJlaGF2aW91ciBmb3IgQVBJIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMjMgICAgICAgIHwgVGhlIGNhbGwgdG8gcHNhX3JlcGx5KCkgaXMgUFJPR1JBTU1FUiBFUlJPUiBpZiB0aGUgbWVzc2FnZSBoYW5kbGUgaXMgIE51bGwgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfcmVwbHlfd2l0aF9udWxsX2hhbmRsZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfcmVwbHkgd2l0aCBhIE5VTEwgSEFORExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTAyNCAgICAgICAgfCBUaGUgY2FsbCB0byBwc2FfY2FsbCgpIGlzIFBST0dSQU1NRVIgRVJST1IgaWYgYW4gaW52YWxpZCBoYW5kbGUgd2FzIHBhc3NlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9jYWxsX3dpdGhfaW52YWxpZF9oYW5kbGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jYWxsIHdpdGggYW4gSU5WQUxJRF9IQU5ETEUgd2hpY2ggaXMgbm90IE5VTEwgYW5kIGV4cGVjdCBQUk9HUkFNTUVSIEVSUk9SIGJlaGF2aW91ciBmb3IgQVBJIGNhbGwuUGVyZm9ybSB0aGlzIHN0ZXAgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDI1ICAgICAgICB8IFRoZSBjYWxsIHRvIHBzYV9jYWxsKCkgaXMgUFJPR1JBTU1FUiBFUlJPUiBpZiBhbiBudWxsIGhhbmRsZSB3YXMgcGFzc2VkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX2NhbGxfd2l0aF9udWxsX2hhbmRsZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX2NhbGwgd2l0aCBhIE5VTEwgSEFORExFIGFuZCBleHBlY3QgUFJPR1JBTU1FUiBFUlJPUiBiZWhhdmlvdXIgZm9yIEFQSSBjYWxsLjxiciAvPlBlcmZvcm0gdGhpcyBzdGVwIGZyb20gTlNQRSBhbmQgU1BFIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMjYgICAgICAgIHwgVGhlIGNhbGwgdG8gcHNhX2NhbGwoKSBpcyBQUk9HUkFNTUVSIEVSUk9SICBpZiAgaW5fbGVuICsgb3V0X2xlbiA+IFBTQV9NQVhfSU9WRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfY2FsbF93aXRoX2lvdmVjX21vcmVfdGhhbl9tYXhfbGltaXQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfY2FsbCB3aXRoIG1vcmUgdGhhbiBmb3VyIElPVkVDcyBhbmQgZXhwZWN0IFBST0dSQU1NRVIgRVJST1IgYmVoYXZpb3VyIGZvciBBUEkgY2FsbC4gPGJyIC8+UGVyZm9ybSB0aGlzIHN0ZXAgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTAyNyAgICAgICAgfCBJZiB0aGUgbWVzc2FnZSB0eXBlIGlzIFBTQV9JUENfQ0FMTCBhbmQgdGhlIGNsaWVudCBoYXMgbWFkZSBhbiBpbnZhbGlkIHJlcXVlc3QsIHRoZW4gdGhlIFJvVCBTZXJ2aWNlIGNhbiByZXF1ZXN0IGZvciB0aGUgY29ubmVjdGlvbiB0byBiZSB0ZXJtaW5hdGVkIGJ5IGNhbGxpbmcgcHNhX3JlcGx5KCkgd2l0aCByZXR1cm4gdmFsdWUgUFNBX0VSUk9SX1BST0dSQU1NRVJfRVJST1IuIEFmdGVyIHRoaXMsIHRoZSBSb1QgU2VydmljZSB3aWxsIHJlY2VpdmUgbm8gZnVydGhlciBQU0FfSVBDX0NBTEwgbWVzc2FnZXMgb24gdGhhdCBjb25uZWN0aW9uLiBUaGUgU1BNIHdpbGwgZGVsaXZlciBhIFBTQV9JUENfRElTQ09OTkVDVCB0byB0aGUgUm9UIFNlcnZpY2UgdG8gcmVsZWFzZSBhbnkgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGNvbm5lY3Rpb24uIDxiciAvPklmIHRoZSBTUE0gZG9lcyBub3QgcmVzdGFydCB0aGUgc3lzdGVtIGluIHJlc3BvbnNlIHRvIHRoZSBhYm92ZSBQUk9HUkFNTUVSIEVSUk9SLCB0aGVuIHRlcm1pbmF0aW9uIG9mIHRoZSBjb25uZWN0aW9uIGhhcyB0aGUgZm9sbG93aW5nIGVmZmVjdHM6PGJyIC8+LSBObyBmdXJ0aGVyIFBTQV9JUENfQ0FMTCBtZXNzYWdlcyB3aWxsIGJlIHJlY2VpdmVkIGJ5IHRoZSBSb1QgU2VydmljZSBmb3IgdGhlIGNvbm5lY3Rpb24uPGJyIC8+LSBUaGUgUm9UIFNlcnZpY2Ugd2lsbCByZWNlaXZlIGEgUFNBX0lQQ19ESVNDT05ORUNUIG1lc3NhZ2UgZm9yIHRoZSBjb25uZWN0aW9uIHRvIHJlbGVhc2UgcmVzb3VyY2VzIGFuZCByZXNldCBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbm5lY3Rpb24uPGJyIC8+LSBUaGUgZmFpbGluZyBjYWxsIHRvIHBzYV9jYWxsKCkgd2lsbCByZXR1cm4gUFNBX0VSUk9SX1BST0dSQU1NRVJfRVJST1IuPGJyIC8+LSBTdWJzZXF1ZW50IGNhbGxzIHRvIHBzYV9jYWxsKCkgb24gdGhlIHNhbWUgY29ubmVjdGlvbiB3aWxsIGltbWVkaWF0ZWx5IHJldHVybiBQU0FfRVJST1JfUFJPR1JBTU1FUl9FUlJPUi48YnIgLz4tIFRoZSBjbGllbnQgbXVzdCBjYWxsIHBzYV9jbG9zZSgpIHRvIGNsb3NlIHRoZSBjb25uZWN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9kcm9wX2Nvbm5lY3Rpb24oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSb1Qgc2VydmljZSBleGVjdXRlcyBwc2FfcmVwbHkgd2l0aCBzdGF0dXMgY29kZSBlcXVhbCB0byBQU0FfRVJST1JfUFJPR1JBTU1FUl9FUlJPUiBkdXJpbmcgUFNBX0lQQ19DQUxMLkNsaWVudCBleHBlY3RzIGVpdGhlciBQU0FfRVJST1JfUFJPR1JBTU1FUl9FUlJPUiBhcyByZXR1cm5lZCBzdGF0dXMgY29kZSBmb3IgcHNhX2NhbGwgb3Igc3lzdGVtIHRvIGdldCBwYW5pY2VkIDxiciAvPlBlcmZvcm0gYWJvdmUgc3RlcHMgZnJvbSBOU1BFIGFuZCBTUEUgYm90aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDI4ICAgICAgICB8IFRoZSBjYWxsIHRvIHBzYV9yZWFkKCkgaXMgUFJPR1JBTU1FUiBFUlJPUiBpZiAgbXNnX2hhbmRsZSBkb2VzIG5vdCByZWZlciB0byBhIFBTQV9JUENfQ0FMTCBtZXNzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3JlYWRfYXRfaXBjX2Nvbm5lY3QoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX3JlYWQgZHVyaW5nIFBTQV9JUENfQ09OTkVDVCBhbmQgZXhwZWN0IFBST0dSQU1NRVIgRVJST1IgYmVoYXZpb3VyIGZvciBBUEkgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMjkgICAgICAgIHwgVGhlIGNhbGwgdG8gcHNhX3JlYWQoKSBpcyBQUk9HUkFNTUVSIEVSUk9SICBpZiBtc2dfaGFuZGxlIGRvZXMgbm90IHJlZmVyIHRvIGEgUFNBX0lQQ19DQUxMIG1lc3NhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfcmVhZF9hdF9pcGNfZGlzY29ubmVjdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfcmVhZCBkdXJpbmcgUFNBX0lQQ19ESVNDT05ORUNUIGFuZCBleHBlY3QgUFJPR1JBTU1FUiBFUlJPUiBiZWhhdmlvdXIgZm9yIEFQSSBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTAzMCAgICAgICAgfCBUaGUgY2FsbCB0byBwc2FfcmVhZCgpIGlzIFBST0dSQU1NRVIgRVJST1IgaWYgTnVsbCBoYW5kbGUgd2FzIHBhc3NlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9yZWFkX3dpdGhfbnVsbF9oYW5kbGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9yZWFkIHdpdGggTlVMTCBoYW5kbGUgYW5kIGV4cGVjdCBQUk9HUkFNTUVSIEVSUk9SIGJlaGF2aW91ciBmb3IgQVBJIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDMxICAgICAgICB8IFRoZSBjYWxsIHRvIHBzYV9yZWFkKCkgaXMgUFJPR1JBTU1FUiBFUlJPUiBpZiAgSW52YWxpZCBoYW5kbGUgd2FzIHBhc3NlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3JlYWRfd2l0aF9pbnZhbGlkX2hhbmRsZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGxsIHBzYV9yZWFkIHdpdGggSU5WQUxJRF9IQU5ETEUgd2hpY2ggaXMgbm90IE5VTEwgYW5kIGV4cGVjdCBQUk9HUkFNTUVSIEVSUk9SIGJlaGF2aW91ciBmb3IgQVBJIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMzIgICAgICAgIHwgVGhlIGNhbGwgdG8gcHNhX3JlYWQoKSBpcyBQUk9HUkFNTUVSIEVSUk9SIGlmIGludmVjX2lkeCBpcyBlcXVhbCB0byBQU0FfTUFYX0lPVkVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfcmVhZF93aXRoX2ludmVjX2VxdWFsX3RvX21heF9pb3ZlYygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfcmVhZCB3aXRoIGludmVjX2lkeD1QU0FfTUFYX0lPVkVDIGFuZCBleHBlY3QgUFJPR1JBTU1FUiBFUlJPUiBiZWhhdmlvdXIgZm9yIEFQSSBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTAzMyAgICAgICAgfCBUaGUgY2FsbCB0byBwc2FfcmVhZCgpIGlzIFBST0dSQU1NRVIgRVJST1IgaWYgIGludmVjX2lkeCBpcyBncmVhdGVyIHRoYW4gUFNBX01BWF9JT1ZFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9yZWFkX3dpdGhfaW52ZWNfZ3JlYXRlcl90aGFuX21heF9pb3ZlYygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9yZWFkIHdpdGggaW52ZWNfaWR4PlBTQV9NQVhfSU9WRUMgYW5kIGV4cGVjdCBQUk9HUkFNTUVSIEVSUk9SIGJlaGF2aW91ciBmb3IgQVBJIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDM0ICAgICAgICB8IFRoZSBjYWxsIHRvIHBzYV9za2lwKCkgaXMgUFJPR1JBTU1FUiBFUlJPUiAgaWYgIG1zZ19oYW5kbGUgZG9lcyBub3QgcmVmZXIgdG8gYSBQU0FfSVBDX0NBTEwgbWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3NraXBfYXRfaXBjX2Nvbm5lY3QoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX3NraXAgZHVyaW5nIFBTQV9JUENfQ09OTkVDVCBhbmQgZXhwZWN0IFBST0dSQU1NRVIgRVJST1IgYmVoYXZpb3VyIGZvciBBUEkgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMzUgICAgICAgIHwgVGhlIGNhbGwgdG8gcHNhX3NraXAoKSBpcyBQUk9HUkFNTUVSIEVSUk9SIGlmICBtc2dfaGFuZGxlIGRvZXMgbm90IHJlZmVyIHRvIGEgUFNBX0lQQ19DQUxMIG1lc3NhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffc2tpcF9hdF9pcGNfZGlzY29ubmVjdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2Ffc2tpcCBkdXJpbmcgUFNBX0lQQ19ESVNDT05ORUNUIGFuZCBleHBlY3QgUFJPR1JBTU1FUiBFUlJPUiBiZWhhdmlvdXIgZm9yIEFQSSBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTAzNiAgICAgICAgfCBUaGUgY2FsbCB0byBwc2Ffc2tpcCgpIGlzIFBST0dSQU1NRVIgRVJST1IgaWYgICBOdWxsIGhhbmRsZSB3YXMgcGFzc2VkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9za2lwX3dpdGhfbnVsbF9oYW5kbGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9za2lwd2l0aCBOVUxMIGhhbmRsZSBhbmQgZXhwZWN0IFBST0dSQU1NRVIgRVJST1IgYmVoYXZpb3VyIGZvciBBUEkgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDM3ICAgICAgICB8IFRoZSBjYWxsIHRvIHBzYV9za2lwKCkgaXMgUFJPR1JBTU1FUiBFUlJPUiBpZiAgSW52YWxpZCBoYW5kbGUgd2FzIHBhc3NlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3NraXBfd2l0aF9pbnZhbGlkX2hhbmRsZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGxsIHBzYV9za2lwIHdpdGggSU5WQUxJRF9IQU5ETEUgd2hpY2ggaXMgbm90IE5VTEwgYW5kIGV4cGVjdCBQUk9HUkFNTUVSIEVSUk9SIGJlaGF2aW91ciBmb3IgQVBJIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwMzggICAgICAgIHwgVGhlIGNhbGwgdG8gcHNhX3NraXAoKSBpcyBQUk9HUkFNTUVSIEVSUk9SICBpZiAgaW52ZWNfaWR4IGlzIGVxdWFsIHRvIFBTQV9NQVhfSU9WRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffc2tpcF93aXRoX2ludmVjX2VxdWFsX3RvX21heF9pb3ZlYygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2Ffc2tpcCB3aXRoIGludmVjX2lkeD1QU0FfTUFYX0lPVkVDIGFuZCBleHBlY3QgUFJPR1JBTU1FUiBFUlJPUiBiZWhhdmlvdXIgZm9yIEFQSSBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTAzOSAgICAgICAgfCBUaGUgY2FsbCB0byBwc2Ffc2tpcCgpIGlzIFBST0dSQU1NRVIgRVJST1IgaWYgIGludmVjX2lkeCBpcyBncmVhdGVyIHRoYW4gUFNBX01BWF9JT1ZFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9za2lwX3dpdGhfaW52ZWNfZ3JlYXRlcl90aGFuX21heF9pb3ZlYygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9za2lwIHdpdGggaW52ZWNfaWR4PlBTQV9NQVhfSU9WRUMgYW5kIGV4cGVjdCBQUk9HUkFNTUVSIEVSUk9SIGJlaGF2aW91ciBmb3IgQVBJIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDQwICAgICAgICB8IFRoZSBjYWxsIHRvIHBzYV93cml0ZSgpIGlzIFBST0dSQU1NRVIgRVJST1IgaWYgbXNnX2hhbmRsZSBkb2VzIG5vdCByZWZlciB0byBhIFBTQV9JUENfQ0FMTCBtZXNzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3dyaXRlX2F0X2lwY19jb25uZWN0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX3dyaXRlIGR1cmluZyBQU0FfSVBDX0NPTk5FQ1QgYW5kIGV4cGVjdCBQUk9HUkFNTUVSIEVSUk9SIGJlaGF2aW91ciBmb3IgQVBJIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwNDEgICAgICAgIHwgVGhlIGNhbGwgdG8gcHNhX3dyaXRlKCkgaXMgUFJPR1JBTU1FUiBFUlJPUiAgaWYgIG1zZ19oYW5kbGUgZG9lcyBub3QgcmVmZXIgdG8gYSBQU0FfSVBDX0NBTEwgbWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffd3JpdGVfYXRfaXBjX2Rpc2Nvbm5lY3QoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2Ffd3JpdGUgZHVyaW5nIFBTQV9JUENfRElTQ09OTkVDVCBhbmQgZXhwZWN0IFBST0dSQU1NRVIgRVJST1IgYmVoYXZpb3VyIGZvciBBUEkgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTA0MiAgICAgICAgfCBUaGUgY2FsbCB0byBwc2Ffd3JpdGUoKSBpcyBQUk9HUkFNTUVSIEVSUk9SICBpZiBOdWxsIGhhbmRsZSB3YXMgcGFzc2VkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV93cml0ZV93aXRoX251bGxfaGFuZGxlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV93cml0ZSB3aXRoIE5VTEwgaGFuZGxlIGFuZCBleHBlY3QgUFJPR1JBTU1FUiBFUlJPUiBiZWhhdmlvdXIgZm9yIEFQSSBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDQzICAgICAgICB8IFRoZSBjYWxsIHRvIHBzYV93cml0ZSgpIGlzIFBST0dSQU1NRVIgRVJST1IgaWYgIEludmFsaWQgaGFuZGxlIHdhcyBwYXNzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3dyaXRlX3dpdGhfaW52YWxpZF9oYW5kbGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGxsIHBzYV93cml0ZSB3aXRoIElOVkFMSURfSEFORExFIHdoaWNoIGlzIG5vdCBOVUxMIGFuZCBleHBlY3QgUFJPR1JBTU1FUiBFUlJPUiBiZWhhdmlvdXIgZm9yIEFQSSBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwNDQgICAgICAgIHwgVGhlIGNhbGwgdG8gcHNhX3dyaXRlKCkgaXMgUFJPR1JBTU1FUiBFUlJPUiAgaWYgIGludmVjX2lkeCBpcyBlcXVhbCB0byBQU0FfTUFYX0lPVkVDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffd3JpdGVfd2l0aF9pbnZlY19lcXVhbF90b19tYXhfaW92ZWMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2Ffd3JpdGUgd2l0aCBpbnZlY19pZHg9UFNBX01BWF9JT1ZFQyBhbmQgZXhwZWN0IFBST0dSQU1NRVIgRVJST1IgYmVoYXZpb3VyIGZvciBBUEkgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTA0NSAgICAgICAgfCBUaGUgY2FsbCB0byBwc2Ffd3JpdGUoKSBpcyBQUk9HUkFNTUVSIEVSUk9SIGlmICBpbnZlY19pZHggaXMgZ3JlYXRlciB0aGFuIFBTQV9NQVhfSU9WRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV93cml0ZV93aXRoX2ludmVjX2dyZWF0ZXJfdGhhbl9tYXhfaW92ZWMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV93cml0ZSB3aXRoIGludmVjX2lkeD5QU0FfTUFYX0lPVkVDIGFuZCBleHBlY3QgUFJPR1JBTU1FUiBFUlJPUiBiZWhhdmlvdXIgZm9yIEFQSSBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDQ2ICAgICAgICB8IFRoZSBjYWxsIHRvIHBzYV93cml0ZSgpIGlzIFBST0dSQU1NRVIgRVJST1IgaWYgIHRoZSBjYWxsIGF0dGVtcHRzIHRvIHdyaXRlIGRhdGEgcGFzdCB0aGUgZW5kIG9mIHRoZSBjbGllbnQgb3V0cHV0IHZlY3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3dyaXRlX3dpdGhfc2l6ZV9vdmVyZmxvdygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX3dyaXRlIHdpdGggYSBzaXplIGlucHV0IG9uZSBieXRlIGJpZ2dlciB0aGFuIGFsbG93ZWQgc2l6ZSBhbmQgZXhwZWN0IFBST0dSQU1NRVIgRVJST1IgYmVoYXZpb3VyIGZvciBBUEkgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwNDcgICAgICAgIHwgVGhlIGNhbGwgdG8gcHNhX2dldCgpIGlzIFBST0dSQU1NRVIgRVJST1IgaWYgIFRoZSBtc2cgcG9pbnRlciBwcm92aWRlZCBpcyBub3QgYSB2YWxpZCBtZW1vcnkgcmVmZXJlbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfZ2V0X3dpdGhfaW52YWxpZF9tc2dfcG9pbnRlcigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfZ2V0IHdpdGggaW52YWxpZCBtc2cgcG9pbnRlciBhbmQgZXhwZWN0IFBST0dSQU1NRVIgRVJST1IgYmVoYXZpb3VyIGZvciBBUEkgY2FsbC48YnIgLz4gU2VsZWN0aW9uIG9mIGludmFsaWQgcG9pbnRlciBpcyBhcyBiZWxvdzo8YnIgLz5pZiAoSVNPTEFUSU9OX0xFVkVMID4gMSk8YnIgLz4gICAgIC8vIFBTQSBSb1QgUG9pbnRlciA8YnIgLz4gICAgICBwc2FfZ2V0KG1zZ19wb2ludGVyID0gZHJpdmVyX21taW9fYmFzZSk7PGJyIC8+ZWxzZTxiciAvPiAgICAgIHBzYV9nZXQobXNnX3BvaW50ZXIgPSBOVUxMKTs8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTA0OCAgICAgICAgfCBUaGUgY2FsbCB0byBwc2FfY2FsbCgpIGlzIFBST0dSQU1NRVIgRVJST1IgIGlmIGFkZHJlc3Mgb2YgaW5fdmVjIGlzIGludmFsaWQgZm9yIGNsaWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9jYWxsX3dpdGhfaW52YWxpZF9pbnZlY19wb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jYWxsIHdpdGggaW52YWxpZCBhZGRyZXNzIGZvciBpbnZlYyBhbmQgZXhwZWN0IFBST0dSQU1NRVIgRVJST1IgYmVoYXZpb3VyIGZvciBBUEkgY2FsbC48YnIgLz4gU2VsZWN0aW9uIG9mIGludmFsaWQgaW52ZWMgcG9pbnRlciBpcyBhcyBiZWxvdzo8YnIgLz4gICAgIGlmIGNhbGxlciA9PSBOT05TRUNVUkU8YnIgLz4gICAgICAgIC8vIFBTQSBSb1QgcG9pbnRlcjxiciAvPiAgICAgICAgaW52ZWNfcG9pbnRlciA9IGRyaXZlcl9tbWlvX2Jhc2U7PGJyIC8+PGJyIC8+ICAgICBlbHNlPGJyIC8+PGJyIC8+ICAgICAgICBpZiAoSVNPTEFUSU9OX0xFVkVMID4gMSk8YnIgLz4gICAgICAgICAgIGludmVjX3BvaW50ZXIgPSBkcml2ZXJfbW1pb19iYXNlOzxiciAvPiAgICAgICAgZWxzZTxiciAvPiAgICAgICAgICAgaW52ZWNfcG9pbnRlciA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDQ5ICAgICAgICB8IFRoZSBjYWxsIHRvIHBzYV9jYWxsKCkgaXMgUFJPR1JBTU1FUiBFUlJPUiBpZiAgYWRkcmVzcyBvZiBvdXRfdmVjIGlzIGludmFsaWQgZm9yIGNsaWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX2NhbGxfd2l0aF9pbnZhbGlkX291dHZlY19wb2ludGVyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX2NhbGwgd2l0aCBpbnZhbGlkIGFkZHJlc3MgZm9yIG91dHZlYyBhbmQgZXhwZWN0IFBST0dSQU1NRVIgRVJST1IgYmVoYXZpb3VyIGZvciBBUEkgY2FsbC48YnIgLz4gU2VsZWN0aW9uIG9mIGludmFsaWQgb3V0dmVjIHBvaW50ZXIgaXMgYXMgYmVsb3c6PGJyIC8+ICAgICBpZiBjYWxsZXIgPT0gTk9OU0VDVVJFPGJyIC8+ICAgICAgICAvLyBQU0EgUm9UIHBvaW50ZXI8YnIgLz4gICAgICAgIG91dHZlY19wb2ludGVyID0gZHJpdmVyX21taW9fYmFzZTs8YnIgLz48YnIgLz4gICAgIGVsc2U8YnIgLz48YnIgLz4gICAgICAgIGlmIChJU09MQVRJT05fTEVWRUwgPiAxKTxiciAvPiAgICAgICAgICAgb3V0dmVjX3BvaW50ZXIgPSBkcml2ZXJfbW1pb19iYXNlOzxiciAvPiAgICAgICAgZWxzZTxiciAvPiAgICAgICAgICAgb3V0dmVjX3BvaW50ZXIgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwNTAgICAgICAgIHwgVGhlIGNhbGwgdG8gcHNhX2NhbGwoKSBpcyBQUk9HUkFNTUVSIEVSUk9SIGlmIHBzYV9pbnZlYy5iYXNlIGFkZHJlc3MgaXMgaW52YWxpZCBmb3IgY2xpZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfaW52ZWNfYmFzZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfY2FsbCB3aXRoIGludmFsaWQgYWRkcmVzcyBmb3IgcHNhX2ludmVjLmJhc2UgYW5kIGV4cGVjdCBQUk9HUkFNTUVSIEVSUk9SIGJlaGF2aW91ciBmb3IgQVBJIGNhbGwuPGJyIC8+IFNlbGVjdGlvbiBvZiBpbnZhbGlkIGJhc2UgaXMgYXMgYmVsb3c6PGJyIC8+ICAgICBpZiBjYWxsZXIgPT0gTk9OU0VDVVJFPGJyIC8+ICAgICAgICAvLyBQU0EgUm9UIHBvaW50ZXI8YnIgLz4gICAgICAgIGludmFsaWRfYmFzZSA9IGRyaXZlcl9tbWlvX2Jhc2U7PGJyIC8+PGJyIC8+ICAgICBlbHNlPGJyIC8+PGJyIC8+ICAgICAgICBpZiAoSVNPTEFUSU9OX0xFVkVMID4gMSk8YnIgLz4gICAgICAgICAgIGludmFsaWRfYmFzZSA9IGRyaXZlcl9tbWlvX2Jhc2U7PGJyIC8+ICAgICAgICBlbHNlPGJyIC8+ICAgICAgICAgICBpbnZhbGlkX2Jhc2UgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTA1MSAgICAgICAgfCBUaGUgY2FsbCB0byBwc2FfY2FsbCgpIGlzIFBST0dSQU1NRVIgRVJST1IgaWYgcHNhX291dHZlYy5iYXNlIGFkZHJlc3MgaXMgaW52YWxpZCBmb3IgY2xpZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9jYWxsX3dpdGhfaW52YWxpZF9vdXR2ZWNfYmFzZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jYWxsIHdpdGggaW52YWxpZCBhZGRyZXNzIGZvciBwc2Ffb3V0dmVjLmJhc2UgYW5kIGV4cGVjdCBQUk9HUkFNTUVSIEVSUk9SIGJlaGF2aW91ciBmb3IgQVBJIGNhbGwuPGJyIC8+IFNlbGVjdGlvbiBvZiBpbnZhbGlkIGJhc2UgaXMgYXMgYmVsb3c6PGJyIC8+ICAgICBpZiBjYWxsZXIgPT0gTk9OU0VDVVJFPGJyIC8+ICAgICAgICAvLyBQU0EgUm9UIHBvaW50ZXI8YnIgLz4gICAgICAgIGludmFsaWRfYmFzZSA9IGRyaXZlcl9tbWlvX2Jhc2U7PGJyIC8+PGJyIC8+ICAgICBlbHNlPGJyIC8+PGJyIC8+ICAgICAgICBpZiAoSVNPTEFUSU9OX0xFVkVMID4gMSk8YnIgLz4gICAgICAgICAgIGludmFsaWRfYmFzZSA9IGRyaXZlcl9tbWlvX2Jhc2U7PGJyIC8+ICAgICAgICBlbHNlPGJyIC8+ICAgICAgICAgICBpbnZhbGlkX2Jhc2UgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDUyICAgICAgICB8IFRoZSBjYWxsIHRvIHBzYV9jYWxsKCkgaXMgUFJPR1JBTU1FUiBFUlJPUiAgaWYgcHNhX2ludmVjLmJhc2UgYWRkciBpcyB2YWxpZCBidXQgIHBzYV9pbnZlYy5iYXNlK3NpemUgYWRkcmVzcyBpcyBpbnZhbGlkIGZvciBjbGllbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX2NhbGxfd2l0aF9pbnZhbGlkX2ludmVjX2VuZF9hZGRyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX2NhbGwgd2l0aCB2YWxpZCBhZGRyZXNzIGZvciBwc2FfaW52ZWMuYmFzZSBidXQgKHBzYV9pbnZlYy5iYXNlICsgcHNhX2ludmVjLnNpemUpIHBvaW50aW5nIHRvIGludmFsaWQgYWRkcmVzcyBhbmQgZXhwZWN0IFBST0dSQU1NRVIgRVJST1IgYmVoYXZpb3VyIGZvciBBUEkgY2FsbC48YnIgLz4gU2VsZWN0aW9uIG9mIGJhc2UgYW5kIHNpemUgYXJlIGFzIGJlbG93OjxiciAvPiAgICAgaWYgY2FsbGVyID09IE5PTlNFQ1VSRTxiciAvPiAgICAgICAgICB2YWxpZF9iYXNlID0gbnNwZV9tbWlvX3JlZ2lvbl9iYXNlOzxiciAvPiAgICAgICAgICBpbnZhbGlkX3NpemUgPSAoZHJpdmVyX21taW9fcmVnaW9uX2Jhc2UgLSBuc3BlX21taW9fcmVnaW9uX2Jhc2UgKyAxKTs8YnIgLz48YnIgLz4gICAgIGVsc2U8YnIgLz48YnIgLz4gICAgICAgIGlmIChJU09MQVRJT05fTEVWRUwgPiAxKTxiciAvPiAgICAgICAgICB2YWxpZF9iYXNlID0gc2VydmVyX21taW9fcmVnaW9uX2Jhc2U7PGJyIC8+ICAgICAgICAgIGludmFsaWRfc2l6ZSA9IChkcml2ZXJfbW1pb19yZWdpb25fYmFzZSAtIHNlcnZlcl9tbWlvX3JlZ2lvbl9iYXNlICsgMSk7PGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwNTMgICAgICAgIHwgVGhlIGNhbGwgdG8gcHNhX2NhbGwoKSBpcyBQUk9HUkFNTUVSIEVSUk9SIGlmIHBzYV9vdXR2ZWMuYmFzZSBhZGRyIGlzIHZhbGlkIGJ1dCAgcHNhX2ludmVjLmJhc2Urc2l6ZWFkZHJlc3MgaXMgaW52YWxpZCBmb3IgY2xpZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfb3V0dmVjX2VuZF9hZGRyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfY2FsbCB3aXRoIHZhbGlkIGFkZHJlc3MgZm9yIHBzYV9vdXR2ZWMuYmFzZSBidXQgKHBzYV9vdXR2ZWMuYmFzZSArIHBzYV9vdXR2ZWMuc2l6ZSkgcG9pbnRpbmcgdG8gaW52YWxpZCBhZGRyZXNzIGFuZCBleHBlY3QgUFJPR1JBTU1FUiBFUlJPUiBiZWhhdmlvdXIgZm9yIEFQSSBjYWxsLjxiciAvPiBTZWxlY3Rpb24gb2YgYmFzZSBhbmQgc2l6ZSBhcmUgYXMgYmVsb3c6PGJyIC8+ICAgICBpZiBjYWxsZXIgPT0gTk9OU0VDVVJFPGJyIC8+ICAgICAgICAgIHZhbGlkX2Jhc2UgPSBuc3BlX21taW9fcmVnaW9uX2Jhc2U7PGJyIC8+ICAgICAgICAgIGludmFsaWRfc2l6ZSA9IChkcml2ZXJfbW1pb19yZWdpb25fYmFzZSAtIG5zcGVfbW1pb19yZWdpb25fYmFzZSArIDEpOzxiciAvPjxiciAvPiAgICAgZWxzZTxiciAvPjxiciAvPiAgICAgICAgaWYgKElTT0xBVElPTl9MRVZFTCA+IDEpPGJyIC8+ICAgICAgICAgIHZhbGlkX2Jhc2UgPSBzZXJ2ZXJfbW1pb19yZWdpb25fYmFzZTs8YnIgLz4gICAgICAgICAgaW52YWxpZF9zaXplID0gKGRyaXZlcl9tbWlvX3JlZ2lvbl9iYXNlIC0gc2VydmVyX21taW9fcmVnaW9uX2Jhc2UgKyAxKTs8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTA1NCAgICAgICAgfCBUaGUgY2FsbCB0byBwc2FfY2FsbCgpIGlzIFBST0dSQU1NRVIgRVJST1IgIGlmIHBzYV9vdXR2ZWMuYmFzZSBpcyBub3Qgd3JpdGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9jYWxsX3dpdGhfbm90X3dyaXRhYmxlX291dHZlY19iYXNlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9jYWxsIHdpdGggbm90IHdyaXRhYmxlIChjb2RlIGFkZHJlc3MpIHBzYV9vdXR2ZWMuYmFzZSBhbmQgZXhwZWN0IFBST0dSQU1NRVIgRVJST1IgYmVoYXZpb3VyIGZvciBBUEkgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDU1ICAgICAgICB8IFRoZSBjYWxsIHRvIHBzYV9yZWFkKCkgaXMgUFJPR1JBTU1FUiBFUlJPUiBpZiB0aGUgbWVtb3J5IHJlZmVyZW5jZSBmb3IgYnVmZmVyIGlzIGludmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX3JlYWRfd2l0aF9pbnZhbGlkX2J1ZmZlcl9hZGRyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX3JlYWQgd2l0aCBpbnZhbGlkIGJ1ZmZlciBhZGRyIGFuZCBleHBlY3QgUFJPR1JBTU1FUiBFUlJPUiBiZWhhdmlvdXIgZm9yIEFQSSBjYWxsLjxiciAvPlNlbGVjdGlvbiBvZiBidWZmZXIgYWRkcmVzcyBpcyBhcyBiZWxvdzo8YnIgLz5pZiAoSVNPTEFUSU9OX0xFVkVMID4gMSk8YnIgLz4gICAgICAgICAgYnVmZmVyID0gZHJpdmVyX21taW9fcmVnaW9uX2Jhc2U7PGJyIC8+ZWxzZSA8YnIgLz4gICAgICAgICBidWZmZXIgPSBOVUxMOyA8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwNTYgICAgICAgIHwgVGhlIGNhbGwgdG8gcHNhX3JlYWQoKSBpcyBQUk9HUkFNTUVSIEVSUk9SIGlmIHRoZSBtZW1vcnkgcmVmZXJlbmNlIGZvciBidWZmZXIgaXMgbm90IHdyaXRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2FfcmVhZF93aXRoX25vdF93cml0YWJsZV9idWZmZXJfYWRkcigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2FfcmVhZCB3aXRoIG5vdCB3cml0YWJsZSBhZGRyZXNzIChmdW5jdGlvbiBhZGRyZXNzLSBjb2RlIG1lbW9yeSkgIGFuZCBleHBlY3QgUFJPR1JBTU1FUiBFUlJPUiBiZWhhdmlvdXIgZm9yIEFQSSBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTA1NyAgICAgICAgfCBUaGUgY2FsbCB0byBwc2Ffd3JpdGUoKSBpcyBQUk9HUkFNTUVSIEVSUk9SIGlmIHRoZSBtZW1vcnkgcmVmZXJlbmNlIGZvciBidWZmZXIgaXMgaW52YWxpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV93cml0ZV93aXRoX2ludmFsaWRfYnVmZmVyX2FkZHIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV93cml0ZSB3aXRoIGludmFsaWQgYnVmZmVyIGFkZHIgYW5kIGV4cGVjdCBQUk9HUkFNTUVSIEVSUk9SIGJlaGF2aW91ciBmb3IgQVBJIGNhbGwuPGJyIC8+IFNlbGVjdGlvbiBvZiBidWZmZXIgYWRkcmVzcyBpcyBhcyBiZWxvdzo8YnIgLz5pZiAoSVNPTEFUSU9OX0xFVkVMID4gMSk8YnIgLz4gICAgICAgICAgYnVmZmVyID0gZHJpdmVyX21taW9fcmVnaW9uX2Jhc2U7PGJyIC8+ZWxzZSA8YnIgLz4gICAgICAgICBidWZmZXIgPSBOVUxMOyA8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDU4ICAgICAgICB8IDEuIHBzYV9ub3RpZnkoKSBpcyB1c2VkIHRvIGFzeW5jaHJvbm91c2x5IHdha2UgdXAgYW5vdGhlciBTZWN1cmUgUGFydGl0aW9uLiBUaGUgcmVjZWl2aW5nIHBhcnRpdGlvbiB1c2VzIHBzYV93YWl0KCkgdG8gZGV0ZWN0LCBvciB3YWl0IGZvciwgYXNzZXJ0aW9uIG9mIGl0cyBQU0FfRE9PUkJFTEwgc2lnbmFsLiBUaGUgdmFsdWUgb2YgcGFydGl0aW9uX2lkIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8gYXMgdGhlIHRhcmdldCBvZiBub3RpZmljYXRpb24gbXVzdCBiZSBhIFNlY3VyZSBQYXJ0aXRpb24uIDxiciAvPjIuIHBzYV9jbGVhcigpIGNsZWFycyB0aGUgUFNBX0RPT1JCRUxMIHNpZ25hbC4gIDxiciAvPjMuIHBzYV9jbGVhcigpOiBUaGUgdGFyZ2V0IFBhcnRpdGlvbiBkb29yYmVsbCB3aWxsIHJlbWFpbiBhc3NlcnRlZCB1bnRpbCBpdCBjYWxscyBwc2FfY2xlYXIoKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX2Rvb3JiZWxsX3NpZ25hbCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIENsaWVudCBjb25uZWN0cyB0byBSb1Qgc2VydmljZS4gPGJyIC8+Mi4gUm9UIHNlcnZpY2VzIGV4ZWN1dGVzIGFzc2VydHMgUFNBX0RPT1JCRUxMIHNpbmdhbCBiYWNrIHRvIGNsaWVudCBhZnRlciBhY2NlcHRpbmcgdGhlIGNvbm5lY3Rpb24uPGJyIC8+My4gQ2xpZW50IGNoZWNrcyB0aGUgZGVsaXZlcnkgb2YgUFNBX0RPT1JCRUxMIHNpbmdhbCB1c2luZyBwc2Ffd2FpdCgpLjxiciAvPjQuIENsaWVudCBjbGVhcnMgdGhlIGRvb3JiZWxsIGFuZCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24uIDxiciAvPjUuIFJvVCBzZXJ2aWNlIHJlY2VpdmVzIHRoZSBjbG9zaW5nIGNvbm5lY3Rpb24gcmVxdWVzdC48YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1hbmRhdG9yeSAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwNTkgICAgICAgIHwgVGhlIGNhbGwgdG8gcHNhX25vdGlmeSgpIGlzIFBST0dSQU1NRVIgRVJST1IgIGlmIFBhcnRpdGlvbiBJRCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgU2VjdXJlIFBhcnRpdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9wc2Ffbm90aWZ5X3dpdGhfbmVnX3BhcnRfaWQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2Ffbm90aWZ5IHdpdGggbmVnYXRpdmUgcGFydGl0aW9uIGlkIGFuZCBleHBlY3QgUFJPR1JBTU1FUiBFUlJPUiBiZWhhdmlvdXIgZm9yIEFQSSBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTA2MCAgICAgICAgfCBUaGUgY2FsbCB0byBwc2Ffbm90aWZ5KCkgaXMgUFJPR1JBTU1FUiBFUlJPUiBpZiBQYXJ0aXRpb24gSUQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIFNlY3VyZSBQYXJ0aXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV9ub3RpZnlfd2l0aF9pbnZhbGlkX3Bvc19wYXJ0X2lkKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHBzYV9ub3RpZnkgd2l0aCBwb3NpdGl2ZSBwYXJ0aXRpb24gaWQgd2hpY2ggZG9lcyBub3QgZXhpc3QgaW4gdGhlIHBsYXRmb3JtIGFuZCBleHBlY3QgUFJPR1JBTU1FUiBFUlJPUiBiZWhhdmlvdXIgZm9yIEFQSSBjYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDYxICAgICAgICB8IFRoZSBjYWxsIHRvIHBzYV9jbGVhcigpIGlzIFBST0dSQU1NRVIgRVJST1IgaWYgVGhlIFNlY3VyZSBQYXJ0aXRpb26/cyBkb29yYmVsbCBzaWduYWwgaXMgbm90IGN1cnJlbnRseSBhc3NlcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfcHNhX2NsZWFyX2F0X3VuYXNzZXJ0ZWRfZG9vcmJlbGxfc2lnKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX2NsZWFyIHdoZW4gZG9vcmJlbGwgc2lnbmFsIGlzIG5vdCBhc3NlcnRlZCBhbmQgZXhwZWN0IFBST0dSQU1NRVIgRVJST1IgYmVoYXZpb3VyIGZvciBBUEkgY2FsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwNjIgICAgICAgIHwgVGhlIGNhbGwgdG8gcHNhX3dhaXQoKSBpcyBQUk9HUkFNTUVSIEVSUk9SIGlmIHNpZ25hbF9tYXNrIGRvZXMgbm90IGluY2x1ZGUgYW55IGFzc2lnbmVkIHNpZ25hbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl90ZXN0X3BzYV93YWl0X3dpdGhfdW5hc3NpZ25lZF9zaWduYWwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCBwc2Ffd2FpdCB3aXRoIHNpZ25hbCBtYXNrIHRoYXQgZG9lc24ndCBpbmNsdWRlIGFueSBhc3NpZ25lZCBzaWduYWwgYW5kIGV4cGVjdCBQUk9HUkFNTUVSIEVSUk9SIGJlaGF2aW91ciBmb3IgQVBJIGNhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTA2MyAgICAgICAgfCBwc2Ffd2FpdCgpIHJldHVybnMgdGhlIFNlY3VyZSBQYXJ0aXRpb24gaW50ZXJydXB0IHNpZ25hbHMgdGhhdCBoYXZlIGJlZW4gYXNzZXJ0ZWQgZnJvbSB0aGUgc3Vic2V0IG9mIHNpZ25hbHMgaW5kaWNhdGVkIGluIHRoZSBiaXRtYXNrIHByb3ZpZGVkLiBUaGUgbWFzayBtdXN0IGNvbnRhaW4gdGhlIHNldCBvZiBzaWduYWxzIHRoZSBjYWxsZXIgaXMgaW50ZXJlc3RlZCBpbiBoYW5kbGluZy4gU2lnbmFscyB0aGF0IGFyZSBub3QgaW4gc2lnbmFsX21hc2sgc2hvdWxkIGJlIGlnbm9yZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3BzYV93YWl0X3NpZ25hbF9tYXNrKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBTZWxlY3Qgc2lnbmFsX21hc2sgPSAgIChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRyB8IFNFUlZFUl9SRUxBWF9NSU5PUl9WRVJTSU9OX1NJRyk7IDxiciAvPjIuIFNlcnZlciBwYXJ0aXRpb24gcmVxdWVzdHMgdGhlIGNsaWVudCBwYXJ0aXRpb24gdG8gbWFrZSBjb25uZWN0aW9uIHVzaW5nICBzaWQ9U0VSVkVSX1NFQ1VSRV9DT05ORUNUX09OTFlfU0lELiAgVGhpcyBjb25uZWN0aW9uIHJlcXVlc3QgYWN0IGFzIGlycml0YXRvciB0byBwc2Ffd2FpdChzaWduYWxfbWFzaykgY2FsbCBhbmQgaXQgaXMgdXNlZCB0byBjb3ZlciB0aGUgcnVsZSAtIFNpZ25hbHMgdGhhdCBhcmUgbm90IGluIHNpZ25hbF9tYXNrIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHBzYV93YWl0LjxiciAvPjMuIE5TUEUgY2xpZW50IGNvbm5lY3RzIHRvIGEgc2VydmVyIHBhcnRpdGlvbiB1c2luZyBTSUQgd2hvc2Ugc2lnbmFsIGFyZSBwYXJ0IG9mIHNpZ25hbF9tYXNrPGJyIC8+NC4gU2VydmVyIHBhcnRpdGlvbiBleGVjdXRlcyBwc2Ffd2FpdCB3aXRoIG5lY2Vzc2FyeSBzaWduYWxfbWFzay4gUm9UIHNlcnZpY2UgY2hlY2tzIHRoYXQgcmV0dXJuZWQgc2lnbmFsIHZhbHVlIGlzIHN1YnNldCBvZiBzaWduYWxzIGluZGljYXRlZCBpbiB0aGUgc2lnbmFsX21hc2sgPGJyIC8+IDUuIEF0IHRoZSBlbmQsIHNlcnZlciBwYXJ0aXRpb24gY29tcGxldGVzIHRoZSBzdGFydmVkIChpcnJpdGF0b3IpIGNvbm5lY3Rpb24gcmVxdWVzdCBvZiBTRVJWRVJfU0VDVVJFX0NPTk5FQ1RfT05MWV9TSUQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNYW5kYXRvcnkgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDY0ICAgICAgICB8IFRoZSBjYWxsIHRvIHBzYV9lb2koKSBpcyBQUk9HUkFNTUVSIEVSUk9SIGlmIGlycV9zaWduYWwgaXMgbm90IGFuIGludGVycnVwdCBzaWduYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZHJpdmVyX3Rlc3RfcHNhX2VvaV93aXRoX25vbl9pbnRyX3NpZ25hbCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgdG8gcHNhX2VvaSB3aXRoIG5vbi1pbnRlcnJ1cHQgc2lnbmFsKFBTQV9ET09SQkVMTCkgYW5kIGV4cGVjdCBQUk9HUkFNTUVSIEVSUk9SIGJlaGF2aW91ciBmb3IgQVBJIGNhbGwuPGJyIC8+IE5vdGU6IFRoZSBpbnRlcnJ1cHQgcmVsYXRlZCB0ZXN0IGNoZWNrIGlzIGNhcHR1cmVkIGluIGRyaXZlcl9wYXJ0aXRpb24uYyBhcyB0aGlzIGlzIHRoZSBvbmx5IHBhcnRpdGlvbiBpbiB0ZXN0IHN1aXRlIHRoYXQgaG9sZHMgdGhlIGludGVycnVwdCBsaW5lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwNjUgICAgICAgIHwgVGhlIGNhbGwgdG8gcHNhX2VvaSgpIGlzIFBST0dSQU1NRVIgRVJST1IgaWYgaXJxX3NpZ25hbCBpcyBub3QgY3VycmVudGx5IGFzc2VydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkcml2ZXJfdGVzdF9wc2FfZW9pX3dpdGhfdW5hc3NlcnRlZF9zaWduYWwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2FsbCB0byBwc2FfZW9pIHdpdGggaW50ZXJydXB0IHNpZ25hbCB3aGljaCBpcyBjdXJyZW50bHkgbm90IGFzc2VydGVkIGFuZCBleHBlY3QgUFJPR1JBTU1FUiBFUlJPUiBiZWhhdmlvdXIgZm9yIEFQSSBjYWxsLjxiciAvPiBOb3RlOiBUaGUgaW50ZXJydXB0IHJlbGF0ZWQgdGVzdCBjaGVjayBpcyBjYXB0dXJlZCBpbiBkcml2ZXJfcGFydGl0aW9uLmMgYXMgdGhpcyBpcyB0aGUgb25seSBwYXJ0aXRpb24gaW4gdGVzdCBzdWl0ZSB0aGF0IGhvbGRzIHRoZSBpbnRlcnJ1cHQgbGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTA2NiAgICAgICAgfCBUaGUgY2FsbCB0byBwc2FfZW9pKCkgaXMgUFJPR1JBTU1FUiBFUlJPUiBpZiBpcnFfc2lnbmFsIGluZGljYXRlcyBtb3JlIHRoYW4gb25lIHNpZ25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRyaXZlcl90ZXN0X3BzYV9lb2lfd2l0aF9tdWx0aXBsZV9zaWduYWxzKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDYWxsIHRvIHBzYV9lb2kgd2l0aCBpcnFfc2lnbmFsIHByb3ZpZGVkIHdpdGggbXVsdGlwbGUgc2lnbmFscyBhbmQgZXhwZWN0IFBST0dSQU1NRVIgRVJST1IgYmVoYXZpb3VyIGZvciBBUEkgY2FsbC48YnIgLz4gTm90ZTogVGhlIGludGVycnVwdCByZWxhdGVkIHRlc3QgY2hlY2sgaXMgY2FwdHVyZWQgaW4gZHJpdmVyX3BhcnRpdGlvbi5jIGFzIHRoaXMgaXMgdGhlIG9ubHkgcGFydGl0aW9uIGluIHRlc3Qgc3VpdGUgdGhhdCBob2xkcyB0aGUgaW50ZXJydXB0IGxpbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDY3ICAgICAgICB8IEEgU2VjdXJlIFBhcnRpdGlvbiBpcyBndWFyYW50ZWVkIHRvIGJlIGFibGUgdG8gcmVhZCBhbmQgd3JpdGUgaXRzIHByaXZhdGUgaGVhcCByZWdpb25zLjxiciAvPk1hbmlmZXN0IFBhcmFtZXRlci0gaGVhcF9zaXplLiBQcm9wZXJ0aWVzOiBPcHRpb25hbC48YnIgLz5UaGlzIGF0dHJpYnV0ZSBpbmRpY2F0ZXMgdGhlIFNlY3VyZSBQYXJ0aXRpb26/cyBoZWFwIHNpemUgaW4gYnl0ZXMuVGhlIHNpemUgdmFsdWUgaXMgcmVwcmVzZW50ZWQgZWl0aGVyIGFzIGEgcG9zaXRpdmUgaW50ZWdlciBvciBhcyBhIGhleGFkZWNpbWFsIHN0cmluZy5JZiB0aGlzIGZpZWxkIGlzIHNwZWNpZmllZCBpbiB0aGUgbWFuaWZlc3QgdGhlbiB0aGUgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC4gSWYgdGhpcyBmaWVsZCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBtYW5pZmVzdCB0aGVuIHRoZSBTUE0gY2FuIGFzc3VtZSB0aGUgc2l6ZSBpcyAwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfZHluYW1pY19tZW1fYWxsb2NfZm4oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRlc3QgZHluYW1pYyBtZW1vcnkgc2VydmljZSBmdW5jdGlvbnMtbWFsbG9jKCksIGZyZWUoKSBhbmQgcmVhbGxvYyBiZWhhdmlvdXIgZGVmaW5lZCBpbiB0aGUgc3BlY2lmaWNhdGlvbiBpZiB0aGVzZSBBUElzIGFyZSBhdmFpbGFibGUgdG8gc2VjdXJlIHBhcnRpdGlvbi4gT3RoZXJ3aXNlIHNraXAgdGhlIHRlc3QuIDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1hbmRhdG9yeSAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwNjggICAgICAgIHwgT25seSBDb2RlIGlzIGV4ZWN1dGFibGUgaW4gc2VjdXJlIHBhcnRpdGlvbi4gV3JpdGFibGUgcmVnaW9uIG11c3Qgbm90IGJlIGV4ZWN1dGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjbGllbnRfdGVzdF9pbnN0cl9leGVjX2Zyb21fd3JpdGFibGVfbWVtKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRXhlY3V0ZSBzZXQgb2YgaW5zdHJ1Y3Rpb25zIGZyb20gd3JpdGFibGUgbWVtb3J5IGFuZCBleHBlY3QgaW50ZXJuYWwgZmF1bHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTA2OSAgICAgICAgfCBPbmx5IFByaXZhdGUgZGF0YSBpcyB3cml0YWJsZSBpbiBzZWN1cmUgcGFydGl0aW9uLiBDb2RlIHNwYWNlIG11c3Qgbm90IGJlIHdyaXRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNsaWVudF90ZXN0X3dyaXRlX3RvX2NvZGVfc3BhY2UoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBXcml0ZSB0byBjb2RlIHNwYWNlIGZyb20gc2VjdXJlIHBhcnRpdGlvbiBhbmQgZXhwZWN0IGludGVybmFsIGZhdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDcwICAgICAgICB8IE9ubHkgUHJpdmF0ZSBkYXRhIGlzIHdyaXRhYmxlIGluIHNlY3VyZSBwYXJ0aXRpb24uIENvbnN0YW50IGRhdGEgc3BhY2UgbXVzdCBub3QgYmUgd3JpdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2xpZW50X3Rlc3Rfd3JpdGVfdG9fY29uc3RfZGF0YSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFdyaXRlIHRvIGNvbnN0YW50IGRhdGEgc3BhY2UgYW5kIGV4cGVjdCBpbnRlcm5hbCBmYXVsdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwNzEgICAgICAgIHwgVGhlIGZvbGxvd2luZyBtZW1vcnkgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyBmcm9tIDxzdHJpbmcuaD5tdXN0IGJlIGltcGxlbWVudGVkIHdpdGggc3RhbmRhcmQgQzk5IGRlZmluaXRpb25zOjxiciAvPm1lbWNtcCgpPGJyIC8+bWVtY3B5KCk8YnIgLz5tZW1tb3ZlKCk8YnIgLz5tZW1zZXQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjbGllbnRfdGVzdF9tZW1fbWFuaXB1bGF0aW9uX2ZuKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAuU2V0IGJ1ZmZlciBjb250ZW50IHVzaW5nIG1lbXNldCgpLiBDaGVjayB0aGF0IGNvbnRlbnQgaXMgc2V0IGFzIGV4cGVjdGVkLjxiciAvPjIuIENvcHkgb25lIGJ1ZmZlciB0byBhbm90aGVyIGJ1ZmZlciB1c2luZyBtZW1jcHkoKSBhbmQgY2hlY2sgdGhhdCBidWZmZXIgaXMgY29waWVkIGNvcnJlY3RseS4gPGJyIC8+My4gQ29tcGFyZSB0d28gYnVmZmVycyB0d28gdGltZXMsIG9uY2Ugd2l0aCBlcXVhbCBkYXRhIGFuZCBvbmNlIHdpdGggdW5lcXVhbCBkYXRhLjxiciAvPjIuIENvcHkgb25lIGJ1ZmZlciB0byBhbm90aGVyIGJ1ZmZlciB1c2luZyBtZW1tb3ZlKCkgYW5kIGNoZWNrIHRoYXQgYnVmZmVyIGlzIGNvcGllZCBjb3JyZWN0bHkuIDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTWFuZGF0b3J5ICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTA3MiAgICAgICAgfCBJZiBkb21haW4gQSBuZWVkcyBwcm90ZWN0aW9uIGZyb20gZG9tYWluIEIsIHRoZW4gUHJpdmF0ZSBkYXRhIGluIGRvbWFpbiBBIGNhbm5vdCBiZSBhY2Nlc3NlZCBieSBkb21haW4gQi4gPGJyIC8+V2hlcmUgQSBpcyBBcHBsaWNhdGlvbiBSb1QsIEIgaXMgTlNQRSBhbmQgbWVtb3J5IGFzc2V0IHRvIGJlIHByb3RlY3RlZCBpcyBBcHBsaWNhdGlvbiBSb1QgdmFyaWFibGVzLSBHbG9iYWwgdmFyaWFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X25zcGVfcmVhZF9hcHBfcm90X3ZhcmlhYmxlKCk8YnIgLz5bY2xpZW50L3NlcnZlcl1fdGVzdF9uc3BlX3dyaXRlX2FwcF9yb3RfdmFyaWFibGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBY2Nlc3MgQXBwbGljYXRpb24gUm9UIGdsb2JhbCB2YXJpYWJsZSBhZGRyZXNzIGZyb20gTlNQRSBhbmQgZXhwZWN0IGludGVybmFsIGZhdWx0IGJlaGF2aW9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDczICAgICAgICB8IElmIGRvbWFpbiBBIG5lZWRzIHByb3RlY3Rpb24gZnJvbSBkb21haW4gQiwgdGhlbiBQcml2YXRlIGRhdGEgaW4gZG9tYWluIEEgY2Fubm90IGJlIGFjY2Vzc2VkIGJ5IGRvbWFpbiBCLiA8YnIgLz5XaGVyZSBBIGlzIEFwcGxpY2F0aW9uIFJvVCwgQiBpcyBOU1BFIGFuZCBtZW1vcnkgYXNzZXQgdG8gYmUgcHJvdGVjdGVkIGlzIEFwcGxpY2F0aW9uIFJvVCBleGVjdXRpb24gc3RhY2suICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3RfbnNwZV9yZWFkX2FwcF9yb3Rfc3RhY2soKTxiciAvPltjbGllbnQvc2VydmVyXV90ZXN0X25zcGVfd3JpdGVfYXBwX3JvdF9zdGFjaygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFjY2VzcyBBcHBsaWNhdGlvbiBSb1QgbG9jYWwgdmFyaWFibGUoc3RhY2sgcmVnaW9uKSBhZGRyZXNzIGZyb20gTlNQRSBhbmQgZXhwZWN0IGludGVybmFsIGZhdWx0IGJlaGF2aW9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwNzQgICAgICAgIHwgSWYgZG9tYWluIEEgbmVlZHMgcHJvdGVjdGlvbiBmcm9tIGRvbWFpbiBCLCB0aGVuIFByaXZhdGUgZGF0YSBpbiBkb21haW4gQSBjYW5ub3QgYmUgYWNjZXNzZWQgYnkgZG9tYWluIEIuIDxiciAvPldoZXJlIEEgaXMgQXBwbGljYXRpb24gUm9ULCBCIGlzIE5TUEUgYW5kIG1lbW9yeSBhc3NldCB0byBiZSBwcm90ZWN0ZWQgaXMgQXBwbGljYXRpb24gUm9UIGhlYXAgbWVtb3J5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9uc3BlX3JlYWRfYXBwX3JvdF9oZWFwKCk8YnIgLz5bY2xpZW50L3NlcnZlcl1fdGVzdF9uc3BlX3dyaXRlX2FwcF9yb3RfaGVhcCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQWNjZXNzIEFwcGxpY2F0aW9uIFJvVCBoZWFwIG1lbW9yeSBhZGRyZXNzIGZyb20gTlNQRSBhbmQgZXhwZWN0IGludGVybmFsIGZhdWx0IGJlaGF2aW9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTA3NSAgICAgICAgfCBJZiBkb21haW4gQSBuZWVkcyBwcm90ZWN0aW9uIGZyb20gZG9tYWluIEIsIHRoZW4gUHJpdmF0ZSBkYXRhIGluIGRvbWFpbiBBIGNhbm5vdCBiZSBhY2Nlc3NlZCBieSBkb21haW4gQi4gPGJyIC8+V2hlcmUgQSBpcyBBcHBsaWNhdGlvbiBSb1QsIEIgaXMgTlNQRSBhbmQgbWVtb3J5IGFzc2V0IHRvIGJlIHByb3RlY3RlZCBpcyBBcHBsaWNhdGlvbiBSb1QgTU1JTyByZWdpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X25zcGVfcmVhZF9hcHBfcm90X21taW8oKTxiciAvPltjbGllbnQvc2VydmVyXV90ZXN0X25zcGVfd3JpdGVfYXBwX3JvdF9tbWlvKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBY2Nlc3MgQXBwbGljYXRpb24gUm9UIE1NSU8gYWRkcmVzcyBmcm9tIE5TUEUgYW5kIGV4cGVjdCBpbnRlcm5hbCBmYXVsdCBiZWhhdmlvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDc2ICAgICAgICB8IElmIGRvbWFpbiBBIG5lZWRzIHByb3RlY3Rpb24gZnJvbSBkb21haW4gQiwgdGhlbiBQcml2YXRlIGRhdGEgaW4gZG9tYWluIEEgY2Fubm90IGJlIGFjY2Vzc2VkIGJ5IGRvbWFpbiBCLiA8YnIgLz5XaGVyZSBBIGlzIFBTQSBSb1QsIEIgaXMgTlNQRSBhbmQgbWVtb3J5IGFzc2V0IHRvIGJlIHByb3RlY3RlZCBpcyBQU0EgUm9UIHZhcmlhYmxlcy0gR2xvYmFsIHZhcmlhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2xpZW50X3Rlc3RfbnNwZV9yZWFkX3BzYV9yb3RfdmFyaWFibGUoKTxiciAvPmRyaXZlcl90ZXN0X2lzb2xhdGlvbl9wc2Ffcm90X2RhdGFfcmQoKTxiciAvPmNsaWVudF90ZXN0X25zcGVfd3JpdGVfcHNhX3JvdF92YXJpYWJsZSgpPGJyIC8+ZHJpdmVyX3Rlc3RfaXNvbGF0aW9uX3BzYV9yb3RfZGF0YV93cigpICAgICAgICB8IEFjY2VzcyBQU0EgUm9UIGdsb2JhbCB2YXJpYWJsZSBhZGRyZXNzIGZyb20gTlNQRSBhbmQgZXhwZWN0IGludGVybmFsIGZhdWx0IGJlaGF2aW9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwNzcgICAgICAgIHwgSWYgZG9tYWluIEEgbmVlZHMgcHJvdGVjdGlvbiBmcm9tIGRvbWFpbiBCLCB0aGVuIFByaXZhdGUgZGF0YSBpbiBkb21haW4gQSBjYW5ub3QgYmUgYWNjZXNzZWQgYnkgZG9tYWluIEIuIDxiciAvPldoZXJlIEEgaXMgUFNBIFJvVCwgQiBpcyBOU1BFIGFuZCBtZW1vcnkgYXNzZXQgdG8gYmUgcHJvdGVjdGVkIGlzIFBTQSBSb1QgZXhlY3V0aW9uIHN0YWNrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjbGllbnRfdGVzdF9uc3BlX3JlYWRfcHNhX3JvdF9zdGFjaygpPGJyIC8+ZHJpdmVyX3Rlc3RfaXNvbGF0aW9uX3BzYV9yb3Rfc3RhY2tfcmQoKTxiciAvPmNsaWVudF90ZXN0X25zcGVfd3JpdGVfcHNhX3N0YWNrX3ZhcmlhYmxlKCk8YnIgLz5kcml2ZXJfdGVzdF9pc29sYXRpb25fcHNhX3JvdF9zdGFja193cigpICAgICAgIHwgQWNjZXNzIFBTQSBSb1QgbG9jYWwgdmFyaWFibGUoc3RhY2sgcmVnaW9uKSBhZGRyZXNzIGZyb20gTlNQRSBhbmQgZXhwZWN0IGludGVybmFsIGZhdWx0IGJlaGF2aW9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTA3OCAgICAgICAgfCBJZiBkb21haW4gQSBuZWVkcyBwcm90ZWN0aW9uIGZyb20gZG9tYWluIEIsIHRoZW4gUHJpdmF0ZSBkYXRhIGluIGRvbWFpbiBBIGNhbm5vdCBiZSBhY2Nlc3NlZCBieSBkb21haW4gQi4gPGJyIC8+V2hlcmUgQSBpcyBQU0EgUm9ULCBCIGlzIE5TUEUgYW5kIG1lbW9yeSBhc3NldCB0byBiZSBwcm90ZWN0ZWQgaXMgUFNBIFJvVCBoZWFwIG1lbW9yeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNsaWVudF90ZXN0X25zcGVfcmVhZF9wc2Ffcm90X2hlYXAoKTxiciAvPmRyaXZlcl90ZXN0X2lzb2xhdGlvbl9wc2Ffcm90X2hlYXBfcmQoKTxiciAvPmNsaWVudF90ZXN0X25zcGVfd3JpdGVfcHNhX3JvdF9oZWFwKCk8YnIgLz5kcml2ZXJfdGVzdF9pc29sYXRpb25fcHNhX3JvdF9oZWFwX3dyKCkgICAgICAgICAgICAgICAgfCBBY2Nlc3MgUFNBIFJvVCBwYXJ0aXRpb24gaGVhcCBtZW1vcnkgYWRkcmVzcyBmcm9tIE5TUEUgYW5kIGV4cGVjdCBpbnRlcm5hbCBmYXVsdCBiZWhhdmlvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDc5ICAgICAgICB8IElmIGRvbWFpbiBBIG5lZWRzIHByb3RlY3Rpb24gZnJvbSBkb21haW4gQiwgdGhlbiBQcml2YXRlIGRhdGEgaW4gZG9tYWluIEEgY2Fubm90IGJlIGFjY2Vzc2VkIGJ5IGRvbWFpbiBCLiA8YnIgLz5XaGVyZSBBIGlzIFBTQSBSb1QsIEIgaXMgTlNQRSBhbmQgbWVtb3J5IGFzc2V0IHRvIGJlIHByb3RlY3RlZCBpcyBQU0EgUm9UIE1NSU8gcmVnaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2xpZW50X3Rlc3RfbnNwZV9yZWFkX3BzYV9yb3RfbW1pbygpPGJyIC8+ZHJpdmVyX3Rlc3RfaXNvbGF0aW9uX3BzYV9yb3RfbW1pb19yZCgpPGJyIC8+Y2xpZW50X3Rlc3RfbnNwZV93cml0ZV9wc2Ffcm90X21taW8oKTxiciAvPmRyaXZlcl90ZXN0X2lzb2xhdGlvbl9wc2Ffcm90X21taW9fd3IoKSAgICAgICAgICAgICAgICB8IEFjY2VzcyBQU0EgUm9UIHBhcnRpdGlvbiBNTUlPIGFkZHJlc3MgZnJvbSBOU1BFIGFuZCBleHBlY3QgaW50ZXJuYWwgZmF1bHQgYmVoYXZpb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwODAgICAgICAgIHwgSWYgZG9tYWluIEEgbmVlZHMgcHJvdGVjdGlvbiBmcm9tIGRvbWFpbiBCLCB0aGVuIFByaXZhdGUgZGF0YSBpbiBkb21haW4gQSBjYW5ub3QgYmUgYWNjZXNzZWQgYnkgZG9tYWluIEIuIDxiciAvPldoZXJlIEEgaXMgUFNBIFJvVCwgQiBpcyBBcHBsaWNhdGlvbiBSb1QgYW5kIG1lbW9yeSBhc3NldCB0byBiZSBwcm90ZWN0ZWQgaXMgUFNBIFJvVCB2YXJpYWJsZXMtIEdsb2JhbCB2YXJpYWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjbGllbnRfdGVzdF9hcHBfcm90X3JlYWRfcHNhX3JvdF92YXJpYWJsZSgpPGJyIC8+ZHJpdmVyX3Rlc3RfaXNvbGF0aW9uX3BzYV9yb3RfZGF0YV9yZCgpPGJyIC8+Y2xpZW50X3Rlc3RfYXBwX3JvdF93cml0ZV9wc2Ffcm90X3ZhcmlhYmxlKCk8YnIgLz5kcml2ZXJfdGVzdF9pc29sYXRpb25fcHNhX3JvdF9kYXRhX3dyKCkgIHwgQWNjZXNzIFBTQSBSb1QgZ2xvYmFsIHZhcmlhYmxlIGFkZHJlc3MgZnJvbSBBcHBsaWNhdGlvbiBSb1QgYW5kIGV4cGVjdCBpbnRlcm5hbCBmYXVsdCBiZWhhdmlvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTA4MSAgICAgICAgfCBJZiBkb21haW4gQSBuZWVkcyBwcm90ZWN0aW9uIGZyb20gZG9tYWluIEIsIHRoZW4gUHJpdmF0ZSBkYXRhIGluIGRvbWFpbiBBIGNhbm5vdCBiZSBhY2Nlc3NlZCBieSBkb21haW4gQi4gPGJyIC8+V2hlcmUgQSBpcyBQU0EgUm9ULCBCIGlzIEFwcGxpY2F0aW9uIFJvVCBhbmQgbWVtb3J5IGFzc2V0IHRvIGJlIHByb3RlY3RlZCBpcyBQU0EgUm9UIGV4ZWN1dGlvbiBzdGFjay4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNsaWVudF90ZXN0X2FwcF9yb3RfcmVhZF9wc2Ffcm90X3N0YWNrKCk8YnIgLz5kcml2ZXJfdGVzdF9pc29sYXRpb25fcHNhX3JvdF9zdGFja19yZCgpPGJyIC8+Y2xpZW50X3Rlc3RfYXBwX3JvdF93cml0ZV9wc2Ffc3RhY2tfdmFyaWFibGUoKTxiciAvPmRyaXZlcl90ZXN0X2lzb2xhdGlvbl9wc2Ffcm90X3N0YWNrX3dyKCkgfCBBY2Nlc3MgUFNBIFJvVCBsb2NhbCB2YXJpYWJsZShzdGFjayByZWdpb24pIGFkZHJlc3MgZnJvbSBBcHBsaWNhdGlvbiBSb1QgYW5kIGV4cGVjdCBpbnRlcm5hbCBmYXVsdCBiZWhhdmlvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDgyICAgICAgICB8IElmIGRvbWFpbiBBIG5lZWRzIHByb3RlY3Rpb24gZnJvbSBkb21haW4gQiwgdGhlbiBQcml2YXRlIGRhdGEgaW4gZG9tYWluIEEgY2Fubm90IGJlIGFjY2Vzc2VkIGJ5IGRvbWFpbiBCLiA8YnIgLz5XaGVyZSBBIGlzIFBTQSBSb1QsIEIgaXMgQXBwbGljYXRpb24gUm9UIGFuZCBtZW1vcnkgYXNzZXQgdG8gYmUgcHJvdGVjdGVkIGlzIFBTQSBSb1QgaGVhcCBtZW1vcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2xpZW50X3Rlc3RfYXBwX3JvdF9yZWFkX3BzYV9yb3RfaGVhcCgpPGJyIC8+ZHJpdmVyX3Rlc3RfaXNvbGF0aW9uX3BzYV9yb3RfaGVhcF9yZCgpPGJyIC8+Y2xpZW50X3Rlc3RfYXBwX3JvdF93cml0ZV9wc2Ffcm90X2hlYXAoKTxiciAvPmRyaXZlcl90ZXN0X2lzb2xhdGlvbl9wc2Ffcm90X2hlYXBfd3IoKSAgICAgICAgICB8IEFjY2VzcyBQU0EgUm9UIHBhcnRpdGlvbiBoZWFwIG1lbW9yeSBhZGRyZXNzIGZyb20gQXBwbGljYXRpb24gUm9UIGFuZCBleHBlY3QgaW50ZXJuYWwgZmF1bHQgYmVoYXZpb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwODMgICAgICAgIHwgSWYgZG9tYWluIEEgbmVlZHMgcHJvdGVjdGlvbiBmcm9tIGRvbWFpbiBCLCB0aGVuIFByaXZhdGUgZGF0YSBpbiBkb21haW4gQSBjYW5ub3QgYmUgYWNjZXNzZWQgYnkgZG9tYWluIEIuIDxiciAvPldoZXJlIEEgaXMgUFNBIFJvVCwgQiBpcyBBcHBsaWNhdGlvbiBSb1QgYW5kIG1lbW9yeSBhc3NldCB0byBiZSBwcm90ZWN0ZWQgaXMgUFNBIFJvVCBNTUlPIHJlZ2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjbGllbnRfdGVzdF9hcHBfcm90X3JlYWRfcHNhX3JvdF9tbWlvKCk8YnIgLz5kcml2ZXJfdGVzdF9pc29sYXRpb25fcHNhX3JvdF9tbWlvX3JkKCk8YnIgLz5jbGllbnRfdGVzdF9hcHBfcm90X3dyaXRlX3BzYV9yb3RfbW1pbygpPGJyIC8+ZHJpdmVyX3Rlc3RfaXNvbGF0aW9uX3BzYV9yb3RfbW1pb193cigpICAgICAgICAgIHwgQWNjZXNzIFBTQSBSb1QgcGFydGl0aW9uIE1NSU8gYWRkcmVzcyBmcm9tIEFwcGxpY2F0aW9uIFJvVCAgYW5kIGV4cGVjdCBpbnRlcm5hbCBmYXVsdCBiZWhhdmlvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTA4NCAgICAgICAgfCBJZiBkb21haW4gQSBuZWVkcyBwcm90ZWN0aW9uIGZyb20gZG9tYWluIEIsIHRoZW4gUHJpdmF0ZSBkYXRhIGluIGRvbWFpbiBBIGNhbm5vdCBiZSBhY2Nlc3NlZCBieSBkb21haW4gQi4gPGJyIC8+V2hlcmUgQSBpcyBBcHBsaWNhdGlvbiBSb1QgUGFydGl0aW9uLCBCIGlzIG90aGVyIEFwcGxpY2F0aW9uIFJvVCBwYXJ0aXRpb24gYW5kIG1lbW9yeSBhc3NldCB0byBiZSBwcm90ZWN0ZWQgaXMgQS0gQXBwbGljYXRpb24gUm9UIHBhcnRpdGlvbiAgdmFyaWFibGVzLSBHbG9iYWwgdmFyaWFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3NwX3JlYWRfb3RoZXJfc3BfdmFyaWFibGUoKTxiciAvPltjbGllbnQvc2VydmVyXV90ZXN0X3NwX3dyaXRlX290aGVyX3NwX3ZhcmlhYmxlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBY2Nlc3MgQXBwbGljYXRpb24gUm9UIGdsb2JhbCB2YXJpYWJsZSBhZGRyZXNzIGZyb20gb3RoZXIgUm9UIGFuZCBleHBlY3QgaW50ZXJuYWwgZmF1bHQgYmVoYXZpb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9pMDg1ICAgICAgICB8IElmIGRvbWFpbiBBIG5lZWRzIHByb3RlY3Rpb24gZnJvbSBkb21haW4gQiwgdGhlbiBQcml2YXRlIGRhdGEgaW4gZG9tYWluIEEgY2Fubm90IGJlIGFjY2Vzc2VkIGJ5IGRvbWFpbiBCLiA8YnIgLz5XaGVyZSBBIGlzIEFwcGxpY2F0aW9uIFJvVCBQYXJ0aXRpb24sIEIgaXMgb3RoZXIgQXBwbGljYXRpb24gUm9UIHBhcnRpdGlvbiBhbmQgbWVtb3J5IGFzc2V0IHRvIGJlIHByb3RlY3RlZCBpcyBBLSBBcHBsaWNhdGlvbiBSb1QgcGFydGl0aW9uIGV4ZWN1dGlvbiBzdGFjay4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW2NsaWVudC9zZXJ2ZXJdX3Rlc3Rfc3BfcmVhZF9vdGhlcl9zcF9zdGFjaygpPGJyIC8+W2NsaWVudC9zZXJ2ZXJdX3Rlc3Rfc3Bfd3JpdGVfb3RoZXJfc3Bfc3RhY2soKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFjY2VzcyBBcHBsaWNhdGlvbiBSb1QgbG9jYWwgdmFyaWFibGUoc3RhY2sgcmVnaW9uKSBhZGRyZXNzIGZyb20gb3RoZXIgQXBwbGljYXRpb24gUm9UIGFuZCBleHBlY3QgaW50ZXJuYWwgZmF1bHQgYmVoYXZpb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9wdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X2kwODYgICAgICAgIHwgSWYgZG9tYWluIEEgbmVlZHMgcHJvdGVjdGlvbiBmcm9tIGRvbWFpbiBCLCB0aGVuIFByaXZhdGUgZGF0YSBpbiBkb21haW4gQSBjYW5ub3QgYmUgYWNjZXNzZWQgYnkgZG9tYWluIEIuIDxiciAvPldoZXJlIEEgaXMgQXBwbGljYXRpb24gUm9UIFBhcnRpdGlvbiwgQiBpcyBvdGhlciBBcHBsaWNhdGlvbiBSb1QgcGFydGl0aW9uIGFuZCBtZW1vcnkgYXNzZXQgdG8gYmUgcHJvdGVjdGVkIGlzIEEtIEFwcGxpY2F0aW9uIFJvVCBwYXJ0aXRpb24gaGVhcCBtZW1vcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbY2xpZW50L3NlcnZlcl1fdGVzdF9zcF9yZWFkX290aGVyX3NwX2hlYXAoKTxiciAvPltjbGllbnQvc2VydmVyXV90ZXN0X3NwX3dyaXRlX290aGVyX3NwX2hlYXAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQWNjZXNzIEFwcGxpY2F0aW9uIFJvVCBwYXJ0aXRpb24gaGVhcCBtZW1vcnkgYWRkcmVzcyBmcm9tIG90aGVyIEFwcGxpY2F0aW9uIFJvVCBhbmQgZXhwZWN0IGludGVybmFsIGZhdWx0IGJlaGF2aW9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgT3B0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfaTA4NyAgICAgICAgfCBJZiBkb21haW4gQSBuZWVkcyBwcm90ZWN0aW9uIGZyb20gZG9tYWluIEIsIHRoZW4gUHJpdmF0ZSBkYXRhIGluIGRvbWFpbiBBIGNhbm5vdCBiZSBhY2Nlc3NlZCBieSBkb21haW4gQi4gPGJyIC8+V2hlcmUgQSBpcyBBcHBsaWNhdGlvbiBSb1QgUGFydGl0aW9uLCBCIGlzIG90aGVyIEFwcGxpY2F0aW9uIFJvVCBwYXJ0aXRpb24gYW5kIG1lbW9yeSBhc3NldCB0byBiZSBwcm90ZWN0ZWQgaXMgQS0gQXBwbGljYXRpb24gUm9UIHBhcnRpdGlvbiBNTUlPIHJlZ2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtjbGllbnQvc2VydmVyXV90ZXN0X3NwX3JlYWRfb3RoZXJfc3BfbW1pbygpIDxiciAvPltjbGllbnQvc2VydmVyXV90ZXN0X3NwX3dyaXRlX290aGVyX3NwX21taW8oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBY2Nlc3MgQXBwbGljYXRpb24gUm9UIHBhcnRpdGlvbiBNTUlPIGFkZHJlc3MgZnJvbSBvdGhlciBBcHBsaWNhdGlvbiBSb1QgIGFuZCBleHBlY3QgaW50ZXJuYWwgZmF1bHQgYmVoYXZpb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPcHRpb25hbCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9sMDg4ICAgICAgICB8IHBzYV9yb3RfbGlmZWN5Y2xlX3N0YXRlKCkgZnVuY3Rpb24gcmV0cmlldmVzIHRoZSBjdXJyZW50IFBTQSBSb1QgbGlmZWN5Y2xlIHN0YXRlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VydmVyX3Rlc3RfcHNhX3JvdF9saWZlY3ljbGVfc3RhdGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENhbGwgcHNhX3JvdF9saWZlY3ljbGVfc3RhdGUoKSAgZnJvbSBzZWN1cmUgc2lkZSBhbmQgY2hlY2sgdGhhdCByZXR1cm4gdmFsdWUgaXMgd2l0aGluIHRoZSBhbGxvd2VkIHJhbmdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1hbmRhdG9yeSAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgIHwgSWYgZG9tYWluIEEgbmVlZHMgcHJvdGVjdGlvbiBmcm9tIGRvbWFpbiBCLCB0aGVuIFByaXZhdGUgZGF0YSBpbiBkb21haW4gQSBjYW5ub3QgYmUgYWNjZXNzZWQgYnkgZG9tYWluIEIuIEZyb20gQiBhY2Nlc3MgYmVsb3cgYXNzZXJ0cyBvZiBBOjxiciAvPi0gVmFyaWFibGVzPGJyIC8+LSBFeGVjdXRpb24gc3RhY2tzPGJyIC8+LSBBbGxvY2F0aW9uIGhlYXA8YnIgLz4tIE1lbW9yeS1tYXBwZWQgSS9PIHJlZ2lvbnM8YnIgLz48YnIgLz5XaGVyZSwgQSAmIEIgY29tYmluYXRpb24gYXJlOiBBPVNQTSAmIEI9TlNQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRnV0dXJlIHJlbGVhc2Ugb2YgdGVzdCBzdWl0ZSB3aWxsIGJlIHVwZGF0ZWQgdG8gY292ZXIgdGhpcyBydWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgfCBJZiBkb21haW4gQSBuZWVkcyBwcm90ZWN0aW9uIGZyb20gZG9tYWluIEIsIHRoZW4gUHJpdmF0ZSBkYXRhIGluIGRvbWFpbiBBIGNhbm5vdCBiZSBhY2Nlc3NlZCBieSBkb21haW4gQi4gRnJvbSBCIGFjY2VzcyBiZWxvdyBhc3NlcnRzIG9mIEE6PGJyIC8+LSBWYXJpYWJsZXM8YnIgLz4tIEV4ZWN1dGlvbiBzdGFja3M8YnIgLz4tIEFsbG9jYXRpb24gaGVhcDxiciAvPi0gTWVtb3J5LW1hcHBlZCBJL08gcmVnaW9uczxiciAvPjxiciAvPldoZXJlLCBBICYgQiBjb21iaW5hdGlvbiBhcmU6IEE9U1BNICYgQj1BcHBsaWNhdGlvbiBSb1QgcGFydGl0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBGdXR1cmUgcmVsZWFzZSBvZiB0ZXN0IHN1aXRlIHdpbGwgYmUgdXBkYXRlZCB0byBjb3ZlciB0aGlzIHJ1bGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBObyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICB8IElmIGRvbWFpbiBBIG5lZWRzIHByb3RlY3Rpb24gZnJvbSBkb21haW4gQiwgdGhlbiBQcml2YXRlIGRhdGEgaW4gZG9tYWluIEEgY2Fubm90IGJlIGFjY2Vzc2VkIGJ5IGRvbWFpbiBCLiBGcm9tIEIgYWNjZXNzIGJlbG93IGFzc2VydHMgb2YgQTo8YnIgLz4tIFZhcmlhYmxlczxiciAvPi0gRXhlY3V0aW9uIHN0YWNrczxiciAvPi0gQWxsb2NhdGlvbiBoZWFwPGJyIC8+LSBNZW1vcnktbWFwcGVkIEkvTyByZWdpb25zPGJyIC8+PGJyIC8+V2hlcmUsIEEgJiBCIGNvbWJpbmF0aW9uIGFyZTogQT1TUE0gJiBCPVBTQSBSb1QgcGFydGl0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEZ1dHVyZSByZWxlYXNlIG9mIHRlc3Qgc3VpdGUgd2lsbCBiZSB1cGRhdGVkIHRvIGNvdmVyIHRoaXMgcnVsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBOT19FWFBMSUNJVF9URVNUIHwgQSBTZWN1cmUgUGFydGl0aW9uIGlzIGd1YXJhbnRlZWQgdG8gYmUgYWJsZSB0byAgcmVhZCBhbmQgd3JpdGUgaXRzIHByaXZhdGUgc3RhY2suIDxiciAvPk1hbmlmZXN0IFBhcmFtZXRlci0gc3RhY2tfc2l6ZSAocmVxdWlyZWQpIDxiciAvPlBhcnRpdGlvbidzIHN0YWNrIHNpemUgaW4gYnl0ZXMuIFRoZSBzaXplIHZhbHVlIG11c3QgYmUgcmVwcmVzZW50ZWQgZWl0aGVyIGFzIGEgcG9zaXRpdmUgaW50ZWdlciBvciBhcyBhIGhleGFkZWNpbWFsIHN0cmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm8gZXhwbGljaXQgdGVzdCB3cml0dGVuIHRvIGNvdmVyIHRoaXMgcnVsZS4gUFNBIElQQyB0ZXN0cyBtYW5pZmVzdHMgYXJlIHByb3ZpZGVkIHdpdGggdGVzdHMgcGFydGl0aW9uIHJlcXVpcmVkIHN0YWNrX3NpemUuICBBIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIG9mIHRlc3RzIHBhcnRpdGlvbiBjb2RlIHdpdGhvdXQgc3RhY2sgYWNjZXNzIHJlbGF0ZWQgZmF1bHRzLCBpbmRpcmVjdGx5IHZlcmlmeSB0aGlzIGZpZWxkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IE5PX0VYUExJQ0lUX1RFU1QgfCBtbWlvX3JlZ2lvbnMgKG9wdGlvbmFsLCB1bmlxdWUpOiA8YnIgLz5MaXN0IG9mIG1lbW9yeS1tYXBwZWQgSS9PIHJlZ2lvbiBvYmplY3RzIHdoaWNoIHRoZSBTZWN1cmUgUGFydGl0aW9uIG5lZWRzIGFjY2VzcyB0by4gIEEgU2VjdXJlIFBhcnRpdGlvbiBhbHdheXMgaGFzIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gYW4gTU1JTyByZWdpb24uIFNlY3VyZSBQYXJ0aXRpb25zIGFyZSBub3QgcGVybWl0dGVkIHRvIHNoYXJlIE1NSU8gcmVnaW9ucyB3aXRoIG90aGVyIFNlY3VyZSBQYXJ0aXRpb25zLjxiciAvPkFuIE1NSU8gcmVnaW9uIGNhbiBiZSBkZWZpbmVkIGVpdGhlciBhcyBhOjxiciAvPm51bWJlcmVkX3JlZ2lvbjxiciAvPm5hbWVkX3JlZ2lvbjxiciAvPkEgbnVtYmVyZWQgcmVnaW9uIGNvbnNpc3RzIG9mIGEgYmFzZSBhZGRyZXNzIGFuZCBhIHNpemUuIFRoZSBzaXplIG11c3QgYmUgcmVwcmVzZW50ZWQgZWl0aGVyIGFzIGEgcG9zaXRpdmUgaW50ZWdlciBvciBhcyBhIGhleGFkZWNpbWFsIHN0cmluZy4gVGhlIGJhc2UgYWRkcmVzcyBtdXN0IGJlIHJlcHJlc2VudGVkIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nLjxiciAvPk1NSU8gcmVnaW9ucyBtdXN0IG5vdCBvdmVybGFwLjxiciAvPkFuIE1NSU8gcmVnaW9uIG11c3QgaW5jbHVkZSBhIHBlcm1pc3Npb24gYXR0cmlidXRlLiBUaGUgZm9sbG93aW5nIHBlcm1pc3Npb25zIGFyZSBhdmFpbGFibGU6PGJyIC8+UkVBRC1PTkxZPGJyIC8+UkVBRC1XUklURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb21tZW50czo8YnIgLz4xLiBQU0EgSVBDIHRlc3RzIGRldmljZSBkcml2ZXIgcGFydGl0aW9uIG1hbmlmZXN0cyBhcmUgcHJvdmlkZWQgd2l0aCB0aGVzZSBmaWVsZHMuIEEgc3VjY2Vzc2Z1bCBjb21waWxhdGlvbiBhbmQgcnVuIG9mIGRldmljZSBkcml2ZXIgcGFydGl0aW9uIGNvZGUgaW5kaXJlY3RseSB2ZXJpZnkgdGhpcyBmaWVsZC4gPGJyICAvPjIuIFJ1bGVzIGFyb3VuZCBzaGFyaW5nIG9mIE1NSU8gcmVnaW9ucyBpcyBjb3ZlcmVkIGFzIHBhcnQgb2YgaXNvbGF0aW9uIHRlc3RzLjxiciAgLz4zLiBSdWxlcyBhcm91bmQgb3ZlcmxhcHBpbmcgb2YgTU1JTyByZWdpb25zIGNhbid0IGJlIHRlc3RlZCBhcyBzcGVjaWZ5aW5nIHRoYXQgaW50byBtYW5pZmVzdCByZXN1bHRzIGludG8gY29tcGlsYXRpb24gZmFpbC4gPGJyIC8+NC4gVGVzdCBzdWl0ZSBwYXJ0aXRpb24gbWFuaWZlc3RzIGFyZSByZWx5IG9uIG51bWJlcmVkX3JlZ2lvbiBvbmx5IGFzIG5hbWVkX3JlZ2lvbiBpcyBzdWJqZWN0IHRvIHJlc29sdmVkIGluIEltcGxlbWVudGF0aW9uIGRlZmluZWQgbWFubmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgTk9fRVhQTElDSVRfVEVTVCB8IE1hbmlmZXN0IFBhcmFtZXRlci0gIHR5cGUgKHJlcXVpcmVkKSA8YnIgLz5XaGV0aGVyIHRoZSBQYXJ0aXRpb24gaXMgYSBwYXJ0IG9mIHRoZSBQU0EgUm9vdCBvZiBUcnVzdCBTZXJ2aWNlcyBvciBpcyBwYXJ0IG9mIHRoZSBBcHBsaWNhdGlvbiBSb290IG9mIFRydXN0IFNlcnZpY2VzLlR5cGUgbXVzdCBiZSBhc3NpZ25lZCBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6LSBBUFBMSUNBVElPTi1ST1QtIFBTQS1ST1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBTQSBJUEMgdGVzdHMgcGFydGl0aW9uIGZpbGVzIGFyZSBwcm92aWRlZCB3aXRoIHRoZXNlIGZpZWxkcy4gQWNjZXNzIHBlcm1pc3Npb24gYmVoYXZpb3VyIHJlbGF0ZWQgdG8gdGhlc2UgZmllbGRzIHdpbGwgYmUgdmVyaWZpZWQgYXMgcGFydCBvZiB0ZXN0cyBjb3ZlcmluZyBpc29sYXRpb24gbGV2ZWwgcnVsZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBOT19FWFBMSUNJVF9URVNUIHwgTWFuaWZlc3QgUGFyYW1ldGVyIC0gZGVzY3JpcHRpb24gKG9wdGlvbmFsKSA8YnIgLz5UaGlzIGF0dHJpYnV0ZSBjb250YWlucyBhIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIGFuZCBjb21tZW50cyBmb3IgdGhlIFNlY3VyZSBQYXJ0aXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGVzdCBzdWl0ZSBtYW5pZmVzdHMgYXJlIHByb3ZpZGVkIHdpdGggdGhlc2UgZmllbGQgd2l0aCBhZGhlcmUgdG8gbWFuaWZlc3QgcnVsZXMuIE1hbmlmZXN0IGJ1aWxkIHRvb2wgcGFyc2VyIG11c3QgcGFyc2UgdGhpcyBmaWVsZCB3aXRob3V0IGFueSBjb21waWxhdGlvbiBmYWlsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IE5PX0VYUExJQ0lUX1RFU1QgfCBNYW5pZmVzdCBQYXJhbWV0ZXIgLWVudHJ5X3BvaW50IChyZXF1aXJlZCwgdW5pcXVlKSA8YnIgLz5UaGUgUGFydGl0aW9uIGVudHJ5IHBvaW50IGluIHRoZSBmb3JtIG9mIGFuIEMgZnVuY3Rpb24gc3ltYm9sLiBBIHNpbmdsZSBlbnRyeSBwb2ludCBtdXN0IGJlIHByb3ZpZGVkIGFuZCBpdCBtdXN0IGhhdmUgdGhlIGZvbGxvd2luZyBzaWduYXR1cmU6IDxiciAvPnZvaWQgZW50cnlfcG9pbnQodm9pZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBObyBleHBsaWNpdCB0ZXN0IHdyaXR0ZW4gdG8gY292ZXIgdGhpcyBydWxlLiBUZXN0IHN1aXRlIG1hbmlmZXN0cyBhcmUgcHJvdmlkZWQgd2l0aCB0ZXN0cyBwYXJ0aXRpb24gZW50cnlfcG9pbnQuICBBIHN1Y2Nlc3NmdWwgbGF1bmNoIGFuZCBydW4gb2YgdGVzdHMgcGFydGl0aW9uIGNvZGUgaW5kaXJlY3RseSB2ZXJpZnkgdGhpcyBmaWVsZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgTk9fRVhQTElDSVRfVEVTVCB8IFRoZSBTUE0gbXVzdCBldmVudHVhbGx5IGRlbGl2ZXIgYWxsIHNpZ25hbHMgYW5kIElQQyBtZXNzYWdlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vIGV4cGxpY2l0IHRlc3Qgd3JpdHRlbiB0byBjb3ZlciB0aGlzIHJ1bGUuIEhvd2V2ZXIgYWxsIFBTQSBJUEMgdGVzdHMgYXJlIHdyaXR0ZW4gd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCB0aGUgU1BNIGRlbGl2ZXJzIGFsbCByZXF1ZXN0ZWQgc2lnbmFscyBhbmQgSVBDIG1lc3NhZ2UgaW4gYSB0aW1lbHkgZmFzaGlvbi4gRmFpbHVyZSB0byBwcm92aWRlIHRoaXMgd2lsbCByZXN1bHQgaW4gc2ltdWxhdGlvbiB0aW1lIG91dC4gIDxiciAvPlRoaXMgcnVsZSBpcyB1bmJvdW5kZWQgYW5kIGNhbm5vdCBoYXZlIGZ1bGwgY292ZXJhZ2UuIEl0IGlzIGdvb2QgdG8gdGhhdCB0aGluZ3MgYXJlIGRlbGl2ZXJlZCBpbiBhIHRpbWVseSBtYW5uZXIsIGhvd2V2ZXIgZmFpbHVyZSB3aWxsIG5vdCBicmVhayBjb21wbGlhbmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBOT19FWFBMSUNJVF9URVNUIHwgQSBTZWN1cmUgUGFydGl0aW9uIGlzIGd1YXJhbnRlZWQgdG8gYmUgYWJsZSB0byAgZXhlY3V0ZSBhbmQgcmVhZCBpdHMgb3duIGNvZGUgcmVnaW9ucyBhbmQgcmVhZCBpdHMgb3duIHJlYWQtb25seSBkYXRhIHJlZ2lvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm8gZXhwbGljaXQgdGVzdCB3cml0dGVuIHRvIGNvdmVyIHRoaXMgcnVsZS4gVGhpcyBpcyBhIG1pbmltdW0gcmVxdWlyZW1lbnQgdG8gYWJsZSB0byBsYXVuY2ggYW5kIHJ1biBzZWN1cmUgcGFydGl0aW9uLiBGYWlsaW5nIHRvIHByb3ZpZGUgdGhpcywgd2lsbCBub3QgYmUgYWJsZSB0byBydW4gSVBDIHRlc3Qgc3VpdGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IE5PVF9DT1ZFUkVEICAgICAgfCBwc2FfZ2V0IHJldHVybnMgUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNUIGlmIHRoZSBTUE0gY2Fubm90IGRlbGl2ZXIgYSBtZXNzYWdlIHRvIHRoZSBTZWN1cmUgUGFydGl0aW9uIGZvbGxvd2luZyB0aGUgYXNzZXJ0aW9uIG9mIHRoZSBSb1QgU2VydmljZSBzaWduYWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUaGlzIHNjZW5hcmlvIGNhbm5vdCBiZSBzaW11bGF0ZWQgYXMgdGVzdCBjYW4ndCBnZW5lcmF0ZSBzdGltdWx1cyB3aGVyZSBwc2FfZ2V0KCkgQVBJIHJldHVybnMgUFNBX0VSUk9SX0RPRVNfTk9UX0VYSVNULiBIb3dldmVyIGV2ZXJ5IGluc3RhbmNlcyBvZiBwc2FfZ2V0KCkgQVBJIGNhbGwgaW4gdGVzdCBzdWl0ZSBjaGVja3MgdGhlIEFQSSByZXR1cm4gdmFsdWUgYW5kIHJlLXdhaXRzIGZvciBzaWduYWwgZGVsaXZlcnkgaWYgcmV0dXJuIHZhbHVlIGlzIFBTQV9FUlJPUl9ET0VTX05PVF9FWElTVC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBObyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgTk9UX0NPVkVSRUQgICAgICB8IFRoZSBjYWxsIHRvIHBzYV9jYWxsIGlzIFBST0dSQU1NRVIgRVJST1IgaWYgdGhlIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSBoYW5kbGluZyBhIHJlcXVlc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRoaXMgcnVsZSBpcyBub3QgdmVyaWZpZWQgYmVhY3VzZSBvZiBmb2xsb3dpbmcgcmVhc29uczogPGJyIC8+LSBUaGVyZSBpcyBubyBjb21tb24gaW5mcmFzdHJ1Y3R1cmUgdG8gdGVzdCB0aGlzIHJ1bGUgYXMgdGhpcyBuZWVkcyB0d28gT1Mgc3BlY2lmaWMgdGFza3Mgd2hlcmUgb25lIHRhc2sgaW50ZXJydXB0ZWQgZHVyaW5nIGV4ZWN1dGlvbiBvZiBwc2FfY2FsbCBvciBwc2FfY2xvc2UgIGFuZCBzZWNvbmQgdGFzayBzY2hlZHVsZWQgdG8gZXhlY3V0ZSBwc2FfY2FsbCB1c2luZyBzYW1lIGhhbmRsZS48YnIgLz4tIEl0IGlzIGhhcmQgdG8gd3JpdGUgdGVzdCBzdGltdWx1cyB3aGVyZSB0aGlzIHJ1bGUgaXMgYWx3YXlzIGhpdCBhcyBpdCBpcyBoaWdobHkgZGVwZW5kZW50IG9mIHBsYXRmb3JtIHNvZnR3YXJlIHNjaGVkdWxpbmcgcG9saWN5LiA8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBOT1RfQ09WRVJFRCAgICAgIHwgVGhlIGNhbGwgdG8gcHNhX2Nsb3NlIGlzIFBST0dSQU1NRVIgRVJST1IgIGlmIHRoZSBjb25uZWN0aW9uIGlzIGFscmVhZHkgaGFuZGxpbmcgYSByZXF1ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGhpcyBydWxlIGlzIG5vdCB2ZXJpZmllZCBiZWFjdXNlIG9mIGZvbGxvd2luZyByZWFzb25zOiA8YnIgLz4tIFRoZXJlIGlzIG5vIGNvbW1vbiBpbmZyYXN0cnVjdHVyZSB0byB0ZXN0IHRoaXMgcnVsZSBhcyB0aGlzIG5lZWRzIHR3byBPUyBzcGVjaWZpYyB0YXNrcyB3aGVyZSBvbmUgdGFzayBpbnRlcnJ1cHRlZCBkdXJpbmcgZXhlY3V0aW9uIG9mIHBzYV9jYWxsIG9yIHBzYV9jbG9zZSAgYW5kIHNlY29uZCB0YXNrIHNjaGVkdWxlZCB0byBleGVjdXRlIHBzYV9jbG9zZSB1c2luZyBzYW1lIGhhbmRsZS48YnIgLz4tIEl0IGlzIGhhcmQgdG8gd3JpdGUgdGVzdCBzdGltdWx1cyB3aGVyZSB0aGlzIHJ1bGUgaXMgYWx3YXlzIGhpdCBhcyBpdCBpcyBoaWdobHkgZGVwZW5kZW50IG9mIHBsYXRmb3JtIHNvZnR3YXJlIHNjaGVkdWxpbmcgcG9saWN5LiA8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IE5PVF9DT1ZFUkVEICAgICAgfCBNYW5pZmVzdCBQYXJhbWV0ZXIgLSBwcmlvcml0eSAocmVxdWlyZWQpIDxiciAvPlBhcnRpdGlvbnMgbXVzdCBiZSBhc3NpZ25lZCBvbmUgb2YgdGhlIGZvbGxvd2luZyBwcmlvcml0eSBncm91cHM6vyBISUdIvyBOT1JNQUy/IExPV0xPVyBpcyB0aGUgbG93ZXN0IHByaW9yaXR5LiBQcmlvcml0eSBpcyBpZ25vcmVkIGJ5IFNQTXMgdGhhdCBkbyBub3QgaW1wbGVtZW50IGFueSBwcmlvcml0eS1iYXNlZCBzY2hlZHVsaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVc2Ugb2YgdGhlc2UgZmllbGRzIGFyZSBoaWdobHkgZGVwZW5kZW50IG9uIHR5cGUgb2YgU1BNIHNjaGVkdWxpbmcgcG9saWN5LCBoZW5jZSBjYW4ndCB0ZXN0IHRoZSBiZWhhdmlvdXMgb2YgdGhpcyBmaWVsZC4gQW5kIHRlc3Qgc3VpdGUgcGFydGl0aW9uIG1hbmlmZXN0cyBhcmUgcHJvdmlkZWQgd2l0aCBwcmlvcml0eSBmaWVsZCBlcXVhbCB0byBMT1cuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOL0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBObyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgTk9UX0NPVkVSRUQgICAgICB8IFNlY3VyZSBQYXJ0aXRpb24gSURzIG11c3QgYmUgZml4ZWQgYWNyb3NzIHVwZGF0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTi9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENoZWNraW5nIGZvciBQYXJ0aXRpb24gSURzIGFjcm9zcyBTUE0gdXBkYXRlcyBpcyBvdXQgb2Ygc2NvcGUgZm9yIFBTQSBJUEMgdGVzdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE4vQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogCiAjIyBMaWNlbnNlCiBBcm0gUFNBIHRlc3Qgc3VpdGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgQXBhY2hlIHYyLjAgTGljZW5zZS4KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9kb2NzL3BzYV9pdHNfdGVzdGxpc3QubWQgYi9hcGktdGVzdHMvZG9jcy9wc2FfaXRzX3Rlc3RsaXN0Lm1kCmluZGV4IDYxYTg2ZDUuLmYxNjk1NzcgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9kb2NzL3BzYV9pdHNfdGVzdGxpc3QubWQKKysrIGIvYXBpLXRlc3RzL2RvY3MvcHNhX2l0c190ZXN0bGlzdC5tZApAQCAtOCwxOSArOCwxOSBAQAogMi4gU3RvcmFnZSBUZXN0IENhc2VzIHVzZSBVSUQgdmFsdWUgc3RhcnRpbmcgZnJvbSAxIG9ud2FyZHMuIFRoZXNlIFVJRCBuZWVkcyB0byBiZSBmcmVlIGZvciBzdWNjZXNzZnVsbCB0ZXN0IGV4ZWN1dGlvbi48YnIgLz4KIDMuIFVJRCB2YWx1ZXMgMSBhbmQgMiBhcmUgcmVzZXJ2ZWQgYXMgV1JJVEVfT05DRSBVSUQuVGhlc2UgVUlEIGNhbid0IGJlIGZyZWUgZnJvbSB0ZXN0Y2FzZS4gTWFrZSBzdXJlIHRoZXNlIGFyZSBmcmVlLjxiciAvPgogCi0KLXwgVGVzdCAgICAgIHwgUmV0dXJuIFZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgIHwgQVBJIFZlcmlmaWVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRlc3QgQWxnb3JpdGhtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFVJRCBVc2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Ci18IHRlc3RfczAwMSB8IFBTQV9JVFNfRVJST1JfVUlEX05PVF9GT1VORCAgICAgICAgICB8IHBzYV9pdHNfZ2V0PGJyIC8+cHNhX2l0c19nZXRfaW5mbyA8YnIgLz5wc2FfaXRzX3JlbW92ZTxiciAvPiAgICAgICAgICAgICAgICAgfCAxLiBDYWxsIGdldCBBUEkgd2l0aCBVSUQgZm9yIHdoaWNoIG5vIFVJRC9EYXRhIHBhaXIgaXMgY3JlYXRlZDxiciAvPjIuIENhbGwgZ2V0X2luZm8gQVBJIGZvciB3aGljaCBubyBVSUQvRGF0YSBwYWlyIGlzIGNyZWF0ZWQ8YnIgLz4zLiBDYWxsIHJlbW92ZSBBUEkgZm9yIHdoaWNoIG5vIFVJRC9EYXRhIHBhaXIgaXMgY3JlYXRlZDxiciAvPjQuIFNldCB2YWxpZCAgVUlEL0RhdGEgcGFpciB3aXRoIHVpZDE8YnIgLz41LiBTZXQgb25lIG1vcmUgc2V0IG9mIFVJRC9EYXRhIHBhaXIsIHdpdGggZGlmZmVyZW50IHVpZCwgdGhhbiBwcmV2aW91czxiciAvPjYuIFJlbW92ZSB0aGUgdWlkIG9mIHN0ZXAgNC48YnIgLz43LiBDYWxsIGdldCBBUEkgZm9yICByZW1vdmVkIFVJRC9kYXRhIHBhaXI8YnIgLz44LiBDYWxsIGdldF9pbmZvIEFQSSBmb3IgIHJlbW92ZWQgVUlEL0RhdGEgcGFpcjxiciAvPjkuIENhbGwgcmVtb3ZlIEFQSSBmb3IgIHJlbW92ZWQgVUlEL0RhdGEgcGFpcjxiciAvPjEwLiBTZXQgdmFsaWQgVUlEL0RhdGEgcGFpcjxiciAvPjExLiBDYWxsIGdldCBBUEkgZm9yIGRpZmZlcmVudCB1aWQgLCB0aGVuIGNyZWF0ZWQ8YnIgLz4xMi4gQ2FsbCBnZXRfaW5mbyBBUEkgZm9yIGRpZmZlcmVudCB1aWQsIHRoZW4gY3JlYXRlZDxiciAvPjEzLiBDYWxsIHJlbW92ZSBBUEkgZm9yIGRpZmZlcmVudCB1aWQsIHRoZW4gY3JlYXRlZDxiciAvPjE0LiBSZW1vdmUgdGhlIGNyZWF0ZWQgVUlEL0RhdGEgcGFpci48YnIgLz4xNS4gUmVtb3ZlIHRoZSBzdHJheSB1aWQuPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVSUQgdmFsdWUgdXNlZCBhcmUgNSw2LDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfczAwMiB8IFBTQV9JVFNfRVJST1JfV1JJVEVfT05DRSAgICAgICAgICAgICB8IHBzYV9pdHNfc2V0PGJyIC8+cHNhX2l0c19yZW1vdmU8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiAgU2V0IHZhbGlkIFVJRC9kYXRhIHZhbHVlIHBhaXIgLCB3aXRoIGNyZWF0ZSBmbGFnIHZhbHVlIG5vbmUuMi4gQ2FsbCBnZXQgYW5kIGdldF9pbmZvIEFQSSB0byB2YWxpZGF0ZSB0aGUgZGF0YSwgYXR0cmlidXRlcyBhc3NvY2lhdGVkIHdpdGggZGF0YTxiciAvPjMuIENhbGwgc2V0IEFQSSBhZ2FpbiB3aXRoIHNhbWUgdWlkIGFuZCBjcmVhdGUgZmxhZyAgUFNBX1BTX1dSSVRFX09OQ0VfRkxBRzxiciAvPjQuIENhbGwgZ2V0IGFuZCBnZXRfaW5mbyBBUEkgdG8gdmFsaWRhdGUgdGhlIGRhdGEsIGF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIGRhdGEgaXMgbm90IGNoYW5nZWQgYWZ0ZXIgc2Vjb25kIHNldCBvcGVyYXRpb248YnIgLz41LiB0cnkgdG8gcmVtb3ZlIHRoZSBVSUQvZGF0YSBwYWlyLjxiciAvPjYuIENyZWF0ZSBuZXcgVUlEL2RhdGEgdmFsdWUgcGFpciwgd2l0aCBjcmVhdGUgZmxhZyBQU0FfUFNfV1JJVEVfT05DRV9GTEFHPGJyIC8+Ny4gVHJ5IHRvIHJlbW92ZSB0aGUgY3JlYXRlZCBVSUQuPGJyIC8+OC4gQ2FsbCBnZXQgYW5kIGdldF9pbmZvIEFQSSB0byB2YWxpZGF0ZSB0aGUgZGF0YSwgYXR0cmlidXRlcyBhc3NvY2lhdGVkIHdpdGggZGF0YTxiciAvPjkuIEFnYWluIGNhbGwgU0VUIHdpdGggc2FtZSBVSUQgLCBjcmVhdGUgZmxhZyBQU0FfUFNfV1JJVEVfT05DRV9GTEFHIGJ1dCBkaWZmZXJlbnQgZGF0YSBsZW5ndGg8YnIgLz4xMC4gVHJ5IHRvIHJlbW92ZSB0aGUgVUlELCBQU0FfSVRTX0VSUk9SX1dSSVRFX09OQ0UgZXJyb3Igc2hvdWxkIGJlIHJldHVybmVkPGJyIC8+MTEuIENhbGwgZ2V0IGFuZCBnZXRfaW5mbyBBUEkgdG8gdmFsaWRhdGUgdGhlIGRhdGEsIGF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIGRhdGE8YnIgLz4gfCBVSUQgdmFsdWUgdXNlZCBhcmUgMSBhbmQgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9zMDAzIHwgUFNBX0lUU19FUlJPUl9JTlNVRkZJQ0lFTlRfU1BBQ0UgICAgIHwgcHNhX2l0c19zZXQ8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIENyZWF0ZSBVSUQvZGF0YSBwYWlycywgd2l0aCBkYXRhX2xlbiAyNTYgYnl0ZXMuIERvIHRoaXMgd2l0aCBpbmNyZW1lbnRpbmcgdWlkIHZhbHVlcyB0aWxsIHdlIGhhdmUgSU5TVUZGSUNFTlRfU1BBQ0UuPGJyIC8+Mi4gUmVtb3ZlIGFsbCB0aGUgVUlEL2RhdGEgcGFpcnMgY3JlYXRlZC48YnIgLz4zLiBSZXBlYXQgdGhlIHN0ZXBzIG9uY2UgbW9yZSwgdG8gY2hlY2sgYWxsIHByZXZpb3VzIHVpZCBhcmUgcmVtb3ZlZCBzdWNjZXNzZnVsbHk8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFVJRCB2YWx1ZSBzdGFydHMgZnJvbSA1IGFuZCBrZWVwIG9uIGluY3JlbWVudGluZyB0aWxsIGFsbCBzcGFjZSBpcyBleGhhdXN0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9zMDA0IHwgUFNBX0lUU19TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgIHwgcHNhX2l0c19zZXQ8YnIgLz5wc2FfaXRzX2dldDxiciAvPnBzYV9pdHNfZ2V0X2luZm88YnIgLz5wc2FfaXRzX3JlbW92ZTxiciAvPiB8IDEuIFNldCBhIHZhbGlkIHVpZC9kYXRhIHBhaXI8YnIgLz4yLiBWYWxpZGF0ZSB0aGUgZGF0YSB1c2luZyBnZXQgYXBpPGJyIC8+My4gQ2hhbmdlIHRoZSBkYXRhIGxlbmd0aCB0byBoYWxmIG9mIHByZXZpb3VzLjxiciAvPjQuIENhbGwgR0VUIGFwaSB3aXRoIG9yaWdpbmFsIGRhdGEgbGVuZ3RoICwgZXJyb3Igc2hvdWxkIGJlIHJldHVybmVkIGFuZCBhbHNvIHRoZSByZXR1cm4gYnVmZmVyIHNob3VsZCBiZSBlbXB0eTxiciAvPjUuIENhbGwgR0VUIGFwaSB3aXRoIGNvcnJlY3QgZGF0YV9sZW4gYW5kIHZhbGlkYXRlIHRoZSBkYXRhIHJlY2VpdmVkLjxiciAvPjYuIENoZWNrIG9sZCBkYXRhIGNhbm5vdCBiZSBhY2Nlc3NlZC48YnIgLz43LiBDYWxsIFJFTU9WRSBhcGkgdG8gZGVsZXRlIHRoZSBVSUQvZGF0YSBwYWlyPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFVJRCB2YWx1ZSB1c2VkIGlzIDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X3MwMDUgfCBQU0FfSVRTX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfaXRzX3NldDxiciAvPnBzYV9pdHNfZ2V0PGJyIC8+cHNhX2l0c19nZXRfaW5mbzxiciAvPnBzYV9pdHNfcmVtb3ZlPGJyIC8+IHwgMS4gU2V0IHZhbGlkIFVJRC9kYXRhIHBhaXIgd2l0aCB2YXJ5aW5nIHVpZCBhbmQgZGF0YV9sZW4gPGJyIC8+Mi4gQ2FsbCBHRVQgYXBpIGFuZCB2YWxpZGF0ZSB0aGUgc2V0IGRhdGE8YnIgLz4zLiBDYWxsIEdFVCBpbmZvIGFwaSBhbmQgdmFsaWRhdGUgdGhlIGRhdGEgYXR0cmlidXRlczxiciAvPjQuIENhbGwgUkVNT1ZFIGFwaSB0byBkZWxldGUgdGhlIFVJRC9kYXRhIHBhaXI8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIHZhbHVlIHVzZWQgYXJlIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfczAwNiB8IFBTQV9JVFNfRVJST1JfRkxBR1NfTk9UX1NVUFBPUlRFRCAgICB8IHBzYV9pdHNfc2V0PGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiAgQ2FsbCB0aGUgU0VUX0lORk8gd2l0aCBtaW5pbXVtIGZsYWcgdmFsdWUgdG8gbWF4IGZsYWcgdmFsdWUgPGJyIC8+Mi4gQ2FsbCBHRVRfSU5GTyBhcGkgYW5kIHZhbGlkYXRlIHRoZSBmbGFnIHZhbHVlPGJyIC8+My4gUmVtb3ZlIHRoZSB1aWQvZGF0YSBwYWlyPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIHZhbHVlIHVzZWQgaXMgNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X3MwMDcgfCBQU0FfSVRTX0VSUk9SX0lOQ09SUkVDVF9TSVpFIHwgcHNhX2l0c19zZXQ8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIENyZWF0ZSB2YWxpZCB1aWQvZGF0YSBwYWlyLiA8YnIgLz4yLiBJbmNyZWFzZSB0aGUgbGVuZ3RoIG9mIHN0b3JhZ2UuPGJyIC8+My4gVHJ5IHRvIGFjY2VzcyB0aGUgb2xkIGxlbmd0aCB1c2luZyBnZXQgYXBpLjxiciAvPjQuIFRyeSB0byBhY2Nlc3Mgd2l0aCB2YWxpZCBsZW5ndGggbGVzcyB0aGFuIHN0b3JlZCBzaXplLjxiciAvPjUuIERlY3JlYXNlIHRoZSBsZW5ndGggb2Ygc3RvcmFnZS48YnIgLz42LiBUcnkgdG8gYWNjZXNzIHRoZSBvbGQgbGVuZ3RoLjxiciAvPjcuIFJlbW92ZSB0aGUgdWlkPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIHZhbHVlIHVzZWQgaXMgNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X3MwMDggfCBQU0FfSVRTX0VSUk9SX09GRlNFVF9JTlZBTElEICAgICAgICAgfCBwc2FfaXRzX2dldDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gU2V0IHZhbGlkIFVJRC9kYXRhIHBhaXI8YnIgLz4yLiBDYWxsIEdFVCBhcGkgd2l0aCB2YWxpZCBvZmZzZXQgYW5kIG9mZnNldCArIGRhdGFfbGVuIGVxdWFsIHRvIHN0b3JlZCBkYXRhIHNpemUuPGJyIC8+My4gQ2FsbCBHRVQgYXBpIHdpdGggdmFsaWQgb2Zmc2V0IGFuZCBvZmZzZXQgKyBkYXRhX2xlbiBsZXNzIHRoYW4gc3RvcmVkIGRhdGEgc2l6ZS48YnIgLz40LiBDYWxsIGdldCBhcGkgd2l0aCBpbnZhbGlkIG9mZnNldC48YnIgLz41LiBDYWxsIGdldCBhcGkgd2l0aCB6ZXJvIG9mZnNldCAsIGJ1dCBkYXRhIGxlbiBncmVhdGVyIHRoYW4gZGF0YSBzaXplLjxiciAvPjYuIFJlbW92ZSB0aGUgdWlkLjxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIHZhbHVlIHVzZWQgaXMgIDUgfAotfCB0ZXN0X3MwMDkgfCBQU0FfSVRTX0VSUk9SX0lOVkFMSURfQVJHVU1FTlRTICAgICAgICAgICAgfCBwc2FfaXRzX2dldDxiciAvPnBzYV9pdHNfc2V0PGJyIC8+cHNhX2l0c19nZXRfaW5mbzxiciAvPiAgICAgICAgICAgICAgICAgICAgIHwgMS4gQ2FsbCB0aGUgU0VUIEFQSSB3aXRoIE5VTEwgcG9pbnRlciBhbmQgZGF0YV9sZW4gemVybyA8YnIgLz4yLiBWYWxpZGF0ZSB1c2luZyBnZXRfaW5mbyBhcGkgc3RvcmFnZSBzaG91bGQgbm90IGJlIHByZXNlbnQuPGJyIC8+My4gU2V0IHN0b3JhZ2UgZW50aXR5IHdpdGggdmFsaWQgd3JpdGVfYnVmZmVyICwgYnV0IGxlbmd0aCB6ZXJvLjxiciAvPjQuIEFnYWluIHRyeSB0byBzZXQgZm9yIHNhbWUgdWlkIHdpdGggTlVMTCB3cml0ZV9idWZmZXIuPGJyIC8+NS4gQ2FsbCBnZXQgYW5kIGdldF9pbmZvIGFwaSB3aXRoIE5VTEwgcG9pbnRlciBhbmQgdmFsaWQgdWlkLjxiciAvPjYuIFJlbW92ZSB0aGUgdWlkPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIHZhbHVlIHVzZWQgaXMgNSA8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfczAxMCB8IFBTQV9JVFNfRVJST1JfU1RPUkFHRV9GQUlMVVJFIDxiciAvPiAgICAgICAgICAgIHwgcHNhX2l0c19zZXQ8YnIgLz4gICAgICAgICAgICAgICAgICAgICB8IDEuIENhbGwgdGhlIFNFVCBBUEkgd2l0aCBVSUQgdmFsdWUgMC48YnIgLz4yLiBDaGVjayB0aGF0IHN0b3JhZ2UgY3JlYXRpb24gZmFpbHMuPGJyIC8+IHwgVUlEIHZhbHVlIHVzZWQgaXMgMCA8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IFRlc3QgICAgICB8IFRlc3QgU2NlbmFyaW8gICAgICAgICAgICAgICAgICAgICAgICAgfCBBUEkgVmVyaWZpZWQgICB8IFJldHVybiBWYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUZXN0IEFsZ29yaXRobSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIFVzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorfCB0ZXN0X3MwMDEgfCBHZXQsZ2V0X2luZm8gYW5kIHJlbW92ZSBBUEkncyBjYWxsIGZvciA8YnIgLz4gbm9uLWV4aXN0ZW50IGFuZCByZW1vdmVkIGFzc2VzdCAgICAgICB8IHBzYV9pdHNfZ2V0PGJyIC8+cHNhX2l0c19nZXRfaW5mbyA8YnIgLz5wc2FfaXRzX3JlbW92ZTxiciAvPiAgfCBQU0FfSVRTX0VSUk9SX1VJRF9OT1RfRk9VTkQgICAgICAgICAgICAgIHwgMS4gQ2FsbCBnZXQgQVBJIHdpdGggVUlEIGZvciB3aGljaCBubyBVSUQvRGF0YSBwYWlyIGlzIGNyZWF0ZWQ8YnIgLz4yLiBDYWxsIGdldF9pbmZvIEFQSSBmb3Igd2hpY2ggbm8gVUlEL0RhdGEgcGFpciBpcyBjcmVhdGVkPGJyIC8+My4gQ2FsbCByZW1vdmUgQVBJIGZvciB3aGljaCBubyBVSUQvRGF0YSBwYWlyIGlzIGNyZWF0ZWQ8YnIgLz40LiBTZXQgdmFsaWQgIFVJRC9EYXRhIHBhaXIgd2l0aCB1aWQxPGJyIC8+NS4gU2V0IG9uZSBtb3JlIHNldCBvZiBVSUQvRGF0YSBwYWlyLCB3aXRoIGRpZmZlcmVudCB1aWQsIHRoYW4gcHJldmlvdXM8YnIgLz42LiBSZW1vdmUgdGhlIHVpZCBvZiBzdGVwIDQuPGJyIC8+Ny4gQ2FsbCBnZXQgQVBJIGZvciAgcmVtb3ZlZCBVSUQvZGF0YSBwYWlyPGJyIC8+OC4gQ2FsbCBnZXRfaW5mbyBBUEkgZm9yICByZW1vdmVkIFVJRC9EYXRhIHBhaXI8YnIgLz45LiBDYWxsIHJlbW92ZSBBUEkgZm9yICByZW1vdmVkIFVJRC9EYXRhIHBhaXI8YnIgLz4xMC4gU2V0IHZhbGlkIFVJRC9EYXRhIHBhaXI8YnIgLz4xMS4gQ2FsbCBnZXQgQVBJIGZvciBkaWZmZXJlbnQgdWlkICwgdGhlbiBjcmVhdGVkPGJyIC8+MTIuIENhbGwgZ2V0X2luZm8gQVBJIGZvciBkaWZmZXJlbnQgdWlkLCB0aGVuIGNyZWF0ZWQ8YnIgLz4xMy4gQ2FsbCByZW1vdmUgQVBJIGZvciBkaWZmZXJlbnQgdWlkLCB0aGVuIGNyZWF0ZWQ8YnIgLz4xNC4gUmVtb3ZlIHRoZSBjcmVhdGVkIFVJRC9EYXRhIHBhaXIuPGJyIC8+MTUuIFJlbW92ZSB0aGUgc3RyYXkgdWlkLjxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIHZhbHVlIHVzZWQgYXJlIDUsNiw3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X3MwMDIgfCBPdmVyd3JpdGluZyBkYXRhIGZvciBhc3NldCBjcmVhdGVkIHdpdGg8YnIgLz4gV1JJVEVfT05DRSBmbGFnICAgICAgICAgICAgfCBwc2FfaXRzX3NldDxiciAvPnBzYV9pdHNfcmVtb3ZlPGJyIC8+ICAgICAgfCAgICBQU0FfSVRTX0VSUk9SX1dSSVRFX09OQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuICBTZXQgdmFsaWQgVUlEL2RhdGEgdmFsdWUgcGFpciAsIHdpdGggY3JlYXRlIGZsYWcgdmFsdWUgbm9uZS48YnIgLz4yLiBDYWxsIGdldCBhbmQgZ2V0X2luZm8gQVBJIHRvIHZhbGlkYXRlIHRoZSBkYXRhLCBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCBkYXRhPGJyIC8+My4gQ2FsbCBzZXQgQVBJIGFnYWluIHdpdGggc2FtZSB1aWQgYW5kIGNyZWF0ZSBmbGFnICBQU0FfUFNfV1JJVEVfT05DRV9GTEFHPGJyIC8+NC4gQ2FsbCBnZXQgYW5kIGdldF9pbmZvIEFQSSB0byB2YWxpZGF0ZSB0aGUgZGF0YSwgYXR0cmlidXRlcyBhc3NvY2lhdGVkIHdpdGggZGF0YTxiciAvPiBpcyBub3QgY2hhbmdlZCBhZnRlciBzZWNvbmQgc2V0IG9wZXJhdGlvbjxiciAvPjUuIHRyeSB0byByZW1vdmUgdGhlIFVJRC9kYXRhIHBhaXIuPGJyIC8+Ni4gQ3JlYXRlIG5ldyBVSUQvZGF0YSB2YWx1ZSBwYWlyLCB3aXRoIGNyZWF0ZSBmbGFnIFBTQV9QU19XUklURV9PTkNFX0ZMQUc8YnIgLz43LiBUcnkgdG8gcmVtb3ZlIHRoZSBjcmVhdGVkIFVJRC48YnIgLz44LiBDYWxsIGdldCBhbmQgZ2V0X2luZm8gQVBJIHRvIHZhbGlkYXRlIHRoZSBkYXRhLCBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCBkYXRhPGJyIC8+OS4gQWdhaW4gY2FsbCBTRVQgd2l0aCBzYW1lIFVJRCAsIGNyZWF0ZSBmbGFnIFBTQV9QU19XUklURV9PTkNFX0ZMQUcgYnV0IDxiciAvPmRpZmZlcmVudCBkYXRhIGxlbmd0aDxiciAvPjEwLiBUcnkgdG8gcmVtb3ZlIHRoZSBVSUQsIFBTQV9JVFNfRVJST1JfV1JJVEVfT05DRSBlcnJvciBzaG91bGQgYmUgcmV0dXJuZWQ8YnIgLz4xMS4gQ2FsbCBnZXQgYW5kIGdldF9pbmZvIEFQSSB0byB2YWxpZGF0ZSB0aGUgZGF0YSwgYXR0cmlidXRlcyBhc3NvY2lhdGVkIHdpdGggZGF0YTxiciAvPiB8IFVJRCB2YWx1ZSB1c2VkIGFyZSAxIGFuZCAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X3MwMDMgfCBFeGhhdXN0IHN0b3JhZ2Ugc3BhY2UgICAgIHwgcHNhX2l0c19zZXQ8YnIgLz4gICAgICAgICAgfFBTQV9JVFNfRVJST1JfSU5TVUZGSUNJRU5UX1NQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIENyZWF0ZSBVSUQvZGF0YSBwYWlycywgd2l0aCBkYXRhX2xlbiAyNTYgYnl0ZXMuIERvIHRoaXMgd2l0aCBpbmNyZW1lbnRpbmc8YnIgLz4gdWlkIHZhbHVlcyB0aWxsIHdlIGhhdmUgSU5TVUZGSUNFTlRfU1BBQ0UuPGJyIC8+Mi4gUmVtb3ZlIGFsbCB0aGUgVUlEL2RhdGEgcGFpcnMgY3JlYXRlZC48YnIgLz4zLiBSZXBlYXQgdGhlIHN0ZXBzIG9uY2UgbW9yZSwgdG8gY2hlY2sgYWxsIHByZXZpb3VzIHVpZCBhcmUgcmVtb3ZlZCBzdWNjZXNzZnVsbHk8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFVJRCB2YWx1ZSBzdGFydHMgZnJvbSA1IGFuZCBrZWVwIG9uIGluY3JlbWVudGluZyB0aWxsIGFsbCBzcGFjZSBpcyBleGhhdXN0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9zMDA0IHwgT3ZlcndyaXRpbmcgZGF0YSBmb3IgYXNzZXQgY3JlYXRlZCB3aXRob3V0IFdSSVRFX09OQ0UgZmxhZyAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9pdHNfc2V0PGJyIC8+cHNhX2l0c19nZXQ8YnIgLz5wc2FfaXRzX2dldF9pbmZvPGJyIC8+cHNhX2l0c19yZW1vdmU8YnIgLz4gfCBQU0FfSVRTX1NVQ0NFU1MgfCAxLiBTZXQgYSB2YWxpZCB1aWQvZGF0YSBwYWlyPGJyIC8+Mi4gVmFsaWRhdGUgdGhlIGRhdGEgdXNpbmcgZ2V0IGFwaTxiciAvPjMuIENoYW5nZSB0aGUgZGF0YSBsZW5ndGggdG8gaGFsZiBvZiBwcmV2aW91cy48YnIgLz40LiBDYWxsIEdFVCBhcGkgd2l0aCBvcmlnaW5hbCBkYXRhIGxlbmd0aCAsIGVycm9yIHNob3VsZCBiZSByZXR1cm5lZCBhbmQgYWxzbzxiciAvPiB0aGUgcmV0dXJuIGJ1ZmZlciBzaG91bGQgYmUgZW1wdHk8YnIgLz41LiBDYWxsIEdFVCBhcGkgd2l0aCBjb3JyZWN0IGRhdGFfbGVuIGFuZCB2YWxpZGF0ZSB0aGUgZGF0YSByZWNlaXZlZC48YnIgLz42LiBDaGVjayBvbGQgZGF0YSBjYW5ub3QgYmUgYWNjZXNzZWQuPGJyIC8+Ny4gQ2FsbCBSRU1PVkUgYXBpIHRvIGRlbGV0ZSB0aGUgVUlEL2RhdGEgcGFpcjxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVSUQgdmFsdWUgdXNlZCBpcyA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9zMDA1IHwgR2V0LCBnZXRfaW5mbyBhbmQgcmVtb3ZlIEFQSSBjYWxsIGZvciB2YWxpZCBhc3Nlc3QgICAgICAgICAgICAgICAgICAgICB8IHBzYV9pdHNfc2V0PGJyIC8+cHNhX2l0c19nZXQ8YnIgLz5wc2FfaXRzX2dldF9pbmZvPGJyIC8+cHNhX2l0c19yZW1vdmU8YnIgLz4gfCBQU0FfSVRTX1NVQ0NFU1MgfDEuIFNldCB2YWxpZCBVSUQvZGF0YSBwYWlyIHdpdGggdmFyeWluZyB1aWQgYW5kIGRhdGFfbGVuIDxiciAvPjIuIENhbGwgR0VUIGFwaSBhbmQgdmFsaWRhdGUgdGhlIHNldCBkYXRhPGJyIC8+My4gQ2FsbCBHRVQgaW5mbyBhcGkgYW5kIHZhbGlkYXRlIHRoZSBkYXRhIGF0dHJpYnV0ZXM8YnIgLz40LiBDYWxsIFJFTU9WRSBhcGkgdG8gZGVsZXRlIHRoZSBVSUQvZGF0YSBwYWlyPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFVJRCB2YWx1ZSB1c2VkIGFyZSA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X3MwMDYgfCBTdG9yYWdlIGFzc2V0IGNyZWF0aW9uIHdpdGggdW5zdXBwb3J0ZWQgPGJyIC8+IGNyZWF0ZV9mbGFnIHZhbHVlICAgfCBwc2FfaXRzX3NldDxiciAvPiAgICAgfCBQU0FfSVRTX0VSUk9SX0ZMQUdTX05PVF9TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiAgQ2FsbCB0aGUgU0VUX0lORk8gd2l0aCBtaW5pbXVtIGZsYWcgdmFsdWUgdG8gbWF4IGZsYWcgdmFsdWUgPGJyIC8+Mi4gQ2FsbCBHRVRfSU5GTyBhcGkgYW5kIHZhbGlkYXRlIHRoZSBmbGFnIHZhbHVlPGJyIC8+My4gUmVtb3ZlIHRoZSB1aWQvZGF0YSBwYWlyPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIHZhbHVlIHVzZWQgaXMgNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X3MwMDcgfCBHZXQgQVBJIGNhbGwgd2l0aCBsZW5ndGggZGlmZmVyZW50IHRoYW4gYXNzZXQgPGJyIC8+IGRhdGEgbGVuZ3RoIHwgcHNhX2l0c19zZXQ8YnIgLz4gICAgIHwgUFNBX0lUU19FUlJPUl9JTkNPUlJFQ1RfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIENyZWF0ZSB2YWxpZCB1aWQvZGF0YSBwYWlyLiA8YnIgLz4yLiBJbmNyZWFzZSB0aGUgbGVuZ3RoIG9mIHN0b3JhZ2UuPGJyIC8+My4gVHJ5IHRvIGFjY2VzcyB0aGUgb2xkIGxlbmd0aCB1c2luZyBnZXQgYXBpLjxiciAvPjQuIFRyeSB0byBhY2Nlc3Mgd2l0aCB2YWxpZCBsZW5ndGggbGVzcyB0aGFuIHN0b3JlZCBzaXplLjxiciAvPjUuIERlY3JlYXNlIHRoZSBsZW5ndGggb2Ygc3RvcmFnZS48YnIgLz42LiBUcnkgdG8gYWNjZXNzIHRoZSBvbGQgbGVuZ3RoLjxiciAvPjcuIFJlbW92ZSB0aGUgdWlkPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIHZhbHVlIHVzZWQgaXMgNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X3MwMDggfCBHZXQgQVBJIGNhbGwgd2l0aCBpbnZhbGlkIG9mZnNldCAgICAgICAgIHwgcHNhX2l0c19nZXQ8YnIgLz4gICAgICAgIHxQU0FfSVRTX0VSUk9SX09GRlNFVF9JTlZBTElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gU2V0IHZhbGlkIFVJRC9kYXRhIHBhaXI8YnIgLz4yLiBDYWxsIEdFVCBhcGkgd2l0aCB2YWxpZCBvZmZzZXQgYW5kIG9mZnNldCArIGRhdGFfbGVuIGVxdWFsIHRvIHN0b3JlZCBkYXRhIHNpemUuPGJyIC8+My4gQ2FsbCBHRVQgYXBpIHdpdGggdmFsaWQgb2Zmc2V0IGFuZCBvZmZzZXQgKyBkYXRhX2xlbiBsZXNzIHRoYW4gc3RvcmVkIGRhdGEgc2l6ZS48YnIgLz40LiBDYWxsIGdldCBhcGkgd2l0aCBpbnZhbGlkIG9mZnNldC48YnIgLz41LiBDYWxsIGdldCBhcGkgd2l0aCB6ZXJvIG9mZnNldCAsIGJ1dCBkYXRhIGxlbiBncmVhdGVyIHRoYW4gZGF0YSBzaXplLjxiciAvPjYuIFJlbW92ZSB0aGUgdWlkLjxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVSUQgdmFsdWUgdXNlZCBpcyAgNSB8Cit8IHRlc3RfczAwOSB8IEFQSSBjYWxsIHdpdGggTlVMTCBwb2ludGVyIGFuZCB6ZXJvIGxlbmd0aCAgICAgICAgICAgIHwgcHNhX2l0c19nZXQ8YnIgLz5wc2FfaXRzX3NldDxiciAvPnBzYV9pdHNfZ2V0X2luZm88YnIgLz4gICAgfCBQU0FfSVRTX1NVQ0NFU1MgICAgICAgICAgICAgICAgIHwgMS4gQ2FsbCB0aGUgU0VUIEFQSSB3aXRoIE5VTEwgcG9pbnRlciBhbmQgZGF0YV9sZW4gemVybyA8YnIgLz4yLiBWYWxpZGF0ZSB1c2luZyBnZXRfaW5mbyBhcGkgc3RvcmFnZSBzaG91bGQgYmUgcHJlc2VudC48YnIgLz4zLiBDYWxsIGdldCBBUEkgd2l0aCBOVUxMIHBvaW50ZXIuPGJyIC8+NC4gUmVtb3ZlIHRoZSBVSUQuPGJyIC8+NS4gQ2FsbCBnZXRfaW5mbyBBUEkgdG8gdmFsaWRhdGUgc3RvcmFnZSBpcyByZW1vdmVkLjxiciAvPjYuIFNldCBzdG9yYWdlIGVudGl0eSB3aXRoIHZhbGlkIHdyaXRlX2J1ZmZlciAsIGJ1dCBsZW5ndGggemVyby48YnIgLz43LiBDYWxsIGdldF9pbmZvIEFQSSB0byB2YWxpZGF0ZSBzdG9yYWdlIGF0dHJpYnV0ZXMuPGJyIC8+OC4gQ2FsbCBnZXRfaW5mbyBhcGkgd2l0aCBOVUxMIHBvaW50ZXIgYW5kIHZhbGlkIHVpZC48YnIgLz45LiBSZW1vdmUgdGhlIHVpZDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFVJRCB2YWx1ZSB1c2VkIGlzIDUgPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X3MwMTAgfCBTdG9yYWdlIGFzc2VzdCBjcmVhdGlvbiB3aXRoIFVJRCB2YWx1ZSAwIDxiciAvPiAgICAgICAgICAgIHwgcHNhX2l0c19zZXQ8YnIgLz4gICB8IFBTQV9JVFNfRVJST1JfSU5WQUxJRF9BUkdVTUVOVFMgICAgICAgICAgICAgICAgIHwgMS4gQ2FsbCB0aGUgU0VUIEFQSSB3aXRoIFVJRCB2YWx1ZSAwLjxiciAvPjIuIENoZWNrIHRoYXQgc3RvcmFnZSBjcmVhdGlvbiBmYWlscy48YnIgLz4gfCBVSUQgdmFsdWUgdXNlZCBpcyAwIDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorfCBOQSB8IFN0b3JhZ2UgRmFpbHVyZSAgPGJyIC8+ICAgICAgICAgICAgfCBOQTxiciAvPiAgICB8IFBTQV9JVFNfRVJST1JfU1RPUkFHRV9GQUlMVVJFIDxiciAvPnwgICAgMS4gVGhlIGZhaWx1cmUgY2F1c2Ugd2lsbCBkZXBlbmQgb24gdGhlIHVuZGVybHlpbmcgPGJyIC8+IHBsYXRmb3JtIGFuZCB2YXJ5IGZvciBlYWNoIGltcGxlbWVudGF0aW9uLjxiciAvPiBJdCBpcyBza2lwcGVkIGluIGN1cnJlbnQgc3VpdGUgIDxiciAvPiB8IE5BIDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIAogIyMgTGljZW5zZQogQXJtIFBTQSB0ZXN0IHN1aXRlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIEFwYWNoZSB2Mi4wIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZG9jcy9wc2FfcHNfdGVzdGxpc3QubWQgYi9hcGktdGVzdHMvZG9jcy9wc2FfcHNfdGVzdGxpc3QubWQKaW5kZXggNmUxMGE5Yy4uMjY3NWM3ZiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2RvY3MvcHNhX3BzX3Rlc3RsaXN0Lm1kCisrKyBiL2FwaS10ZXN0cy9kb2NzL3BzYV9wc190ZXN0bGlzdC5tZApAQCAtOSwyMyArOSwyOCBAQAogMy4gVUlEIHZhbHVlcyAxIGFuZCAyIGFyZSByZXNlcnZlZCBhcyBXUklURV9PTkNFIFVJRC5UaGVzZSBVSUQgY2FuJ3QgYmUgZnJlZSBmcm9tIHRlc3RjYXNlLiBNYWtlIHN1cmUgdGhlc2UgYXJlIGZyZWUuPGJyIC8+CiAKIAotfCBUZXN0ICAgICAgfCBSZXR1cm4gVmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgfCBBUEkgVmVyaWZpZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGVzdCBBbGdvcml0aG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIFVzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKLXwgdGVzdF9zMDAxIHwgUFNBX1BTX0VSUk9SX1VJRF9OT1RfRk9VTkQgICAgICAgICAgfCBwc2FfcHNfZ2V0PGJyIC8+cHNhX3BzX2dldF9pbmZvIDxiciAvPnBzYV9wc19yZW1vdmU8YnIgLz4gICAgICAgICAgICAgICAgIHwgMS4gQ2FsbCBnZXQgQVBJIHdpdGggVUlEIGZvciB3aGljaCBubyBVSUQvRGF0YSBwYWlyIGlzIGNyZWF0ZWQuPGJyIC8+Mi4gQ2FsbCBnZXRfaW5mbyBBUEkgZm9yIHdoaWNoIG5vIFVJRC9EYXRhIHBhaXIgaXMgY3JlYXRlZC48YnIgLz4zLiBDYWxsIHJlbW92ZSBBUEkgZm9yIHdoaWNoIG5vIFVJRC9EYXRhIHBhaXIgaXMgY3JlYXRlZC48YnIgLz40LiBTZXQgdmFsaWQgIFVJRC9EYXRhIHBhaXIgd2l0aCB1aWQxLjxiciAvPjUuIFNldCBvbmUgbW9yZSBzZXQgb2YgVUlEL0RhdGEgcGFpciwgd2l0aCBkaWZmZXJlbnQgdWlkLCB0aGFuIHByZXZpb3VzLjxiciAvPjYuIFJlbW92ZSB0aGUgdWlkIG9mIHN0ZXAgNC48YnIgLz43LiBDYWxsIGdldCBBUEkgZm9yICByZW1vdmVkIFVJRC9kYXRhIHBhaXIuPGJyIC8+OC4gQ2FsbCBnZXRfaW5mbyBBUEkgZm9yICByZW1vdmVkIFVJRC9EYXRhIHBhaXIuPGJyIC8+OS4gQ2FsbCByZW1vdmUgQVBJIGZvciAgcmVtb3ZlZCBVSUQvRGF0YSBwYWlyLjxiciAvPjEwLiBTZXQgdmFsaWQgVUlEL0RhdGEgcGFpci48YnIgLz4xMS4gQ2FsbCBnZXQgQVBJIGZvciBkaWZmZXJlbnQgdWlkICwgdGhlbiBjcmVhdGVkLjxiciAvPjEyLiBDYWxsIGdldF9pbmZvIEFQSSBmb3IgZGlmZmVyZW50IHVpZCwgdGhlbiBjcmVhdGVkLjxiciAvPjEzLiBDYWxsIHJlbW92ZSBBUEkgZm9yIGRpZmZlcmVudCB1aWQsIHRoZW4gY3JlYXRlZC48YnIgLz4xNC4gUmVtb3ZlIHRoZSBjcmVhdGVkIFVJRC9EYXRhIHBhaXIuPGJyIC8+MTUuIFJlbW92ZSB0aGUgc3RyYXkgdWlkLjxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIHZhbHVlIHVzZWQgYXJlIDUsIDYsIDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfczAwMiB8IFBTQV9QU19FUlJPUl9XUklURV9PTkNFICAgICAgICAgICAgIHwgcHNhX3BzX3NldDxiciAvPnBzYV9wc19yZW1vdmU8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiAgU2V0IHZhbGlkIFVJRC9kYXRhIHZhbHVlIHBhaXIgLCB3aXRoIGNyZWF0ZSBmbGFnIHZhbHVlIG5vbmUuPGJyIC8+Mi4gQ2FsbCBnZXQgYW5kIGdldF9pbmZvIEFQSSB0byB2YWxpZGF0ZSB0aGUgZGF0YSwgYXR0cmlidXRlcyBhc3NvY2lhdGVkIHdpdGggZGF0YS48YnIgLz4zLiBDYWxsIHNldCBBUEkgYWdhaW4gd2l0aCBzYW1lIHVpZCBhbmQgY3JlYXRlIGZsYWcgIFBTQV9QU19XUklURV9PTkNFX0ZMQUcuPGJyIC8+NC4gQ2FsbCBnZXQgYW5kIGdldF9pbmZvIEFQSSB0byB2YWxpZGF0ZSB0aGUgZGF0YSwgYXR0cmlidXRlcyBhc3NvY2lhdGVkIHdpdGggZGF0YSBpcyBub3QgY2hhbmdlZCBhZnRlciBzZWNvbmQgc2V0IG9wZXJhdGlvbjxiciAvPjUuIFRyeSB0byByZW1vdmUgdGhlIFVJRC9kYXRhIHBhaXIuPGJyIC8+Ni4gQ3JlYXRlIG5ldyBVSUQvZGF0YSB2YWx1ZSBwYWlyLCB3aXRoIGNyZWF0ZSBmbGFnIFBTQV9QU19XUklURV9PTkNFX0ZMQUcuPGJyIC8+Ny4gVHJ5IHRvIHJlbW92ZSB0aGUgY3JlYXRlZCBVSUQuPGJyIC8+OC4gQ2FsbCBnZXQgYW5kIGdldF9pbmZvIEFQSSB0byB2YWxpZGF0ZSB0aGUgZGF0YSwgYXR0cmlidXRlcyBhc3NvY2lhdGVkIHdpdGggZGF0YS48YnIgLz45LiBBZ2FpbiBjYWxsIFNFVCB3aXRoIHNhbWUgVUlEICwgY3JlYXRlIGZsYWcgUFNBX1BTX1dSSVRFX09OQ0VfRkxBRyBidXQgZGlmZmVyZW50IGRhdGEgbGVuZ3RoLjxiciAvPjEwLiBUcnkgdG8gcmVtb3ZlIHRoZSBVSUQsIFBTQV9QU19FUlJPUl9XUklURV9PTkNFIGVycm9yIHNob3VsZCBiZSByZXR1cm5lZC48YnIgLz4xMS4gQ2FsbCBnZXQgYW5kIGdldF9pbmZvIEFQSSB0byB2YWxpZGF0ZSB0aGUgZGF0YSwgYXR0cmlidXRlcyBhc3NvY2lhdGVkIHdpdGggZGF0YS48YnIgLz4gfCBVSUQgdmFsdWUgdXNlZCBhcmUgMSBhbmQgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9zMDAzIHwgUFNBX1BTX0VSUk9SX0lOU1VGRklDSUVOVF9TUEFDRSAgICAgfCBwc2FfcHNfc2V0PGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiBDcmVhdGUgVUlEL2RhdGEgcGFpcnMsIHdpdGggZGF0YV9sZW4gMjU2IGJ5dGVzLiBEbyB0aGlzIHdpdGggaW5jcmVtZW50aW5nIHVpZCB2YWx1ZXMgdGlsbCB3ZSBoYXZlIElOU1VGRklDRU5UX1NQQUNFLjxiciAvPjIuIFJlbW92ZSBhbGwgdGhlIFVJRC9kYXRhIHBhaXJzIGNyZWF0ZWQuPGJyIC8+My4gUmVwZWF0IHRoZSBzdGVwcyBvbmNlIG1vcmUsIHRvIGNoZWNrIGFsbCBwcmV2aW91cyB1aWQgYXJlIHJlbW92ZWQgc3VjY2Vzc2Z1bGx5LjxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIHZhbHVlIHN0YXJ0cyBmcm9tIDUgYW5kIGtlZXAgb24gaW5jcmVtZW50aW5nIHRpbGwgYWxsIHNwYWNlIGlzIGV4aGF1c3RlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X3MwMDQgfCBQU0FfUFNfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICB8IHBzYV9wc19zZXQ8YnIgLz5wc2FfcHNfZ2V0PGJyIC8+cHNhX3BzX2dldF9pbmZvPGJyIC8+cHNhX3BzX3JlbW92ZTxiciAvPiB8IDEuIFNldCBhIHZhbGlkIHVpZC9kYXRhIHBhaXIuPGJyIC8+Mi4gVmFsaWRhdGUgdGhlIGRhdGEgdXNpbmcgZ2V0IGFwaS48YnIgLz4zLiBDaGFuZ2UgdGhlIGRhdGEgbGVuZ3RoIHRvIGhhbGYgb2YgcHJldmlvdXMuPGJyIC8+NC4gQ2FsbCBHRVQgYXBpIHdpdGggb3JpZ2luYWwgZGF0YSBsZW5ndGggLCBlcnJvciBzaG91bGQgYmUgcmV0dXJuZWQgYW5kIGFsc28gdGhlIHJldHVybiBidWZmZXIgc2hvdWxkIGJlIGVtcHR5LjxiciAvPjUuIENhbGwgR0VUIGFwaSB3aXRoIGNvcnJlY3QgZGF0YV9sZW4gYW5kIHZhbGlkYXRlIHRoZSBkYXRhIHJlY2VpdmVkLjxiciAvPjYuIENoZWNrIG9sZCBkYXRhIGNhbm5vdCBiZSBhY2Nlc3NlZC48YnIgLz43LiBDYWxsIFJFTU9WRSBhcGkgdG8gZGVsZXRlIHRoZSBVSUQvZGF0YSBwYWlyLjxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVSUQgdmFsdWUgdXNlZCBpcyA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9zMDA1IHwgUFNBX1BTX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgfCBwc2FfcHNfc2V0PGJyIC8+cHNhX3BzX2dldDxiciAvPnBzYV9wc19nZXRfaW5mbzxiciAvPnBzYV9wc19yZW1vdmU8YnIgLz4gfCAxLiBTZXQgdmFsaWQgVUlEL2RhdGEgcGFpciB3aXRoIHZhcnlpbmcgdWlkIGFuZCBkYXRhX2xlbi48YnIgLz4yLiBDYWxsIEdFVCBhcGkgYW5kIHZhbGlkYXRlIHRoZSBzZXQgZGF0YS48YnIgLz4zLiBDYWxsIEdFVCBpbmZvIGFwaSBhbmQgdmFsaWRhdGUgdGhlIGRhdGEgYXR0cmlidXRlcy48YnIgLz40LiBDYWxsIFJFTU9WRSBhcGkgdG8gZGVsZXRlIHRoZSBVSUQvZGF0YSBwYWlyLjxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVSUQgdmFsdWUgdXNlZCBhcmUgNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9zMDA2IHwgUFNBX1BTX0VSUk9SX0ZMQUdTX05PVF9TVVBQT1JURUQgICAgfCBwc2FfcHNfc2V0PGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiAgQ2FsbCB0aGUgU0VUX0lORk8gd2l0aCBtaW5pbXVtIGZsYWcgdmFsdWUgdG8gbWF4IGZsYWcgdmFsdWUuPGJyIC8+Mi4gQ2FsbCBHRVRfSU5GTyBhcGkgYW5kIHZhbGlkYWUgdGhlIGZsYWcgdmFsdWUuPGJyIC8+My4gUmVtb3ZlIHRoZSB1aWQvZGF0YSBwYWlyLjxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFVJRCB2YWx1ZSB1c2VkIGlzIDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9zMDA3IHwgUFNBX1BTX0VSUk9SX0lOQ09SUkVDVF9TSVpFIHwgcHNhX3BzX3NldDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gQ3JlYXRlIHZhbGlkIHVpZC9kYXRhIHBhaXIuPGJyIC8+Mi4gSW5jcmVhc2UgdGhlIGxlbmd0aCBvZiBzdG9yYWdlLjxiciAvPjMuIFRyeSB0byBhY2Nlc3MgdGhlIG9sZCBsZW5ndGggdXNpbmcgZ2V0IGFwaS48YnIgLz40LiBUcnkgdG8gYWNjZXNzIHdpdGggdmFsaWQgbGVuZ3RoIGxlc3MgdGhhbiBzdG9yZWQgc2l6ZS48YnIgLz41LiBEZWNyZWFzZSB0aGUgbGVuZ3RoIG9mIHN0b3JhZ2UuPGJyIC8+Ni4gVHJ5IHRvIGFjY2VzcyB0aGUgb2xkIGxlbmd0aC48YnIgLz43LiBSZW1vdmUgdGhlIHVpZC48YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVSUQgdmFsdWUgdXNlZCBpcyA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfczAwOCB8IFBTQV9QU19FUlJPUl9PRkZTRVRfSU5WQUxJRCAgICAgICAgIHwgcHNhX3BzX2dldDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gU2V0IHZhbGlkIFVJRC9kYXRhIHBhaXIuPGJyIC8+Mi4gQ2FsbCBHRVQgYXBpIHdpdGggdmFsaWQgb2Zmc2V0IGFuZCBvZmZzZXQgKyBkYXRhX2xlbiBlcXVhbCB0byBzdG9yZWQgZGF0YSBzaXplLjxiciAvPjMuIENhbGwgR0VUIGFwaSB3aXRoIHZhbGlkIG9mZnNldCBhbmQgb2Zmc2V0ICsgZGF0YV9sZW4gbGVzcyB0aGFuIHN0b3JlZCBkYXRhIHNpemUuPGJyIC8+NC4gQ2FsbCBnZXQgYXBpIHdpdGggaW52YWxpZCBvZmZzZXQuPGJyIC8+NS4gQ2FsbCBnZXQgYXBpIHdpdGggemVybyBvZmZzZXQgLCBidXQgZGF0YSBsZW4gZ3JlYXRlciB0aGFuIGRhdGEgc2l6ZS48YnIgLz42LiBSZW1vdmUgdGhlIHVpZC48YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFVJRCB2YWx1ZSB1c2VkIGlzICA1IHwKLXwgdGVzdF9zMDA5IHwgUFNBX1BTX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgICAgICAgICAgICB8IHBzYV9wc19nZXQ8YnIgLz5wc2FfcHNfc2V0PGJyIC8+cHNhX3BzX2dldF9pbmZvPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgfCAxLiBDYWxsIHRoZSBTRVQgQVBJIHdpdGggTlVMTCBwb2ludGVyIGFuZCBkYXRhX2xlbiB6ZXJvLjxiciAvPjIuIFZhbGlkYXRlIHVzaW5nIGdldF9pbmZvIGFwaSBzdG9yYWdlIHNob3VsZCBub3QgYmUgcHJlc2VudC48YnIgLz4zLiBTZXQgc3RvcmFnZSBlbnRpdHkgd2l0aCB2YWxpZCB3cml0ZV9idWZmZXIgLCBidXQgbGVuZ3RoIHplcm8uPGJyIC8+NC4gQWdhaW4gdHJ5IHRvIHNldCBmb3Igc2FtZSB1aWQgd2l0aCBOVUxMIHdyaXRlX2J1ZmZlci48YnIgLz41LiBDYWxsIGdldCBhbmQgZ2V0X2luZm8gYXBpIHdpdGggTlVMTCBwb2ludGVyIGFuZCB2YWxpZCB1aWQuPGJyIC8+Ni4gUmVtb3ZlIHRoZSB1aWQuPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIHZhbHVlIHVzZWQgaXMgNSA8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IHRlc3RfczAxMCB8IFBTQV9QU19FUlJPUl9TVE9SQUdFX0ZBSUxVUkUgPGJyIC8+ICAgICAgICAgICAgfCBwc2FfcHNfc2V0PGJyIC8+ICAgICAgICAgICAgICAgICAgICAgfCAxLiBDYWxsIHRoZSBTRVQgQVBJIHdpdGggVUlEIHZhbHVlIDAuPGJyIC8+Mi4gQ2hlY2sgdGhhdCBzdG9yYWdlIGNyZWF0aW9uIGZhaWxzLjxiciAvPiB8IFVJRCB2YWx1ZSB1c2VkIGlzIDAgPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCB0ZXN0X3AwMTEgfCBQU0FfUFNfRVJST1JfVUlEX05PVF9GT1VORCAgICAgICAgICAgIHwgcHNhX3BzX2NyZWF0ZTxiciAvPnBzYV9wc19zZXRfZXh0ZW5kZWQ8YnIgLz4gICAgICAgICAgICAgICAgICAgICB8IDEuIENhbGwgdGhlIFNFVCBFeHRlbmRlZCBBUEkgd2hlbiBubyB1aWQgcHJlc2VudC48YnIgLz4yLiBDcmVhdGUgYSB2YWxpZCBzdG9yYWdlIHVzaW5nIHNldC4gPGJyIC8+IDMuIENhbGwgY3JlYXRlIGFwaSB3aXRoIGRpZmZlcmVudCBsZW5ndGggZm9yIGV4aXN0aW5nIHVpZC48YnIgLz4gNC4gQ2FsbCBjcmVhdGUgYXBpIHRvIHNldCBXUklURV9PTkNFIGZsYWcuPGJyIC8+IDUuIFZhbGlkYXRlIGRhdGEgYXR0cmlidXRlcyBhcmUgbWFpbnRhaW5lZC48YnIgLz42LiBSZW1vdmUgdGhlIHVpZC48YnIgLz4gNy4gQ3JlYXRlIHZhbGlkIHN0b3JhZ2UgdXNpbmcgY3JlYXRlIGFwaS48YnIgLz4gOC4gVHJ5IHRvIGNoYW5nZSBsZW5ndGggdXNpbmcgY3JlYXRlIGFwaS48YnIgLz4gOS4gVmFsaWRhdGUgc3RvcmFnZSBpcyBlbXB0eS48YnIgLz4gMTAuIEFnYWluIGNhbGwgY3JlYXRlIGFwaSB3aXRoIG9yaWdpbmFsIHBhcmFtZXRlcnMuPGJyIC8+MTEuIFJlbW92ZSB0aGUgdWlkLjxiciAvPiAxMi4gQ2hlY2sgbm8gZHVwbGljYXRlIGVudHJ5IHByZXNlbnQuPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVSUQgdmFsdWUgdXNlZCBpcyA1IDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgdGVzdF9wMDEyIHwgUFNBX1BTX0VSUk9SX0lOVkFMSURfQVJHVU1FTlQgPGJyIC8+IFBTQV9QU19FUlJPUl9PRkZTRVRfSU5WQUxJRCA8YnIgLz4gICAgICAgICAgICB8IHBzYV9wc19jcmVhdGU8YnIgLz5wc2FfcHNfc2V0X2V4dGVuZGVkPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgfCAxLiBDcmVhdGUgYSB2YWxpZCBzdG9yYWdlIHVzaW5nIHNldC48YnIgLz4gMi4gU2V0IGRhdGEgb24gZmlyc3QgaGFsZiBvZiBidWZmZXIuPGJyIC8+IDMuIFRyeSB0byBzZXQgZGF0YSBhdCBpbmNvcnJlY3Qgb2Zmc2V0ICtsZW5ndGguIDxiciAvPiA0LiBUcnkgdG8gc2V0IGRhdGEgYXQgaW5jb3JyZWN0IG9mZnNldC48YnIgLz41LiBUcnkgdG8gc2V0IGF0IGNvcnJlY3Qgb2Zmc2V0IGJ1dCB6ZXJvIGxlbmd0aCBidWZmZXIuPGJyIC8+Ni4gVHJ5IHRvIHNldCBkYXRhIGF0IGluY29ycmVjdCBsZW5ndGggYW5kIHZhbGlkIG9mZnNldC48YnIgLz4gNy4gT3ZlcndyaXRlIHRoZSBzdG9yYWdlIHVzaW5nIHNldCBhcGkuPGJyIC8+IDguIFZhbGlkYXRlIGRhdGEgaXMgY29ycmVjdGx5IHdyaXR0ZW4uPGJyIFw+IDkuIENhbGwgc2V0X2V4dGVuZGVkIHdpdGggTlVMTCB3cml0ZSBidWZmZXIuPGJyIC8+IDEwLiBPdmVyd3JpdGUgc3RvcmFnZSB1c2luZyBzZXRfZXh0ZW5kZWQgYXBpLjxiciAvPiAxMS4gUmVtb3ZlIHRoZSB1aWQuPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVSUQgdmFsdWUgdXNlZCBpcyA2IDxiciAvPgotfCB0ZXN0X3AwMTMgfCBQU0FfUFNfU1VDQ0VTUyAgICB8IHBzYV9wc19zZXRfZXh0ZW5kZWQ8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuICBDcmVhdGUgU3RvcmFnZSBvZiB6ZXJvIGxlbmd0aCB1c2luZyBjcmVhdGUuPGJyIC8+Mi4gVHJ5IHRvIHNldCBzb21lIGRhdGEgaW4gdGhlIHN0b3JhZ2UgY3JlYXRlZC48YnIgLz4zLiBWYWxpZGF0ZSB0aGUgc3RvcmFnZSBhdHRyaWJ1dGVzLjxiciAvPiA0LiBSZW1vdmUgdGhlIHN0b3JhZ2UuPGJyIC8+IDUuIENyZWF0ZSBhIHZhbGlkIHN0b3JhZ2Ugd2l0aCBub24temVybyBsZW5ndGguPGJyIC8+IDYuIFNldCBkYXRhIGluIHRoZSBidWZmZXIuPGJyIC8+IDcuIFZhbGlkYXRlIHRoZSBkYXRhIGF0dHJpYnV0ZXMuPGJyIC8+IDguIE92ZXJ3cml0ZSBkYXRhIHVzaW5nIHNldCBhcGkuPGJyIC8+IDkuIFZhbGlkYXRlIHRoZSBkYXRhLjxiciAvPiAxMC4gQ2FsbCBjcmVhdGUgYXBpIGZvciBleGlzdGluZyB1aWQgd2l0aCBzYW1lIHBhcmFtZXRlcnMuPGJyIC8+IDExLiBSZW1vdmUgdGhlIHVpZC48YnIgLz4gMTIuIENoZWNrIHdpdGggc2V0X2V4dGVuZGVkIG5vIGR1cGxpY2F0ZSB1aWQgZXhpc3RzLjxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVSUQgdmFsdWUgdXNlZCBpcyA0Ci18IHRlc3RfcDAxNCB8IFBTQV9QU19FUlJPUl9OT1RfU1VQUE9SVEVEICAgIHwgcHNhX3BzX2NyZWF0ZTxiciAvPnBzYV9wc19zZXRfZXh0ZW5kZWQ8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJlbG93IFN0ZXBzIHdpbGwgYmUgcnVuIG9ubHkgaWYgb3B0aW9uYWwgQVBJIGFyZSBub3Qgc3VwcG9ydGVkLjxiciAvPjEuIENyZWF0ZSBBUEkgY2FsbCBzaG91bGQgZmFpbC48YnIgLz4yLiBDaGVjayB0aGUgVUlEIHNob3VsZCBub3QgZXhpc3QuPGJyIC8+IDMuIENyZWF0ZSBzdG9yYWdlIHVzaW5nIHNldCBBUEkuPGJyIC8+IDQuIFRyeSB0byBwYXJ0aWFsbHkgd3JpdGUgdXNpbmcgc2V0X2V4dGVuZGVkIEFQSS48YnIgLz4gNS4gVmFsaWRhdGUgZGF0YSBpcyBub3QgbW9kaWZpZWQuPGJyIC8+IDYuIFJlbW92ZSB0aGUgdWlkLjxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVSUQgdmFsdWUgdXNlZCBpcyA1Ci18IHRlc3RfcDAxNSB8IFBTQV9QU19FUlJPUl9GTEFHU19OT1RfU1VQUE9SVEVEICAgIHwgcHNhX3BzX2NyZWF0ZTxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQmVsb3cgU3RlcCB3aWxsIGJlIHJ1biBvbmx5IGlmIG9wdGlvbmFsIEFQSSBhcmUgc3VwcG9ydGVkLjxiciAvPjEuIENyZWF0ZSBBUEkgY2FsbCB3aXRoIFdSSVRFX09OQ0UgZmxhZyBzaG91bGQgZmFpbC48YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIHZhbHVlIHVzZWQgaXMgNQorfCBUZXN0ICAgICAgfCBUZXN0IFNjZW5hcmlvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBUEkgVmVyaWZpZWQgICAgfCBSZXR1cm4gVmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGVzdCBBbGdvcml0aG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIFVzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Cit8IHRlc3RfczAwMSB8ICBHZXQsZ2V0X2luZm8gYW5kIHJlbW92ZSBBUEkncyBjYWxsIGZvciA8YnIgLz4gbm9uLWV4aXN0ZW50IGFuZCByZW1vdmVkIGFzc2VzdCAgICAgICAgICAgICB8IHBzYV9wc19nZXQ8YnIgLz5wc2FfcHNfZ2V0X2luZm8gPGJyIC8+cHNhX3BzX3JlbW92ZTxiciAvPiB8UFNBX1BTX0VSUk9SX1VJRF9OT1RfRk9VTkQgICAgICAgICAgICAgICAgfCAxLiBDYWxsIGdldCBBUEkgd2l0aCBVSUQgZm9yIHdoaWNoIG5vIFVJRC9EYXRhIHBhaXIgaXMgY3JlYXRlZC48YnIgLz4yLiBDYWxsIGdldF9pbmZvIEFQSSBmb3Igd2hpY2ggbm8gVUlEL0RhdGEgcGFpciBpcyBjcmVhdGVkLjxiciAvPjMuIENhbGwgcmVtb3ZlIEFQSSBmb3Igd2hpY2ggbm8gVUlEL0RhdGEgcGFpciBpcyBjcmVhdGVkLjxiciAvPjQuIFNldCB2YWxpZCAgVUlEL0RhdGEgcGFpciB3aXRoIHVpZDEuPGJyIC8+NS4gU2V0IG9uZSBtb3JlIHNldCBvZiBVSUQvRGF0YSBwYWlyLCB3aXRoIGRpZmZlcmVudCB1aWQsIHRoYW4gcHJldmlvdXMuPGJyIC8+Ni4gUmVtb3ZlIHRoZSB1aWQgb2Ygc3RlcCA0LjxiciAvPjcuIENhbGwgZ2V0IEFQSSBmb3IgIHJlbW92ZWQgVUlEL2RhdGEgcGFpci48YnIgLz44LiBDYWxsIGdldF9pbmZvIEFQSSBmb3IgIHJlbW92ZWQgVUlEL0RhdGEgcGFpci48YnIgLz45LiBDYWxsIHJlbW92ZSBBUEkgZm9yICByZW1vdmVkIFVJRC9EYXRhIHBhaXIuPGJyIC8+MTAuIFNldCB2YWxpZCBVSUQvRGF0YSBwYWlyLjxiciAvPjExLiBDYWxsIGdldCBBUEkgZm9yIGRpZmZlcmVudCB1aWQgLCB0aGVuIGNyZWF0ZWQuPGJyIC8+MTIuIENhbGwgZ2V0X2luZm8gQVBJIGZvciBkaWZmZXJlbnQgdWlkLCB0aGVuIGNyZWF0ZWQuPGJyIC8+MTMuIENhbGwgcmVtb3ZlIEFQSSBmb3IgZGlmZmVyZW50IHVpZCwgdGhlbiBjcmVhdGVkLjxiciAvPjE0LiBSZW1vdmUgdGhlIGNyZWF0ZWQgVUlEL0RhdGEgcGFpci48YnIgLz4xNS4gUmVtb3ZlIHRoZSBzdHJheSB1aWQuPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVSUQgdmFsdWUgdXNlZCBhcmUgNSwgNiwgNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9zMDAyIHwgT3ZlcndyaXRpbmcgZGF0YSBmb3IgYXNzZXQgY3JlYXRlZCB3aXRoPGJyIC8+IFdSSVRFX09OQ0UgZmxhZyAgICAgICAgICAgICAgfCBwc2FfcHNfc2V0PGJyIC8+cHNhX3BzX3JlbW92ZTxiciAvPiB8IFBTQV9QU19FUlJPUl9XUklURV9PTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuICBTZXQgdmFsaWQgVUlEL2RhdGEgdmFsdWUgcGFpciAsIHdpdGggY3JlYXRlIGZsYWcgdmFsdWUgbm9uZS48YnIgLz4yLiBDYWxsIGdldCBhbmQgZ2V0X2luZm8gQVBJIHRvIHZhbGlkYXRlIHRoZSBkYXRhLCBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCBkYXRhLjxiciAvPjMuIENhbGwgc2V0IEFQSSBhZ2FpbiB3aXRoIHNhbWUgdWlkIGFuZCBjcmVhdGUgZmxhZyAgUFNBX1BTX1dSSVRFX09OQ0VfRkxBRy48YnIgLz40LiBDYWxsIGdldCBhbmQgZ2V0X2luZm8gQVBJIHRvIHZhbGlkYXRlIHRoZSBkYXRhLCBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCBkYXRhIGlzIG5vdCBjaGFuZ2VkIGFmdGVyIHNlY29uZCBzZXQgb3BlcmF0aW9uPGJyIC8+NS4gVHJ5IHRvIHJlbW92ZSB0aGUgVUlEL2RhdGEgcGFpci48YnIgLz42LiBDcmVhdGUgbmV3IFVJRC9kYXRhIHZhbHVlIHBhaXIsIHdpdGggY3JlYXRlIGZsYWcgUFNBX1BTX1dSSVRFX09OQ0VfRkxBRy48YnIgLz43LiBUcnkgdG8gcmVtb3ZlIHRoZSBjcmVhdGVkIFVJRC48YnIgLz44LiBDYWxsIGdldCBhbmQgZ2V0X2luZm8gQVBJIHRvIHZhbGlkYXRlIHRoZSBkYXRhLCBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCBkYXRhLjxiciAvPjkuIEFnYWluIGNhbGwgU0VUIHdpdGggc2FtZSBVSUQgLCBjcmVhdGUgZmxhZyBQU0FfUFNfV1JJVEVfT05DRV9GTEFHIGJ1dCBkaWZmZXJlbnQgZGF0YSBsZW5ndGguPGJyIC8+MTAuIFRyeSB0byByZW1vdmUgdGhlIFVJRCwgUFNBX1BTX0VSUk9SX1dSSVRFX09OQ0UgZXJyb3Igc2hvdWxkIGJlIHJldHVybmVkLjxiciAvPjExLiBDYWxsIGdldCBhbmQgZ2V0X2luZm8gQVBJIHRvIHZhbGlkYXRlIHRoZSBkYXRhLCBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCBkYXRhLjxiciAvPiB8IFVJRCB2YWx1ZSB1c2VkIGFyZSAxIGFuZCAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X3MwMDMgfCBFeGhhdXN0IHN0b3JhZ2Ugc3BhY2UgfCAgcHNhX3BzX3NldDxiciAvPiAgICAgIHwgIFBTQV9QU19FUlJPUl9JTlNVRkZJQ0lFTlRfU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIENyZWF0ZSBVSUQvZGF0YSBwYWlycywgd2l0aCBkYXRhX2xlbiAyNTYgYnl0ZXMuIERvIHRoaXMgd2l0aCBpbmNyZW1lbnRpbmcgdWlkIHZhbHVlcyB0aWxsIHdlIGhhdmUgSU5TVUZGSUNFTlRfU1BBQ0UuPGJyIC8+Mi4gUmVtb3ZlIGFsbCB0aGUgVUlEL2RhdGEgcGFpcnMgY3JlYXRlZC48YnIgLz4zLiBSZXBlYXQgdGhlIHN0ZXBzIG9uY2UgbW9yZSwgdG8gY2hlY2sgYWxsIHByZXZpb3VzIHVpZCBhcmUgcmVtb3ZlZCBzdWNjZXNzZnVsbHkuPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVSUQgdmFsdWUgc3RhcnRzIGZyb20gNSBhbmQga2VlcCBvbiBpbmNyZW1lbnRpbmcgdGlsbCBhbGwgc3BhY2UgaXMgZXhoYXVzdGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfczAwNCB8IE92ZXJ3cml0aW5nIGRhdGEgZm9yIGFzc2V0IGNyZWF0ZWQgd2l0aG91dDxiciAvPiBXUklURV9PTkNFIGZsYWcgICAgICAgICAgICAgICAgICAgfCBwc2FfcHNfc2V0PGJyIC8+cHNhX3BzX2dldDxiciAvPnBzYV9wc19nZXRfaW5mbzxiciAvPnBzYV9wc19yZW1vdmU8YnIgLz4gIHwgUFNBX1BTX1NVQ0NFU1MgICB8IDEuIFNldCBhIHZhbGlkIHVpZC9kYXRhIHBhaXIuPGJyIC8+Mi4gVmFsaWRhdGUgdGhlIGRhdGEgdXNpbmcgZ2V0IGFwaS48YnIgLz4zLiBDaGFuZ2UgdGhlIGRhdGEgbGVuZ3RoIHRvIGhhbGYgb2YgcHJldmlvdXMuPGJyIC8+NC4gQ2FsbCBHRVQgYXBpIHdpdGggb3JpZ2luYWwgZGF0YSBsZW5ndGggLCBlcnJvciBzaG91bGQgYmUgcmV0dXJuZWQgYW5kIGFsc28gdGhlIHJldHVybiBidWZmZXIgc2hvdWxkIGJlIGVtcHR5LjxiciAvPjUuIENhbGwgR0VUIGFwaSB3aXRoIGNvcnJlY3QgZGF0YV9sZW4gYW5kIHZhbGlkYXRlIHRoZSBkYXRhIHJlY2VpdmVkLjxiciAvPjYuIENoZWNrIG9sZCBkYXRhIGNhbm5vdCBiZSBhY2Nlc3NlZC48YnIgLz43LiBDYWxsIFJFTU9WRSBhcGkgdG8gZGVsZXRlIHRoZSBVSUQvZGF0YSBwYWlyLjxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVSUQgdmFsdWUgdXNlZCBpcyA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9zMDA1IHwgR2V0LCBnZXRfaW5mbyBhbmQgcmVtb3ZlIEFQSSBjYWxsIGZvciB2YWxpZCBhc3Nlc3QgICAgICAgICAgICAgICAgICAgICB8IHBzYV9wc19zZXQ8YnIgLz5wc2FfcHNfZ2V0PGJyIC8+cHNhX3BzX2dldF9pbmZvPGJyIC8+cHNhX3BzX3JlbW92ZTxiciAvPiB8IFBTQV9QU19TVUNDRVNTICB8IDEuIFNldCB2YWxpZCBVSUQvZGF0YSBwYWlyIHdpdGggdmFyeWluZyB1aWQgYW5kIGRhdGFfbGVuLjxiciAvPjIuIENhbGwgR0VUIGFwaSBhbmQgdmFsaWRhdGUgdGhlIHNldCBkYXRhLjxiciAvPjMuIENhbGwgR0VUIGluZm8gYXBpIGFuZCB2YWxpZGF0ZSB0aGUgZGF0YSBhdHRyaWJ1dGVzLjxiciAvPjQuIENhbGwgUkVNT1ZFIGFwaSB0byBkZWxldGUgdGhlIFVJRC9kYXRhIHBhaXIuPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFVJRCB2YWx1ZSB1c2VkIGFyZSA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X3MwMDYgfCBTdG9yYWdlIGFzc2V0IGNyZWF0aW9uIHdpdGggdW5zdXBwb3J0ZWQgICAgfCBwc2FfcHNfc2V0PGJyIC8+ICAgICB8IFBTQV9QU19FUlJPUl9GTEFHU19OT1RfU1VQUE9SVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuICBDYWxsIHRoZSBTRVRfSU5GTyB3aXRoIG1pbmltdW0gZmxhZyB2YWx1ZSB0byBtYXggZmxhZyB2YWx1ZS48YnIgLz4yLiBDYWxsIEdFVF9JTkZPIGFwaSBhbmQgdmFsaWRhZSB0aGUgZmxhZyB2YWx1ZS48YnIgLz4zLiBSZW1vdmUgdGhlIHVpZC9kYXRhIHBhaXIuPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIHZhbHVlIHVzZWQgaXMgNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X3MwMDcgfCBHZXQgQVBJIGNhbGwgd2l0aCBpbnZhbGlkIGxlbmd0aCB8IHBzYV9wc19nZXQ8YnIgLz4gfCBQU0FfUFNfRVJST1JfSU5DT1JSRUNUX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEuIENyZWF0ZSB2YWxpZCB1aWQvZGF0YSBwYWlyLjxiciAvPjIuIEluY3JlYXNlIHRoZSBsZW5ndGggb2Ygc3RvcmFnZS48YnIgLz4zLiBUcnkgdG8gYWNjZXNzIHRoZSBvbGQgbGVuZ3RoIHVzaW5nIGdldCBhcGkuPGJyIC8+NC4gVHJ5IHRvIGFjY2VzcyB3aXRoIHZhbGlkIGxlbmd0aCBsZXNzIHRoYW4gc3RvcmVkIHNpemUuPGJyIC8+NS4gRGVjcmVhc2UgdGhlIGxlbmd0aCBvZiBzdG9yYWdlLjxiciAvPjYuIFRyeSB0byBhY2Nlc3MgdGhlIG9sZCBsZW5ndGguPGJyIC8+Ny4gUmVtb3ZlIHRoZSB1aWQuPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIHZhbHVlIHVzZWQgaXMgNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCB0ZXN0X3MwMDggfCBHZXQgQVBJIGNhbGwgd2l0aCBpbnZhbGlkIG9mZnNldCAgICAgICAgICB8IHBzYV9wc19nZXQ8YnIgLz4gICAgICB8IFBTQV9QU19FUlJPUl9JTkNPUlJFQ1RfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS4gU2V0IHZhbGlkIFVJRC9kYXRhIHBhaXIuPGJyIC8+Mi4gQ2FsbCBHRVQgYXBpIHdpdGggdmFsaWQgb2Zmc2V0IGFuZCBvZmZzZXQgKyBkYXRhX2xlbiBlcXVhbCB0byBzdG9yZWQgZGF0YSBzaXplLjxiciAvPjMuIENhbGwgR0VUIGFwaSB3aXRoIHZhbGlkIG9mZnNldCBhbmQgb2Zmc2V0ICsgZGF0YV9sZW4gbGVzcyB0aGFuIHN0b3JlZCBkYXRhIHNpemUuPGJyIC8+NC4gQ2FsbCBnZXQgYXBpIHdpdGggaW52YWxpZCBvZmZzZXQuPGJyIC8+NS4gQ2FsbCBnZXQgYXBpIHdpdGggemVybyBvZmZzZXQgLCBidXQgZGF0YSBsZW4gZ3JlYXRlciB0aGFuIGRhdGEgc2l6ZS48YnIgLz42LiBSZW1vdmUgdGhlIHVpZC48YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFVJRCB2YWx1ZSB1c2VkIGlzICA1IHwKK3wgdGVzdF9zMDA5IHwgQVBJIGNhbGwgd2l0aCBOVUxMIHBvaW50ZXIgYW5kIHplcm8gbGVuZ3RoICAgICAgICAgICAgICB8IHBzYV9wc19nZXQ8YnIgLz5wc2FfcHNfc2V0PGJyIC8+cHNhX3BzX2dldF9pbmZvPGJyIC8+IHwgUFNBX1BTX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgIHwgMS4gQ2FsbCB0aGUgU0VUIEFQSSB3aXRoIE5VTEwgcG9pbnRlciBhbmQgZGF0YV9sZW4gemVybyA8YnIgLz4yLiBWYWxpZGF0ZSB1c2luZyBnZXRfaW5mbyBhcGkgc3RvcmFnZSBzaG91bGQgYmUgcHJlc2VudC48YnIgLz4zLiBDYWxsIGdldCBBUEkgd2l0aCBOVUxMIHBvaW50ZXIuPGJyIC8+NC4gUmVtb3ZlIHRoZSBVSUQuPGJyIC8+NS4gQ2FsbCBnZXRfaW5mbyBBUEkgdG8gdmFsaWRhdGUgc3RvcmFnZSBpcyByZW1vdmVkLjxiciAvPjYuIFNldCBzdG9yYWdlIGVudGl0eSB3aXRoIHZhbGlkIHdyaXRlX2J1ZmZlciAsIGJ1dCBsZW5ndGggemVyby48YnIgLz43LiBDYWxsIGdldF9pbmZvIEFQSSB0byB2YWxpZGF0ZSBzdG9yYWdlIGF0dHJpYnV0ZXMuPGJyIC8+OC4gQ2FsbCBnZXRfaW5mbyBhcGkgd2l0aCBOVUxMIHBvaW50ZXIgYW5kIHZhbGlkIHVpZC48YnIgLz45LiBSZW1vdmUgdGhlIHVpZC48YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVSUQgdmFsdWUgdXNlZCBpcyA1IDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9zMDEwIHwgU3RvcmFnZSBhc3Nlc3QgY3JlYXRpb24gd2l0aCBVSUQgdmFsdWUgMCA8YnIgLz4gICAgICAgICAgICB8IHBzYV9wc19zZXQ8YnIgLz4gIHwgICAgUFNBX1BTX0VSUk9SX0lOVkFMSURfQVJHVU1FTlRTPGJyIC8+ICAgICAgICAgICAgICAgIHwgMS4gQ2FsbCB0aGUgU0VUIEFQSSB3aXRoIFVJRCB2YWx1ZSAwLjxiciAvPjIuIENoZWNrIHRoYXQgc3RvcmFnZSBjcmVhdGlvbiBmYWlscy48YnIgLz4gfCBVSUQgdmFsdWUgdXNlZCBpcyAwIDxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdGVzdF9wMDExIHwgU2V0X2V4dGVuZGVkIEFQSSdzIGNhbGwgZm9yIDxiciAvPiBub24tZXhpc3RlbnQgYW5kIHJlbW92ZWQgYXNzZXN0ICAgICAgICAgICAgIHwgcHNhX3BzX3NldF9leHRlbmRlZDxiciAvPiAgIHwgUFNBX1BTX0VSUk9SX1VJRF9OT1RfRk9VTkQ8YnIgLz4gICAgICAgICAgICAgICAgICAgfCAxLiBDYWxsIHRoZSBTRVQgRXh0ZW5kZWQgQVBJIHdoZW4gbm8gdWlkIHByZXNlbnQuPGJyIC8+Mi4gQ3JlYXRlIGEgdmFsaWQgc3RvcmFnZSB1c2luZyBzZXQuIDxiciAvPiAzLiBDYWxsIGNyZWF0ZSBhcGkgd2l0aCBkaWZmZXJlbnQgbGVuZ3RoIGZvciBleGlzdGluZyB1aWQuPGJyIC8+IDQuIENhbGwgY3JlYXRlIGFwaSB0byBzZXQgV1JJVEVfT05DRSBmbGFnLjxiciAvPiA1LiBWYWxpZGF0ZSBkYXRhIGF0dHJpYnV0ZXMgYXJlIG1haW50YWluZWQuPGJyIC8+Ni4gUmVtb3ZlIHRoZSB1aWQuPGJyIC8+IDcuIENyZWF0ZSB2YWxpZCBzdG9yYWdlIHVzaW5nIGNyZWF0ZSBhcGkuPGJyIC8+IDguIFRyeSB0byBjaGFuZ2UgbGVuZ3RoIHVzaW5nIGNyZWF0ZSBhcGkuPGJyIC8+IDkuIFZhbGlkYXRlIHN0b3JhZ2UgaXMgZW1wdHkuPGJyIC8+IDEwLiBBZ2FpbiBjYWxsIGNyZWF0ZSBhcGkgd2l0aCBvcmlnaW5hbCBwYXJhbWV0ZXJzLjxiciAvPjExLiBSZW1vdmUgdGhlIHVpZC48YnIgLz4gMTIuIENoZWNrIG5vIGR1cGxpY2F0ZSBlbnRyeSBwcmVzZW50LjxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIHZhbHVlIHVzZWQgaXMgNSA8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHRlc3RfcDAxMiB8ICBTZXRfZXh0ZW5kZWQgQVBJJ3MgY2FsbCA8YnIgLz4gd2l0aCBpbnZhbGlkIG9mZnNldCAgICAgICAgICAgfCBwc2FfcHNfc2V0X2V4dGVuZGVkPGJyIC8+ICAgfCBQU0FfUFNfRVJST1JfT0ZGU0VUX0lOVkFMSUQgPGJyIC8+ICAgICAgICAgICAgICAgICAgIHwgMS4gQ3JlYXRlIGEgdmFsaWQgc3RvcmFnZSB1c2luZyBzZXQuPGJyIC8+IDIuIFNldCBkYXRhIG9uIGZpcnN0IGhhbGYgb2YgYnVmZmVyLjxiciAvPiAzLiBUcnkgdG8gc2V0IGRhdGEgYXQgaW5jb3JyZWN0IG9mZnNldCArbGVuZ3RoLiA8YnIgLz4gNC4gVHJ5IHRvIHNldCBkYXRhIGF0IGluY29ycmVjdCBvZmZzZXQuPGJyIC8+NS4gVHJ5IHRvIHNldCBhdCBjb3JyZWN0IG9mZnNldCBidXQgemVybyBsZW5ndGggYnVmZmVyLjxiciAvPjYuIFRyeSB0byBzZXQgZGF0YSBhdCBpbmNvcnJlY3QgbGVuZ3RoIGFuZCB2YWxpZCBvZmZzZXQuPGJyIC8+IDcuIE92ZXJ3cml0ZSB0aGUgc3RvcmFnZSB1c2luZyBzZXQgYXBpLjxiciAvPiA4LiBWYWxpZGF0ZSBkYXRhIGlzIGNvcnJlY3RseSB3cml0dGVuLjxiciBcPiA5LiBDYWxsIHNldF9leHRlbmRlZCB3aXRoIE5VTEwgd3JpdGUgYnVmZmVyLjxiciAvPiAxMC4gT3ZlcndyaXRlIHN0b3JhZ2UgdXNpbmcgc2V0X2V4dGVuZGVkIGFwaS48YnIgLz4gMTEuIFJlbW92ZSB0aGUgdWlkLjxiciAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIHZhbHVlIHVzZWQgaXMgNiA8YnIgLz4KK3wgdGVzdF9wMDEzIHwgIENyZWF0ZSBhbmQgc2V0X2V4dGVuZGVkIEFQSSBjYWxsIGZvciB2YWxpZCBhc3Nlc3QgICAgfCBwc2FfcHNfc2V0X2V4dGVuZGVkPGJyIC8+IHBzYV9wc19jcmVhdGUgICAgICB8IFBTQV9QU19TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLiAgQ3JlYXRlIFN0b3JhZ2Ugb2YgemVybyBsZW5ndGggdXNpbmcgY3JlYXRlLjxiciAvPjIuIFRyeSB0byBzZXQgc29tZSBkYXRhIGluIHRoZSBzdG9yYWdlIGNyZWF0ZWQuPGJyIC8+My4gVmFsaWRhdGUgdGhlIHN0b3JhZ2UgYXR0cmlidXRlcy48YnIgLz4gNC4gUmVtb3ZlIHRoZSBzdG9yYWdlLjxiciAvPiA1LiBDcmVhdGUgYSB2YWxpZCBzdG9yYWdlIHdpdGggbm9uLXplcm8gbGVuZ3RoLjxiciAvPiA2LiBTZXQgZGF0YSBpbiB0aGUgYnVmZmVyLjxiciAvPiA3LiBWYWxpZGF0ZSB0aGUgZGF0YSBhdHRyaWJ1dGVzLjxiciAvPiA4LiBPdmVyd3JpdGUgZGF0YSB1c2luZyBzZXQgYXBpLjxiciAvPiA5LiBWYWxpZGF0ZSB0aGUgZGF0YS48YnIgLz4gMTAuIENhbGwgY3JlYXRlIGFwaSBmb3IgZXhpc3RpbmcgdWlkIHdpdGggc2FtZSBwYXJhbWV0ZXJzLjxiciAvPiAxMS4gUmVtb3ZlIHRoZSB1aWQuPGJyIC8+IDEyLiBDaGVjayB3aXRoIHNldF9leHRlbmRlZCBubyBkdXBsaWNhdGUgdWlkIGV4aXN0cy48YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIHZhbHVlIHVzZWQgaXMgNAorfCB0ZXN0X3AwMTQgfCBDcmVhdGUgYW5kIHNldF9leHRlbmRlZCBBUEkgY2FsbDxiciAvPiB3aGVuIEFQSSdzIG5vdCBzdXBwb3J0ZWQgICAgfCBwc2FfcHNfY3JlYXRlPGJyIC8+cHNhX3BzX3NldF9leHRlbmRlZDxiciAvPiAgICAgICB8IFBTQV9QU19FUlJPUl9OT1RfU1VQUE9SVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCZWxvdyBTdGVwcyB3aWxsIGJlIHJ1biBvbmx5IGlmIG9wdGlvbmFsIEFQSSBhcmUgbm90IHN1cHBvcnRlZC48YnIgLz4xLiBDcmVhdGUgQVBJIGNhbGwgc2hvdWxkIGZhaWwuPGJyIC8+Mi4gQ2hlY2sgdGhlIFVJRCBzaG91bGQgbm90IGV4aXN0LjxiciAvPiAzLiBDcmVhdGUgc3RvcmFnZSB1c2luZyBzZXQgQVBJLjxiciAvPiA0LiBUcnkgdG8gcGFydGlhbGx5IHdyaXRlIHVzaW5nIHNldF9leHRlbmRlZCBBUEkuPGJyIC8+IDUuIFZhbGlkYXRlIGRhdGEgaXMgbm90IG1vZGlmaWVkLjxiciAvPiA2LiBSZW1vdmUgdGhlIHVpZC48YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIHZhbHVlIHVzZWQgaXMgNQorfCB0ZXN0X3AwMTUgfCBDcmVhdGUgQVBJIGNhbGwgd2l0aDxiciAvPiBXUklURV9PTkNFIGZsYWcgICAgfCBwc2FfcHNfY3JlYXRlPGJyIC8+ICAgICAgICAgICAgICB8UFNBX1BTX0VSUk9SX0ZMQUdTX05PVF9TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQmVsb3cgU3RlcCB3aWxsIGJlIHJ1biBvbmx5IGlmIG9wdGlvbmFsIEFQSSBhcmUgc3VwcG9ydGVkLjxiciAvPjEuIENyZWF0ZSBBUEkgY2FsbCB3aXRoIFdSSVRFX09OQ0UgZmxhZyBzaG91bGQgZmFpbC48YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVUlEIHZhbHVlIHVzZWQgaXMgNQorfCBOQSB8IFN0b3JhZ2UgRmFpbHVyZSAgPGJyIC8+ICAgICAgICAgICAgfCBOQTxiciAvPiAgICB8IFBTQV9QU19FUlJPUl9TVE9SQUdFX0ZBSUxVUkUgPGJyIC8+fCAgICAxLiBUaGUgZmFpbHVyZSBjYXVzZSB3aWxsIGRlcGVuZCBvbiB0aGUgdW5kZXJseWluZyA8YnIgLz4gcGxhdGZvcm0gYW5kIHZhcnkgZm9yIGVhY2ggaW1wbGVtZW50YXRpb24uPGJyIC8+IEl0IGlzIHNraXBwZWQgaW4gY3VycmVudCBzdWl0ZSAgPGJyIC8+IHwgTkEgPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBOQSB8IE9wZXJhdGlvbiBGYWlsdXJlICA8YnIgLz4gICAgICAgICAgICB8IE5BPGJyIC8+ICAgIHwgUFNBX1BTX0VSUk9SX09QRVJBVElPTl9GQUlMRUQgPGJyIC8+fCAgICAxLiBUaGUgZmFpbHVyZSBjYXVzZSB3aWxsIGRlcGVuZCBvbiB0aGUgdW5kZXJseWluZyA8YnIgLz4gcGxhdGZvcm0gYW5kIHZhcnkgZm9yIGVhY2ggaW1wbGVtZW50YXRpb24uPGJyIC8+IEl0IGlzIHNraXBwZWQgaW4gY3VycmVudCBzdWl0ZSAgPGJyIC8+IHwgTkEgPGJyIC8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBOQSB8IEF1dGhlbnRpY2F0aW9uIEZhaWx1cmUgPGJyIC8+ICAgICAgICAgICAgfCBOQTxiciAvPiAgICB8IFBTQV9QU19FUlJPUl9BVVRIX0ZBSUxFRCA8YnIgLz58ICAgIDEuIFRoZSBmYWlsdXJlIGNhdXNlIHdpbGwgZGVwZW5kIG9uIHRoZSB1bmRlcmx5aW5nIDxiciAvPiBwbGF0Zm9ybSBhbmQgdmFyeSBmb3IgZWFjaCBpbXBsZW1lbnRhdGlvbi48YnIgLz4gSXQgaXMgc2tpcHBlZCBpbiBjdXJyZW50IHN1aXRlICA8YnIgLz4gfCBOQSA8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IE5BIHwgRGF0YSBDb3JydXB0aW9uICA8YnIgLz4gICAgICAgICAgICB8IE5BPGJyIC8+ICAgIHwgUFNBX1BTX0VSUk9SX0RBVEFfQ09SUlVQVCA8YnIgLz58ICAgIDEuIFRoZSBmYWlsdXJlIGNhdXNlIHdpbGwgZGVwZW5kIG9uIHRoZSB1bmRlcmx5aW5nIDxiciAvPiBwbGF0Zm9ybSBhbmQgdmFyeSBmb3IgZWFjaCBpbXBsZW1lbnRhdGlvbi48YnIgLz4gSXQgaXMgc2tpcHBlZCBpbiBjdXJyZW50IHN1aXRlICA8YnIgLz4gfCBOQSA8YnIgLz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisKICMjIExpY2Vuc2UKIEFybSBQU0EgdGVzdCBzdWl0ZSBpcyBkaXN0cmlidXRlZCB1bmRlciBBcGFjaGUgdjIuMCBMaWNlbnNlLgogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZG9jcy9zd19yZXF1aXJlbWVudHMubWQgYi9hcGktdGVzdHMvZG9jcy9zd19yZXF1aXJlbWVudHMubWQKaW5kZXggMzE1MDA0NC4uN2E3NDcyNSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2RvY3Mvc3dfcmVxdWlyZW1lbnRzLm1kCisrKyBiL2FwaS10ZXN0cy9kb2NzL3N3X3JlcXVpcmVtZW50cy5tZApAQCAtMSwyNCArMSwyMyBAQAogCi0jIEFyY2hpdGVjdHVyZSBUZXN0IFN1aXRlIFNvZnR3YXJlIHJlcXVpcmVtZW50cworIyBBcmNoaXRlY3R1cmUgVGVzdCBTdWl0ZSBTb2Z0d2FyZSBSZXF1aXJlbWVudHMKIAotIyMgUHJlcmVxdWlzaXRlCiBCZWZvcmUgc3RhcnRpbmcgdGhlIHRlc3Qgc3VpdGUgYnVpbGQsIGVuc3VyZSB0aGF0IHRoZSBmb2xsb3dpbmcgcmVxdWlyZW1lbnRzIGFyZSBtZXQ6IDxiciAvPgogCiAtIEhvc3QgT3BlcmF0aW5nIFN5c3RlbSAgICAgOiBVYnVudHUgMTYuMDQKLS0gU2NyaXB0aW5nIHRvb2xzICAgICAgICAgICA6IFBlcmwgNS4xMi4zCistIFNjcmlwdGluZyB0b29scyAgICAgICAgICAgOiBQZXJsIDUuMTIuMywgUHl0aG9uIDMuMS43CiAtIENvbXBpbGVyIHRvb2xjaGFpbiAgICAgICAgOiBHTlUgQXJtIEVtYmVkZGVkIFRvb2xjaGFpbiA2LjMuMSwgQXJtIENvbXBpbGVyIHY2LjcKIAotKk5vdGUqOiBUbyBjb21waWxlIFRlc3QgU3VpdGUgY29kZSwgYXQgbGVhc3Qgb25lIG9mIHRoZSBhYm92ZSBzdXBwb3J0ZWQgY29tcGlsZXIgdG9vbGNoYWlucwotICAgICAgICBoYXZlIHRvIGJlIGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQgZW52aXJvbm1lbnQuCisqKk5vdGUqKjogVG8gY29tcGlsZSB0aGUgdGVzdCBzdWl0ZSBjb2RlLCBhdCBsZWFzdCBvbmUgb2YgdGhlIGFib3ZlIHN1cHBvcnRlZCBjb21waWxlciB0b29sY2hhaW5zCisgICAgICAgIG11c3QgYmUgYXZhaWxhYmxlIGluIHRoZSBidWlsZCBlbnZpcm9ubWVudC4KIAotIyMjIFNldHVwIGEgc2hlbGwgdG8gZW5hYmxlIGNvbXBpbGVyIHRvb2xjaGFpbiBhZnRlciBpbnN0YWxsYXRpb24KKyMjIyBTZXR0aW5nIHVwIGEgc2hlbGwgdG8gZW5hYmxlIGNvbXBpbGVyIHRvb2xjaGFpbiBhZnRlciBpbnN0YWxsYXRpb24KIAotVG8gaW1wb3J0IEdOVSBBcm0gaW4geW91ciBiYXNoIHNoZWxsIGNvbnNvbGU6CitUbyBpbXBvcnQgR05VIEFybSBpbiB5b3VyIGJhc2ggc2hlbGwgY29uc29sZSwgZXhlY3V0ZToKIH5+fgogZXhwb3J0IFBBVEg9PEdOVV9BUk1fUEFUSD4vYmluOiRQQVRICiB+fn4KIAotVG8gaW1wb3J0IEFybSBDb21waWxlciBpbiB5b3VyIGJhc2ggc2hlbGwgY29uc29sZToKK1RvIGltcG9ydCBBcm0gQ29tcGlsZXIgaW4geW91ciBiYXNoIHNoZWxsIGNvbnNvbGUsIGV4ZWN1dGU6CiB+fn4KIGV4cG9ydCBQQVRIPTxBUk1fQ09NUElMRVJfUEFUSD4vYmluOiRQQVRICiB+fn4KQEAgLTMwLDE1ICsyOSwyOCBAQAogZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS9BUk0tc29mdHdhcmUvcHNhLWFyY2gtdGVzdHMuZ2l0CiB+fn4KIAotIyMgQ2xvbmluZyBleHRlcm5hbCByZXBvCisjIyBDbG9uaW5nIHRoZSBleHRlcm5hbCByZXBvc2l0b3J5CiAKLVRvIGJ1aWxkIGluaXRpYWwgYXR0ZXN0YXRpb24gdGVzdHMsIFBTQSBBUElzIHRlc3Qgc3VpdGUgY2xvbmVzIGZvbGxvd2luZwotZ2l0IHJlcG8uIFRoZSBjbG9uaW5nIGlzIGF1dG9tYXRlZCBhcyBwYXJ0IG9mIHRoZSB0ZXN0IHN1aXRlCi1idWlsZCBzY3JpcHQgLi9zZXR1cC5zaDoKK1RvIGJ1aWxkIEluaXRpYWwgQXR0ZXN0YXRpb24gdGVzdHMsIHRoZSBQU0EgQVBJcyB0ZXN0IHN1aXRlIGNsb25lcyB0aGUgZm9sbG93aW5nCitnaXQgcmVwb3NpdG9yeS4gVGhlIGNsb25pbmcgaXMgYXV0b21hdGVkIGFzIHBhcnQgb2YgdGhlIHRlc3Qgc3VpdGUKK2J1aWxkIHNjcmlwdCAqKi4vc2V0dXAuc2gqKjoKIAogfn5+CiBnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL2xhdXJlbmNlbHVuZGJsYWRlL1FDQk9SLmdpdCAuL3BsYXRmb3JtL3RhcmdldHMvPHBsYXRmb3JtX25hbWU+L25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9leHQKLWNkIC4vcGxhdGZvcm0vdGFyZ2V0cy88cGxhdGZvcm1fbmFtZT4vbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL2V4dDsgZ2l0IGNoZWNrb3V0IDAxMTY4ZWYzZjIwZTgxZDVkYjFlYmQwY2ZhOWE3MDA1NWVlNWIxNTUKK2NkIC4vcGxhdGZvcm0vdGFyZ2V0cy88cGxhdGZvcm1fbmFtZT4vbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL2V4dDsgZ2l0IGNoZWNrb3V0IGRhNTMyMjdkYjE0ODhkZGUwOTUyYmRmZjY2YzNkOTA0ZGNlMjcwYjMKK35+fgorCisjIyBUbyBidWlsZCBvbiBDeWd3aW4oMzItYml0KQorCitUbyBidWlsZCB0ZXN0IHN1aXRlIG9uIEN5Z3dpbiBlbnN1cmUgYWxsIHRoZSBhYm92ZSBwcmVyZXF1aXNpdGUgaW4gcGxhY2UuCisKKyoqTm90ZSoqOiBEb3dubG9hZGluZyB0aGUgdGVzdCBzdWl0ZSBpbiBXaW5kb3cgcGxhdGZvcm0gY2FuIGhhdmUgZXh0cmEKK25ld2xpbmUgY2hhcnMgdGhhbiBVbml4LiBUaGVyZWZvcmUsIGl0IGlzIHJlY29tbWVuZGVkIHRvIGV4ZWN1dGUgdGhlCitmb2xsb3dpbmcgY29tbWFuZCB0byBjaGFuZ2UgdGhlIG5ld2xpbmUgY2hhciBmb3JtYXQgYmVmb3JlIHJ1bm5pbmcKK2FueSB0ZXN0IHN1aXRlIGNvbW1hbmQuPGJyIC8+CisKK35+fgorZG9zMnVuaXggLi90b29scy9zY3JpcHRzL3NldHVwLnNoCiB+fn4KIAogIyMgTGljZW5zZQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL1JFQURNRS5tZCBiL2FwaS10ZXN0cy9mZi9SRUFETUUubWQKaW5kZXggZDI0YmVmMy4uOGM4MjA4NiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL1JFQURNRS5tZAorKysgYi9hcGktdGVzdHMvZmYvUkVBRE1FLm1kCkBAIC0xLDQzICsxLDM1IEBACiAKLSMgUFNBIEZpcm13YXJlIEZyYW1ld29yayA6IEFyY2hpdGVjdHVyZSBUZXN0IFN1aXRlCisjIFBTQSBGaXJtd2FyZSBGcmFtZXdvcmsgQXJjaGl0ZWN0dXJlIFRlc3QgU3VpdGUKIAotIyMgSW50cm9kdWN0aW9uCisjIyBQU0EgRmlybXdhcmUgRnJhbWV3b3JrCiAKLSMjIyBQU0EgRmlybXdhcmUgRnJhbWV3b3JrIChQU0EtRkYpCi0KLVRoZSBQU0EtRkYgZGVmaW5lcyBhIHN0YW5kYXJkIGludGVyZmFjZSBhbmQgZnJhbWV3b3JrLCB0byBpc29sYXRlIHRydXN0ZWQgZnVuY3Rpb25hbGl0eSB3aXRoaW5jb25zdHJhaW5lZCBJb1QgZGV2aWNlcy4KKypQU0EgRmlybXdhcmUgRnJhbWV3b3JrKiAoUFNBLUZGKSBkZWZpbmVzIGEgc3RhbmRhcmQgaW50ZXJmYWNlIGFuZCBmcmFtZXdvcmsgdG8gaXNvbGF0ZSB0cnVzdGVkIGZ1bmN0aW9uYWxpdHkgd2l0aGluIGNvbnN0cmFpbmVkIElvVCBkZXZpY2VzLgogCiBUaGUgZnJhbWV3b3JrIHByb3ZpZGVzOgogLSBBcmNoaXRlY3R1cmUgdGhhdCBkZXNjcmliZXMgaXNvbGF0ZWQgcnVudGltZSBlbnZpcm9ubWVudHMgKHBhcnRpdGlvbnMpIGZvciB0cnVzdGVkIGFuZCB1bnRydXN0ZWQgZmlybXdhcmUuCiAtIEEgc3RhbmRhcmQgbW9kZWwgZm9yIGRlc2NyaWJpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgYW5kIHJlc291cmNlcyBpbiBlYWNoIHBhcnRpdGlvbi4KLS0gQSBzZWN1cmUgSVBDIGludGVyZmFjZSB0byByZXF1ZXN0IHNlcnZpY2VzIGZyb20gb3RoZXIgcGFydGl0aW9ucy4KLS0gQSBtb2RlbCB0aGF0IGRlc2NyaWJlcyBob3cgdGhlIHBhcnRpdGlvbnMgY2FuIGludGVyYWN0IHdpdGggb25lIGFub3RoZXIsIGFzIHdlbGwgYXMgdGhlIGhhcmR3YXJlIGFuZCB0aGUgZmlybXdhcmUgZnJhbWV3b3JrIGltcGxlbWVudGF0aW9uLCBpdHNlbGYuCi0tIEEgc3RhbmRhcmQgaW50ZXJmYWNlcyBmb3IgdGhlIFBTQSBSb1QgU2VydmljZXMuCistIEEgU2VjdXJlIElQQyBpbnRlcmZhY2UgdG8gcmVxdWVzdCBzZXJ2aWNlcyBmcm9tIG90aGVyIHBhcnRpdGlvbnMuCistIEEgbW9kZWwgdGhhdCBkZXNjcmliZXMgaG93IHRoZSBwYXJ0aXRpb25zIGNhbiBpbnRlcmFjdCB3aXRoIG9uZSBhbm90aGVyLCBhcyB3ZWxsIGFzIHRoZSBoYXJkd2FyZSBhbmQgdGhlIGZpcm13YXJlIGZyYW1ld29yayBpbXBsZW1lbnRhdGlvbiBpdHNlbGYuCistIEEgc3RhbmRhcmQgaW50ZXJmYWNlIGZvciB0aGUgUFNBIFJvVCBzZXJ2aWNlcyBzdWNoIGFzIFBTQSBSb1QgbGlmZWN5Y2xlIHNlcnZpY2UuCiAKLVRoaXMgc3BlY2lmaWNhdGlvbiBlbmFibGVzIHRoZSBkZXZlbG9wbWVudCBvZiBzZWN1cmUgZmlybXdhcmUgZnVuY3Rpb25hbGl0eSB0aGF0IGNhbiBiZSByZXVzZWQgb24gZGlmZmVyZW50IGRldmljZXMgdGhhdCB1c2UgYW55IGNvbmZvcm1pbmcgaW1wbGVtZW50YXRpb24gb2YgdGhlIEZpcm13YXJlIEZyYW1ld29yay4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGRvd25sb2FkIHRoZSBbUFNBIEZGIFNwZWNpZmljYXRpb25dKGh0dHBzOi8vcGFnZXMuYXJtLmNvbS9wc2EtcmVzb3VyY2VzLWZmLmh0bWw/X2dhPTIuOTczODg1NzUuMTIyMDIzMDEzMy4xNTQwNTQ3NDczLTE1NDA3ODQ1ODUuMTU0MDU0NzM4MikKK1RoaXMgc3BlY2lmaWNhdGlvbiBlbmFibGVzIHRoZSBkZXZlbG9wbWVudCBvZiBTZWN1cmUgZmlybXdhcmUgZnVuY3Rpb25hbGl0eSB3aGljaCBjYW4gYmUgcmV1c2VkIG9uIGRpZmZlcmVudCBkZXZpY2VzIHRoYXQgdXNlIGFueSBjb25mb3JtaW5nIGltcGxlbWVudGF0aW9uIG9mIHRoZSBGaXJtd2FyZSBGcmFtZXdvcmsuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBkb3dubG9hZCB0aGUgW1BTQS1GRiBTcGVjaWZpY2F0aW9uXShodHRwczovL3BhZ2VzLmFybS5jb20vcHNhLXJlc291cmNlcy1mZi5odG1sP19nYT0yLjk3Mzg4NTc1LjEyMjAyMzAxMzMuMTU0MDU0NzQ3My0xNTQwNzg0NTg1LjE1NDA1NDczODIpLgogCi0jIyMgQXJjaGl0ZWN0dXJlIFRlc3QgU3VpdGUKKyMjIyBBcmNoaXRlY3R1cmUgdGVzdCBzdWl0ZQogCi1UaGUgQXJjaGl0ZWN0dXJlIFRlc3QgU3VpdGUgaXMgYSBzZXQgb2YgZXhhbXBsZXMgb2YgdGhlIGludmFyaWFudCBiZWhhdmlvdXJzIHRoYXQgYXJlIHNwZWNpZmllZCBieSB0aGUgUFNBIEZGIFNwZWNpZmljYXRpb24uIFVzZSB0aGlzIHN1aXRlIHRvIHZlcmlmeSB0aGF0IHRoZXNlIGJlaGF2aW91cnMgYXJlIGltcGxlbWVudGVkIGNvcnJlY3RseSBpbiB5b3VyIHN5c3RlbS4KK1RoZSBhcmNoaXRlY3R1cmUgdGVzdCBzdWl0ZSBpcyBhIHNldCBvZiBleGFtcGxlcyBvZiB0aGUgaW52YXJpYW50IGJlaGF2aW9ycyB0aGF0IGFyZSBzcGVjaWZpZWQgYnkgdGhlIFBTQS1GRiBzcGVjaWZpY2F0aW9uLiBVc2UgdGhpcyBzdWl0ZSB0byB2ZXJpZnkgd2hldGhlciB0aGVzZSBiZWhhdmlvcnMgYXJlIGltcGxlbWVudGVkIGNvcnJlY3RseSBpbiB5b3VyIHN5c3RlbS4gVGhpcyBzdWl0ZSBjb250YWlucyBzZWxmLWNoZWNraW5nIGFuZCBwb3J0YWJsZSBDLWJhc2VkIHRlc3RzIHdpdGggZGlyZWN0ZWQgc3RpbXVsdXMuIFRoZSB0ZXN0cyBhcmUgYXZhaWxhYmxlIGFzIG9wZW4gc291cmNlLiBUaGUgdGVzdHMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGFic3RyYWN0aW9uIGxheWVycyBhcmUgYXZhaWxhYmxlIHdpdGggYW4gQXBhY2hlIHYyLjAgbGljZW5zZSBhbGxvd2luZyBmb3IgZXh0ZXJuYWwgY29udHJpYnV0aW9uLgogCi1UaGUgQXJjaGl0ZWN0dXJlIFRlc3QgU3VpdGUgY29udGFpbnMgdGhlIHRlc3RzIHRoYXQgYXJlIHNlbGYtY2hlY2tpbmcsIHBvcnRhYmxlIEMtYmFzZWQgdGVzdHMgd2l0aCBkaXJlY3RlZCBzdGltdWx1cy4KK1RoaXMgdGVzdCBzdWl0ZSBpcyBub3QgYSBzdWJzdGl0dXRlIGZvciBkZXNpZ24gdmVyaWZpY2F0aW9uLiBUbyByZXZpZXcgdGhlIHRlc3QgbG9ncywgQXJtIGxpY2Vuc2VlcyBjYW4gY29udGFjdCBBcm0gZGlyZWN0bHkgdGhyb3VnaCB0aGVpciBwYXJ0bmVyIG1hbmFnZXJzLgogCi1UaGUgdGVzdHMgYXJlIGF2YWlsYWJsZSBhcyBvcGVuIHNvdXJjZS4gVGhlIHRlc3RzIGFuZCB0aGUgY29ycmVzcG9uZGluZyBhYnN0cmFjdGlvbiBsYXllcnMgYXJlIGF2YWlsYWJsZSB3aXRoIGFuIEFwYWNoZSB2Mi4wIGxpY2Vuc2UgYWxsb3dpbmcgZm9yIGV4dGVybmFsIGNvbnRyaWJ1dGlvbi4gVGhpcyB0ZXN0IHN1aXRlIGlzIG5vdCBhIHN1YnN0aXR1dGUgZm9yIGRlc2lnbiB2ZXJpZmljYXRpb24uIFRvIHJldmlldyB0aGUgdGVzdCBsb2dzLCBBcm0gbGljZW5zZWVzIGNhbiBjb250YWN0IEFybSBkaXJlY3RseSB0aHJvdWdoIHRoZWlyIHBhcnRuZXIgbWFuYWdlcnMuCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBhcmNoaXRlY3R1cmUgdGVzdCBzdWl0ZSBzcGVjaWZpY2F0aW9uLCByZWZlciB0byB0aGUgW1ZhbGlkYXRpb24gTWV0aG9kb2xvZ3ldKC4uL2RvY3MvQXJtX1BTQV9BUElzX0FyY2hfVGVzdF9WYWxpZGF0aW9uX01ldGhvZG9sb2d5LnBkZikgZG9jdW1lbnQuCiAKLUZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEFyY2hpdGVjdHVyZSBUZXN0IFN1aXRlIHNwZWNpZmljYXRpb24sIHJlZmVyIHRoZSBbVmFsaWRhdGlvbiBNZXRob2RvbG9neV0oLi4vZG9jcy9Bcm1fUFNBX0FQSXNfQXJjaF9UZXN0X1ZhbGlkYXRpb25fTWV0aG9kb2xvZ3kucGRmKSBkb2N1bWVudC4KKyMjIFRlc3RzIHNjZW5hcmlvcwogCi0jIyBUZXN0cyBTY2VuYXJpb3MKLQotVGhlIG1hcHBpbmcgb2YgdGhlIHJ1bGVzIGluIHRoZSBzcGVjaWZpY2F0aW9uIHRvIHRoZSB0ZXN0IGNhc2VzIGFuZCB0aGUgc3RlcHMgZm9sbG93ZWQgaW4gdGhlIHRlc3RzIGFyZSBtZW50aW9uZWQgaW4gdGhlIFtTY2VuYXJpbyBkb2N1bWVudF0oLi4vZG9jcy8pIHByZXNlbnQgaW4gdGhlIGRvY3MvIGZvbGRlci4KK1RoZSBtYXBwaW5nIG9mIHRoZSBydWxlcyBpbiB0aGUgc3BlY2lmaWNhdGlvbiB0byB0aGUgdGVzdCBjYXNlcyBhbmQgdGhlIHN0ZXBzIGZvbGxvd2VkIGluIHRoZSB0ZXN0cyBhcmUgbWVudGlvbmVkIGluIHRoZSBbU2NlbmFyaW8gRG9jdW1lbnRdKC4uL2RvY3MvKSBwcmVzZW50IGluIHRoZSAqKmRvY3MvKiogZm9sZGVyLgogCiAKLSMjIEdldHRpbmcgU3RhcnRlZAorIyMgR2V0dGluZyBzdGFydGVkCiAKLUZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoZSBzdWJzZXF1ZW50IHNlY3Rpb25zIHRvIGdldCBhIGNvcHkgb2YgdGhlIHNvdXJjZSBjb2RlIG9uIHlvdXIgbG9jYWwgbWFjaGluZSBhbmQgYnVpbGQgdGhlIHRlc3RzLiA8YnIgLz4KLQotIyMjIFByZXJlcXVpc2l0ZQotCi1QbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIGFsbCByZXF1aXJlZCBzb2Z0d2FyZSBpbnN0YWxsZWQgYXMgZXhwbGFpbmVkIGluIHRoZSBbc29mdHdhcmUgcmVxdWlyZW1lbnRzXSguLi9kb2NzL3N3X3JlcXVpcmVtZW50cy5tZCkuCitGb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgc3Vic2VxdWVudCBzZWN0aW9ucyB0byBnZXQgYSBjb3B5IG9mIHRoZSBzb3VyY2UgY29kZSBvbiB5b3VyIGxvY2FsIG1hY2hpbmUgYW5kIGJ1aWxkIHRoZSB0ZXN0cy4gTWFrZSBzdXJlIHlvdSBoYXZlIGFsbCByZXF1aXJlZCBzb2Z0d2FyZSBpbnN0YWxsZWQgYXMgZXhwbGFpbmVkIGluIHRoZSBbU29mdHdhcmUgUmVxdWlyZW1lbnRzXSguLi9kb2NzL3N3X3JlcXVpcmVtZW50cy5tZCkuCiAKICMjIyBQb3J0aW5nIHN0ZXBzCiAKQEAgLTQ1LDY0ICszNyw2OSBAQAogCiAjIyMgQnVpbGQgc3RlcHMKIAotVG8gYnVpbGQgdGVzdCBzdWl0ZSBmb3IgYSBnaXZlbiBwbGF0Zm9ybSwgZXhlY3V0ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgorVG8gYnVpbGQgdGhlIHRlc3Qgc3VpdGUgZm9yIHlvdXIgdGFyZ2V0IHBsYXRmb3JtLCBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3RlcHMuCiAKLTEuIGNkIGFwaS10ZXN0cworMS4gRXhlY3V0ZSBgY2QgYXBpLXRlc3RzYC4KIAotMi4gVXNpbmcgeW91ciBzZWN1cmUgcGFydGl0aW9uIGJ1aWxkIHRvb2wsIHBhcnNlIGZvbGxvd2luZyB0ZXN0IHN1aXRlIHBhcnRpdGlvbiBtYW5pZmVzdCBmaWxlcyBhbmQgZ2VuZXJhdGUgbWFuaWZlc3Qgb3V0cHV0IGZpbGVzLiBUaGUgbWFuaWZlc3QgcGFyc2luZyB0b29sIG11c3QgYmUgY29tcGxpYW50IHRvIG1hbmlmZXN0IHJ1bGVzIGRlZmluZWQgaW4gdGhlIFBTQSBGRiBzcGVjaWZpY2F0aW9uLjxiciAvPgotICAgPGJyIC8+VGVzdCBzdWl0ZSBtYW5pZmVzdCB0byBiZSBwYXJzZWQ6PGJyIC8+Ci0gICAtIHBsYXRmb3JtL3RhcmdldHMvPHBsYXRmb3JtX25hbWU+L21hbmlmZXN0cy9jb21tb24vZHJpdmVyX3BhcnRpdGlvbl9wc2EuanNvbgotICAgLSBwbGF0Zm9ybS90YXJnZXRzLzxwbGF0Zm9ybV9uYW1lPi9tYW5pZmVzdHMvaXBjL2NsaWVudF9wYXJ0aXRpb25fcHNhLmpzb24KLSAgIC0gcGxhdGZvcm0vdGFyZ2V0cy88cGxhdGZvcm1fbmFtZT4vbWFuaWZlc3RzL2lwYy9zZXJ2ZXJfcGFydGl0aW9uX3BzYS5qc29uCisyLiBVc2luZyB5b3VyIFNlY3VyZSBwYXJ0aXRpb24gYnVpbGQgdG9vbCwgcGFyc2UgdGhlIGZvbGxvd2luZyB0ZXN0IHN1aXRlIHBhcnRpdGlvbiBtYW5pZmVzdCBmaWxlcyBhbmQgZ2VuZXJhdGUgbWFuaWZlc3Qgb3V0cHV0IGZpbGVzLiBUaGUgbWFuaWZlc3QgcGFyc2luZyB0b29sIG11c3QgYmUgY29tcGxpYW50IHdpdGggdGhlIG1hbmlmZXN0IHJ1bGVzIGRlZmluZWQgaW4gdGhlIFBTQSBGRiBzcGVjaWZpY2F0aW9uLjxiciAvPgorICAgPGJyIC8+VGhlIHRlc3Qgc3VpdGUgbWFuaWZlc3RzIHRvIGJlIHBhcnNlZCBhcmU6PGJyIC8+CisgICAtICoqcGxhdGZvcm0vdGFyZ2V0cy88cGxhdGZvcm1fbmFtZT4vbWFuaWZlc3RzL2NvbW1vbi9kcml2ZXJfcGFydGl0aW9uX3BzYS5qc29uKioKKyAgIC0gKipwbGF0Zm9ybS90YXJnZXRzLzxwbGF0Zm9ybV9uYW1lPi9tYW5pZmVzdHMvaXBjL2NsaWVudF9wYXJ0aXRpb25fcHNhLmpzb24qKgorICAgLSAqKnBsYXRmb3JtL3RhcmdldHMvPHBsYXRmb3JtX25hbWU+L21hbmlmZXN0cy9pcGMvc2VydmVyX3BhcnRpdGlvbl9wc2EuanNvbioqCiAKLTMuIENvbXBpbGUgdGVzdHMgPGJyIC8+CiszLiBDb21waWxlIHRoZSB0ZXN0cyBhcyBzaG93biBiZWxvdy4gPGJyIC8+CiBgYGAKLSAgIC4vdG9vbHMvc2NyaXB0cy9zZXR1cC5zaCAtLXRhcmdldCA8cGxhdGZvcm1fbmFtZT4gLS1jcHVfYXJjaCA8Y3B1X2FyY2hpdGVjdHVyZV92ZXJzaW9uPiAtLXN1aXRlIDxzdWl0ZV9uYW1lPiAgLS1idWlsZCA8YnVpbGRfZGlyPiAtLWluY2x1ZGUgPGluY2x1ZGVfcGF0aD4KKyAgIC4vdG9vbHMvc2NyaXB0cy9zZXR1cC5zaCAtLXRhcmdldCA8cGxhdGZvcm1fbmFtZT4gLS1jcHVfYXJjaCA8Y3B1X2FyY2hpdGVjdHVyZV92ZXJzaW9uPiAtLXN1aXRlIDxzdWl0ZV9uYW1lPiAgLS1idWlsZCA8YnVpbGRfZGlyPiAtLWluY2x1ZGUgPGluY2x1ZGVfcGF0aD4gIC0tYXJjaGl2ZV90ZXN0cwogYGBgCiA8YnIgLz4gIHdoZXJlOgogCi0tICAgPHBsYXRmb3JtX25hbWU+IGlzIHRoZSBzYW1lIGFzIHRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgc3BlY2lmaWMgZGlyZWN0b3J5IGNyZWF0ZWQgaW4gdGhlIHBsYXRmb3JtL3RhcmdldHMvIGRpcmVjdG9yeS4gIDxiciAvPgotLSAgIDxjcHVfYXJjaGl0ZWN0dXJlX3ZlcnNpb24+IGlzIHRoZSBBcm0gQXJjaGl0ZWN0dXJlIHZlcnNpb24gbmFtZSBmb3Igd2hpY2ggdGVzdCBiaW5hcmllcyBzaG91bGQgYmUgY29tcGlsZWQuIEZvciBleGFtcGxlLCBBcm12N00sIEFybXY4TS1CYXNlbGluZSBhbmQgQXJtdjhNLU1haW5saW5lIEFyY2hpdGVjdHVyZS4gIDxiciAvPgotLSAgIDxzdWl0ZV9uYW1lPiBpcyB0aGUgc3VpdGUgbmFtZSBhbmQgaXQgaXMgc2FtZSBhcyB0aGUgc3VpdGUgbmFtZSBhdmFpbGFibGUgaW4gdGVzdF9zdWl0ZXMvIGRpcmVjdG9yeS4gPGJyIC8+Ci0tICAgPGluY2x1ZGVfcGF0aD4gaXMgYW4gYWRkaXRpb25hbCBkaXJlY3RvcnkgdG8gYmUgaW5jbHVkZWQgaW50byBjb21waWxlciBzZWFyY2ggcGF0aC4gTm90ZS0gVG8gY29tcGlsZSBpcGMgdGVzdHMsIGluY2x1ZGUgcGF0aCBtdXN0IHBvaW50IHRvIHBhdGggd2hlcmUgInBzYS9jbGllbnQuaCIsICJwc2Evc2VydmljZS5oIiBhbmQgdGVzdCBwYXJ0aXRpb24gbWFuaWZlc3Qgb3V0cHV0IGZpbGVzKGBgInBzYV9tYW5pZmVzdC9zaWQuaCIgYW5kICJwc2FfbWFuaWZlc3QvPG1hbmlmZXN0ZmlsZW5hbWU+LmgiYGApIGFyZSBsb2NhdGVkIGluIHlvdXIgYnVpbGQgc3lzdGVtLjxiciAvPgotLSAgIDxidWlsZF9kaXI+IGlzIGFuIG91dHB1dCBkaXJlY3RvcnkgdG8ga2VlcCBidWlsZCBmaWxlcy4KKy0gICA8cGxhdGZvcm1fbmFtZT4gaXMgdGhlIHNhbWUgYXMgdGhlIG5hbWUgb2YgdGhlIHRhcmdldCBzcGVjaWZpYyBkaXJlY3RvcnkgY3JlYXRlZCBpbiB0aGUgKipwbGF0Zm9ybS90YXJnZXRzLyoqIGRpcmVjdG9yeS4gIDxiciAvPgorLSAgIDxjcHVfYXJjaGl0ZWN0dXJlX3ZlcnNpb24+IGlzIHRoZSBBcm0gQXJjaGl0ZWN0dXJlIHZlcnNpb24gbmFtZSBmb3Igd2hpY2ggdGhlIHRlc3RzIHNob3VsZCBiZSBjb21waWxlZC4gRm9yIGV4YW1wbGUsIEFybXY3TSwgQXJtdjhNLUJhc2VsaW5lIGFuZCBBcm12OE0tTWFpbmxpbmUgQXJjaGl0ZWN0dXJlLiAgPGJyIC8+CistICAgPHN1aXRlX25hbWU+IGlzIHRoZSBzdWl0ZSBuYW1lIHdoaWNoIGlzIHRoZSBzYW1lIGFzIHRoZSBzdWl0ZSBuYW1lIGF2YWlsYWJsZSBpbiAqKmZmLyoqIGRpcmVjdG9yeS4gPGJyID4KKy0gICA8YnVpbGRfZGlyPiBpcyBhIGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgYnVpbGQgb3V0cHV0IGZpbGVzLiAgPGJyIC8+CistICAgPGluY2x1ZGVfcGF0aD4gaXMgYW4gYWRkaXRpb25hbCBkaXJlY3RvcnkgdG8gYmUgaW5jbHVkZWQgaW50byB0aGUgY29tcGlsZXIgc2VhcmNoIHBhdGguIDxiciAvPgorTm90ZTogVG8gY29tcGlsZSBJUEMgdGVzdHMsIHRoZSBpbmNsdWRlIHBhdGggbXVzdCBwb2ludCB0byB0aGUgcGF0aCB3aGVyZSAqKnBzYS9jbGllbnQuaCoqLCAqKnBzYS9zZXJ2aWNlLmgqKiwgICoqcHNhL2xpZmVjeWNsZS5oKiogYW5kIHRlc3QgcGFydGl0aW9uIG1hbmlmZXN0IG91dHB1dCBmaWxlcygqKnBzYV9tYW5pZmVzdC9zaWQuaCoqLCAqKnBzYV9tYW5pZmVzdC9waWQuaCoqIGFuZCAqKnBzYV9tYW5pZmVzdC88bWFuaWZlc3RmaWxlbmFtZT4uaCoqKSBhcmUgbG9jYXRlZCBpbiB5b3VyIGJ1aWxkIHN5c3RlbS48YnIgLz4KKy0gIFVzZSAqKi0tYXJjaGl2ZV90ZXN0cyoqIG9wdGlvbiB0byBjcmVhdGUgYSBjb21iaW5lZCB0ZXN0IGFyY2hpdmUodGVzdF9jb21iaW5lLmEpIGZpbGUgYnkgY29tYmluaW5nIHRoZSBhdmFpbGFibGUgdGVzdCBvYmplY3RzIGZpbGVzLiBOb3QgdXNpbmcgdGhpcyBvcHRpb24gd2lsbCBjcmVhdGUgYSBjb21iaW5lZCB0ZXN0IGJpbmFyeSh0ZXN0X2VsZl9jb21iaW5lLmJpbikgYnkgY29tYmluaW5nIHRoZSBhdmFpbGFibGUgdGVzdCBFTEZzLgogCi1SZWZlciAuL3Rvb2xzL3NjcmlwdHMvc2V0dXAuc2ggLS1oZWxwIHRvIGtub3cgbW9yZSBhYm91dCBvcHRpb25zLgorRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgb3B0aW9ucywgcmVmZXIgdG8gKiouL3Rvb2xzL3NjcmlwdHMvc2V0dXAuc2ggLS1oZWxwKiouCiAKLSpUbyBjb21waWxlIGlwYyB0ZXN0cyBmb3IgdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNCBwbGF0Zm9ybSoKK1RvIGNvbXBpbGUgSVBDIHRlc3RzIGZvciAqKnRndF9mZl9tYmVkb3NfZnZwX21wczJfbTQqKiBwbGF0Zm9ybSwgZXhlY3V0ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgogYGBgCiBjZCBhcGktdGVzdHMKLS4vdG9vbHMvc2NyaXB0cy9zZXR1cC5zaCAtLXRhcmdldCB0Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200IC0tY3B1X2FyY2ggYXJtdjdtIC0tc3VpdGUgaXBjIC0tYnVpbGQgQlVJTERfSVBDIC0taW5jbHVkZSA8aW5jbHVkZV9wYXRoMT4gLS1pbmNsdWRlIDxpbmNsdWRlX3BhdGgyPgorLi90b29scy9zY3JpcHRzL3NldHVwLnNoIC0tdGFyZ2V0IHRndF9mZl9tYmVkb3NfZnZwX21wczJfbTQgLS1jcHVfYXJjaCBhcm12N20gLS1zdWl0ZSBpcGMgLS1idWlsZCBCVUlMRF9JUEMgLS1pbmNsdWRlIDxpbmNsdWRlX3BhdGgxPiAtLWluY2x1ZGUgPGluY2x1ZGVfcGF0aDI+IC0tYXJjaGl2ZV90ZXN0cwogYGBgCisqKk5vdGUqKjogVGhlIGRlZmF1bHQgY29tcGlsYXRpb24gZmxvdyBpbmNsdWRlcyB0aGUgZnVuY3Rpb25hbCBBUEkgdGVzdHMgdG8gYnVpbGQgdGhlIHRlc3Qgc3VpdGUuIEl0IGRvZXMgbm90IGluY2x1ZGUgcGFuaWMgdGVzdHMgdGhhdCBjaGVjayBmb3IgdGhlIEFQSSdzIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9ucyBhcyBkZWZpbmVkIGluIHRoZSBQU0EtRkYgc3BlY2lmaWNhdGlvbi4gWW91IGNhbiBpbmNsdWRlIHRoZSBwYW5pYyB0ZXN0cyBmb3IgYnVpbGRpbmcgdGhlIHRlc3Qgc3VpdGUganVzdCBieSBwYXNzaW5nICoqLS1pbmNsdWRlX3BhbmljX3Rlc3RzKiogb3B0aW9uIHRvIHNjcmlwdC4KIAogIyMjIEJ1aWxkIG91dHB1dAotVGVzdCBzdWl0ZSBidWlsZCBnZW5lcmF0ZXMgZm9sbG93aW5nIGJpbmFyaWVzOjxiciAvPgorVGhlIHRlc3Qgc3VpdGUgYnVpbGQgZ2VuZXJhdGVzIHRoZSBmb2xsb3dpbmcgYmluYXJpZXM6PGJyIC8+CiAKIE5TUEUgbGlicmFyaWVzOjxiciAvPgotMS4gPGJ1aWxkX2Rpcj4vQlVJTEQvdmFsL3ZhbF9uc3BlLmEKLTIuIDxidWlsZF9kaXI+L0JVSUxEL3BsYXRmb3JtL3BhbF9uc3BlLmEKLTMuIDxidWlsZF9kaXI+L0JVSUxEL2ZmLzxzdWl0ZV9uYW1lPi90ZXN0X2VsZl9jb21iaW5lLmJpbgorMS4gKio8YnVpbGRfZGlyPi9CVUlMRC92YWwvdmFsX25zcGUuYSoqCisyLiAqKjxidWlsZF9kaXI+L0JVSUxEL3BsYXRmb3JtL3BhbF9uc3BlLmEqKgorMy4gKio8YnVpbGRfZGlyPi9CVUlMRC9mZi88c3VpdGVfbmFtZT4vdGVzdF9jb21iaW5lLmEqKgogCi1TUEUgbGlicmFyaWVzOjxiciAvPgotMS4gPGJ1aWxkX2Rpcj4vQlVJTEQvcGFydGl0aW9uL2RyaXZlcl9wYXJ0aXRpb24uYQotMi4gPGJ1aWxkX2Rpcj4vQlVJTEQvcGFydGl0aW9uL2NsaWVudF9wYXJ0aXRpb24uYQotMy4gPGJ1aWxkX2Rpcj4vQlVJTEQvcGFydGl0aW9uL3NlcnZlcl9wYXJ0aXRpb24uYQorU1BFIGxpYnJhcmllcyBleHBsaWNpdGx5IGZvciBJUEMgdGVzdCBzdWl0ZTo8YnIgLz4KKzEuICoqPGJ1aWxkX2Rpcj4vQlVJTEQvcGFydGl0aW9uL2RyaXZlcl9wYXJ0aXRpb24uYSoqCisyLiAqKjxidWlsZF9kaXI+L0JVSUxEL3BhcnRpdGlvbi9jbGllbnRfcGFydGl0aW9uLmEqKgorMy4gKio8YnVpbGRfZGlyPi9CVUlMRC9wYXJ0aXRpb24vc2VydmVyX3BhcnRpdGlvbi5hKioKIAotIyMjIEJpbmFyaWVzIGludGVncmF0aW9uIGludG8geW91ciBwbGF0Zm9ybQorIyMjIEludGVncmF0aW5nIHRoZSBsaWJyYXJpZXMgaW50byB5b3VyIHRhcmdldCBwbGF0Zm9ybQogCi0xLiBJbnRlZ3JhdGUgdGVzdCBwYXJ0aXRpb24gKFNQRSBhcmNoaXZlcykgd2l0aCB5b3VyIHNvZnR3YXJlIHN0YWNrIGNvbnRhaW5pbmcgU1BNIHNvIHRoYXQgcGFydGl0aW9uIGNvZGUgZ2V0IGFjY2VzcyB0byBQU0EgZGVmaW5lZCBjbGllbnQgYW5kIHNlY3VyZSBwYXJ0aXRpb24gQVBJcy4gVGhpcyBmb3JtcyBhIFNQRSBiaW5hcnkuCi0yLiBJbnRlZ3JhdGUgQlVJTEQvdmFsL3ZhbF9uc3BlLmEgYW5kIEJVSUxEL3BsYXRmb3JtL3BhbF9uc3BlLmEgbGlicmFyaWVzIHdpdGggeW91ciBOb24tU2VjdXJlIE9TIHNvIHRoYXQgdGhlc2UgbGlicmFyaWVzIGdldCBhY2Nlc3MgdG8gUFNBIGNsaWVudCBBUElzLiBUaGlzIHdpbGwgZm9ybSBhIE5TUEUgYmluYXJ5LgotMy4gTG9hZCBOU1BFIGJpbmFyeSBhbmQgdGVzdF9lbGZfY29tYmluZS5iaW4gdG8gTlMgbWVtb3J5Ci00LiBMb2FkIFNQRSBiaW5hcnkgaW50byBTIG1lbW9yeQorMS4gSW50ZWdyYXRlIHRoZSB0ZXN0IHBhcnRpdGlvbiAoU1BFIGFyY2hpdmVzKSB3aXRoIHlvdXIgc29mdHdhcmUgc3RhY2sgY29udGFpbmluZyBTUE0gc28gdGhhdCB0aGUgcGFydGl0aW9uIGNvZGUgZ2V0cyBhY2Nlc3MgdG8gUFNBLWRlZmluZWQgY2xpZW50IGFuZCBTZWN1cmUgcGFydGl0aW9uIEFQSXMuIFRoaXMgZm9ybXMgYW4gU1BFIGJpbmFyeS4KKzIuIEludGVncmF0ZSAqKnZhbF9uc3BlLmEqKiwgKipwYWxfbnNwZS5hKiogYW5kICoqdGVzdF9jb21iaW5lLmEqKiBsaWJyYXJpZXMgd2l0aCB5b3VyIE5vbi1zZWN1cmUgT1Mgc28gdGhhdCB0aGVzZSBsaWJyYXJpZXMgZ2V0IGFjY2VzcyB0byBQU0EgY2xpZW50IEFQSXMuIFRoaXMgZm9ybXMgYW4gTlNQRSBiaW5hcnkuCiszLiBMb2FkIE5TUEUgYmluYXJ5IGludG8gTm9uLXNlY3VyZSBtZW1vcnkuCis0LiBMb2FkIFNQRSBiaW5hcnkgaW50byBTZWN1cmUgbWVtb3J5LgogCi0jIyBUZXN0IFN1aXRlIEV4ZWN1dGlvbgotVGhlIGZvbGxvd2luZyBzdGVwcyBkZXNjcmliZSB0aGUgZXhlY3V0aW9uIGZsb3cgcHJpb3IgdG8gdGhlIHN0YXJ0IG9mIHRlc3QgZXhlY3V0aW9uOiA8YnIgLz4KKyMjIFRlc3Qgc3VpdGUgZXhlY3V0aW9uCitUaGUgZm9sbG93aW5nIHN0ZXBzIGRlc2NyaWJlIHRoZSBleGVjdXRpb24gZmxvdyBiZWZvcmUgdGhlIHRlc3QgZXhlY3V0aW9uOiA8YnIgLz4KIAotMS4gVGhlIHRhcmdldCBwbGF0Zm9ybSBtdXN0IGxvYWQgYWJvdmUgYmluYXJpZXMgaW50byBhcHByb3ByaWF0ZSBtZW1vcnkuIDxiciAvPgotMi4gVGhlIFN5c3RlbSBVbmRlciBUZXN0IChTVVQpIHdvdWxkIGJvb3QgdG8gYW4gZW52aXJvbm1lbnQgd2hpY2ggaW50aWFsaXplcyBTUE0gYW5kIHRlc3Qgc3VpdGUgcGFydGl0aW9ucyBhcmUgcmVhZHkgdG8gYWNjZXB0IHJlcXVlc3RzLiA8YnIgLz4KLTMuIE9uIHRoZSBub24tc2VjdXJlIHNpZGUsIHRoZSBTVVQgLSBib290IHNvZnR3YXJlIHdvdWxkIGdpdmUgY29udHJvbCB0byB0aGUgdGVzdCBzdWl0ZSBlbnRyeSBwb2ludC0gKnZvaWQgdmFsX2VudHJ5KHZvaWQpOyogYXMgYW4gYXBwbGljYXRpb24gZW50cnkgcG9pbnQuIDxiciAvPgorMS4gVGhlIHRhcmdldCBwbGF0Zm9ybSBtdXN0IGxvYWQgdGhlIGFib3ZlIGJpbmFyaWVzIGludG8gYXBwcm9wcmlhdGUgbWVtb3J5LiA8YnIgLz4KKzIuIFRoZSAqU3lzdGVtIFVuZGVyIFRlc3QqIChTVVQpIGJvb3RzIHRvIGFuIGVudmlyb25tZW50IHRoYXQgaW5pdGlhbGl6ZXMgdGhlIFNQTSBhbmQgdGhlIHRlc3Qgc3VpdGUgcGFydGl0aW9ucyBhcmUgcmVhZHkgdG8gYWNjZXB0IHJlcXVlc3RzLiA8YnIgLz4KKzMuIE9uIHRoZSBOb24tc2VjdXJlIHNpZGUsIHRoZSBTVVQgYm9vdCBzb2Z0d2FyZSBnaXZlcyBjb250cm9sIHRvIHRoZSB0ZXN0IHN1aXRlIGVudHJ5IHBvaW50ICoqdm9pZCB2YWxfZW50cnkodm9pZCk7KiogYXMgYW4gYXBwbGljYXRpb24gZW50cnkgcG9pbnQuIDxiciAvPgogNC4gVGhlIHRlc3RzIGFyZSBleGVjdXRlZCBzZXF1ZW50aWFsbHkgaW4gYSBsb29wIGluIHRoZSB0ZXN0X2Rpc3BhdGNoZXIgZnVuY3Rpb24uIDxiciAvPgogCitGb3IgZGV0YWlscyBvbiB0ZXN0IHN1aXRlIGludGVncmF0aW9uLCByZWZlciB0byB0aGUgKipJbnRlZ3JhdGluZyB0aGUgdGVzdCBzdWl0ZSB3aXRoIHRoZSBTVVQqKiBzZWN0aW9uIG9mIFtWYWxpZGF0aW9uIE1ldGhvZG9sb2d5XSguLi9kb2NzL0FybV9QU0FfQVBJc19BcmNoX1Rlc3RfVmFsaWRhdGlvbl9NZXRob2RvbG9neS5wZGYpLgorCiAjIyBMaWNlbnNlCiAKIEFybSBQU0EgdGVzdCBzdWl0ZSBpcyBkaXN0cmlidXRlZCB1bmRlciBBcGFjaGUgdjIuMCBMaWNlbnNlLgpAQCAtMTE4LDQgKzExNSwzIEBACiAtLS0tLS0tLS0tLS0tLQogCiAqQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIGFuZCBDb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuKgotCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwMS90ZXN0X2kwMDEuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAxL3Rlc3RfaTAwMS5jCmluZGV4IGQxZWNjNDcuLjgwMTg1YWQgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAxL3Rlc3RfaTAwMS5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAxL3Rlc3RfaTAwMS5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDAxLmgiCkBAIC0zNiw3ICszNiw3IEBACiB7CiAgICBpbnQzMl90ICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwogCi0gICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sxXSBwc2FfZnJhbWV3b3JrX3ZlcnNpb25cbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDFdIHBzYV9mcmFtZXdvcmtfdmVyc2lvblxuIiwgMCk7CiAKICAgIC8qIFJldHJpZXZlIHRoZSB2ZXJzaW9uIG9mIHRoZSBQU0EgRnJhbWV3b3JrIEFQSSB0aGF0IGlzIGltcGxlbWVudGVkLiovCiAgICBpZiAocHNhLT5mcmFtZXdvcmtfdmVyc2lvbigpICE9IFBTQV9GUkFNRVdPUktfVkVSU0lPTikKQEAgLTU0LDcgKzU0LDcgQEAKICAgIGludDMyX3QgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CiAgICB1aW50MzJfdCAgICAgICAgdmVyc2lvbjsKIAotICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrMl0gcHNhX3ZlcnNpb25cbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDJdIHBzYV92ZXJzaW9uXG4iLCAwKTsKIAogICAgLypSZXR1cm4gUFNBX1ZFUlNJT05fTk9ORSB3aGVuIHRoZSBSb1QgU2VydmljZSBpcyBub3QgaW1wbGVtZW50ZWQsIG9yIHRoZSBjYWxsZXIgaXMgbm90IHBlcm1pdHRlZAogICAgdG8gYWNjZXNzIHRoZSBzZXJ2aWNlLiBSZXR1cm4gbWlub3IgdmVyc2lvbiBvZiB0aGUgaW1wbGVtZW50ZWQgYW5kIGFsbG93ZWQgUm9UIFNlcnZpY2UgKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAxL3Rlc3Rfc3VwcF9pMDAxLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwMS90ZXN0X3N1cHBfaTAwMS5jCmluZGV4IGNlNmRlMzguLjJhMzNjZmEgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAxL3Rlc3Rfc3VwcF9pMDAxLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDEvdGVzdF9zdXBwX2kwMDEuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsOCArMTUsMTMgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKIAogaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfZnJhbWV3b3JrX3ZlcnNpb24odm9pZCk7CiBpbnQzMl90IHNlcnZlcl90ZXN0X3BzYV92ZXJzaW9uKHZvaWQpOwpAQCAtMzAsMTIgKzM1LDEyIEBACiAKIGludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX2ZyYW1ld29ya192ZXJzaW9uKHZvaWQpCiB7Ci0gICAgdmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBWQUxfU1RBVFVTX1NVQ0NFU1MpOworICAgIHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIFZBTF9TVEFUVVNfU1VDQ0VTUyk7CiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKIH0KIAogaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfdmVyc2lvbih2b2lkKQogewotICAgIHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgVkFMX1NUQVRVU19TVUNDRVNTKTsKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBWQUxfU1RBVFVTX1NVQ0NFU1MpOwogICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwMi90ZXN0X2kwMDIuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAyL3Rlc3RfaTAwMi5jCmluZGV4IDcwNWVlMmIuLmFiZDAyM2YgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAyL3Rlc3RfaTAwMi5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAyL3Rlc3RfaTAwMi5jCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDAyLmgiCkBAIC00MywyNyArNDMsMzAgQEAKICAgICBpbnQzMl90ICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwogICAgIHBzYV9oYW5kbGVfdCAgICBoYW5kbGUgPSAwOwogCi0gICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrMV0gVGVzdCBidXN5IGFuZCByZWplY3QgY29ubmVjdCB0eXBlXG4iLCAwKTsKKyAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMV0gVGVzdCBidXN5IGFuZCByZWplY3QgY29ubmVjdCB0eXBlXG4iLCAwKTsKIAogICAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSk7CiAKLSAgICAvKiBUaGUgUm9UIFNlcnZpY2UgY2FuJ3QgbWFrZSBjb25uZWN0aW9uIGF0IHRoaXMgbW9tZW50LgotICAgICAqIEV4cGVjdCBQU0FfQ09OTkVDVElPTl9CVVNZIGJ5IFJvVCBzZXJ2aWNlLgorICAgIC8qCisgICAgICogVGhlIFJvVCBTZXJ2aWNlIGNhbid0IG1ha2UgY29ubmVjdGlvbiBhdCB0aGlzIG1vbWVudC4gSXQgc2VuZHMKKyAgICAgKiBQU0FfRVJST1JfQ09OTkVDVElPTl9CVVNZIGluIHBzYV9yZXBseS4KICAgICAgKi8KLSAgICBpZiAoaGFuZGxlICE9IFBTQV9DT05ORUNUSU9OX0JVU1kpCisgICAgaWYgKGhhbmRsZSAhPSBQU0FfRVJST1JfQ09OTkVDVElPTl9CVVNZKQogICAgIHsKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIkV4cGVjdGVkIGhhbmRsZT1QU0FfQ09OTkVDVElPTl9CVVNZIGJ1dCBoYW5kbGU9MHgleFxuIiwgaGFuZGxlKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgaGFuZGxlPVBTQV9FUlJPUl9DT05ORUNUSU9OX0JVU1kgYnV0IGhhbmRsZT0weCV4XG4iLCBoYW5kbGUpOwogICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKICAgICB9CiAKICAgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpOwogCiAgICAgLyogVGhlIFJvVCBTZXJ2aWNlIHJlamVjdGVkIHRoZSBjbGllbnQgYmVjYXVzZSBvZiBhbiBhcHBsaWNhdGlvbi1zcGVjaWZpYyBjYXNlCi0gICAgICogRXhwZWN0IFBTQV9DT05ORUNUSU9OX1JFRlVTRUQgYnkgUm9UIHNlcnZpY2UKKyAgICAgKiBFeHBlY3QgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCBhcyByZXR1cm4KICAgICAgKi8KLSAgICBpZiAoaGFuZGxlICE9IFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpCisgICAgaWYgKGhhbmRsZSAhPSBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKQogICAgIHsKLSAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIkV4cGVjdGVkIGhhbmRsZT1QU0FfQ09OTkVDVElPTl9SRUZVU0VEIGJ1dCBoYW5kbGU9MHgleFxuIiwgaGFuZGxlKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgaGFuZGxlPVBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQgYnV0IGhhbmRsZT0weCV4XG4iLCBoYW5kbGUpOwogICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX0lOVkFMSURfSEFORExFOwogICAgIH0KIApAQCAtNzQsNyArNzcsNyBAQAogewogICAgcHNhX2hhbmRsZV90ICAgICBoYW5kbGUgPSAwOwogCi0gICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2syXSBBY2NlcHQgYW5kIGNsb3NlIGNvbm5lY3Rpb25cbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDJdIEFjY2VwdCBhbmQgY2xvc2UgY29ubmVjdGlvblxuIiwgMCk7CiAKICAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSk7CiAgICAvKiBSb1Qgc2VydmljZSBhY2NlcHRzIHRoZSBjb25uZWN0aW9uLiBFeHBlY3RpbmcgcG9zaXRpdmUgaGFuZGxlICovCkBAIC0xMDEsNyArMTA0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VSVkVSX1JFTEFYX01JTk9SX1ZFUlNJT05fU0lEfTsKICAgIHVpbnQzMl90ICAgICAgICAgbWlub3JfdltdID0gezEsIDIsIDEsIDJ9OwogCi0gICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2szXSBUZXN0IHBzYV9jb25uZWN0IHdpdGggYWxsb3dlZCBtaW5vciB2ZXJzaW9uIHBvbGljeVxuIiwgMCk7CisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgM10gVGVzdCBwc2FfY29ubmVjdCB3aXRoIGFsbG93ZWQgbWlub3IgdmVyc2lvbiBwb2xpY3lcbiIsIDApOwogCiAgICAvKiBDb25uZWN0IFJvVCBzZXJ2aWNlIHdpdGggZm9sbG93aW5nIG1pbm9yIHZlcnNpb24gbnVtYmVycyBhbmQgZXhwZWN0IHBvc2l0aXZlIGhhbmRsZSBmb3IKICAgICAqIGVhY2ggY29ubmVjdGlvbjoKQEAgLTE1Niw3ICsxNTksNyBAQAogICAgcHNhX3N0YXR1c190ICAgIGV4cGVjdGVkX3N0YXR1c19jb2RlW10gPSB7UFNBX1NVQ0NFU1MsIDEsIDIsIElOVDMyX01BWCwgLTEsIC0yLCBJTlQzMl9NSU4rMTI4fTsKICAgIHVpbnQzMl90ICAgICAgICBpID0gMDsKIAotICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrNF0gVGVzdCBwc2FfY2FsbCB3aXRoIGFsbG93ZWQgc3RhdHVzIGNvZGVcbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDRdIFRlc3QgcHNhX2NhbGwgd2l0aCBhbGxvd2VkIHN0YXR1cyBjb2RlXG4iLCAwKTsKIAogICAgZm9yIChpID0gMDsgaSA8IChzaXplb2YoZXhwZWN0ZWRfc3RhdHVzX2NvZGUpL3NpemVvZihleHBlY3RlZF9zdGF0dXNfY29kZVswXSkpOyBpKyspCiAgICB7CkBAIC0xNzksNyArMTgyLDcgQEAKICAgIHBzYV9zdGF0dXNfdCAgICBzdGF0dXNfb2ZfY2FsbDsKICAgIGludCAgICAgICAgICAgICBpZF9hdF9jb25uZWN0ID0gMCwgaWRfYXRfY2FsbCA9IDA7CiAKLSAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazVdIFRlc3QgY2xpZW50X2lkXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayA1XSBUZXN0IGNsaWVudF9pZFxuIiwgMCk7CiAgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpOwogCiAgICBpZiAoaGFuZGxlIDwgMCkKQEAgLTIyMCwxNiArMjIzLDE2IEBACiAgICBwc2FfaGFuZGxlX3QgICAgaGFuZGxlW0NPTk5FQ1RfTElNSVRdID0gezB9OwogICAgaW50ICAgICAgICAgICAgIGk9IDAsIHNpZ250dXJlID0gMDsKIAotICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrNl0gVGVzdCBjb25uZWN0IGxpbWl0XG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayA2XSBUZXN0IGNvbm5lY3QgbGltaXRcbiIsIDApOwogCiAgICAvKiBFeGVjdXRlIHBzYV9jb25uZWN0IGluIGEgbG9vcCB1bnRpbCBpdCByZXR1cm5zCi0gICAgKiBQU0FfQ09OTkVDVElPTl9SRUZVU0VEIE9SIFBTQV9DT05ORUNUSU9OX0JVU1kKKyAgICAqIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQgT1IgUFNBX0VSUk9SX0NPTk5FQ1RJT05fQlVTWQogICAgICovCiAgICB3aGlsZSAoaSA8IENPTk5FQ1RfTElNSVQpCiAgICB7CiAgICAgICAgaGFuZGxlW2ldID0gcHNhLT5jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxKTsKICAgICAgICAvKiBDb21wYXJlIGhhbmRsZSB2YWx1ZSAqLwotICAgICAgIGlmICgoaGFuZGxlW2ldID09IFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpIHx8IChoYW5kbGVbaV0gPT0gUFNBX0NPTk5FQ1RJT05fQlVTWSkpCisgICAgICAgaWYgKChoYW5kbGVbaV0gPT0gUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCkgfHwgKGhhbmRsZVtpXSA9PSBQU0FfRVJST1JfQ09OTkVDVElPTl9CVVNZKSkKICAgICAgICB7CiAgICAgICAgICAgIHNpZ250dXJlID0gMTsKICAgICAgICAgICAgYnJlYWs7CkBAIC0yNjQsNyArMjY3LDcgQEAKICAgIGZvciAoaSA9IDA7IGkgPCBDT05ORUNUX05VTTsgaSsrKQogICAgewogICAgICAgIGhhbmRsZVtpXSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSk7Ci0gICAgICAgaWYgKGhhbmRsZVtpXSAhPSBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKQorICAgICAgIGlmIChoYW5kbGVbaV0gIT0gUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSURfSEFORExFOwogICAgICAgIH0KQEAgLTI3NSwxMiArMjc4LDEyIEBACiAKIGludDMyX3QgY2xpZW50X3Rlc3RfcHNhX2Jsb2NrX2JlaGF2ZShzZWN1cml0eV90IGNhbGxlcikKIHsKLSAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazddIFRlc3QgUFNBX0JMT0NLXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayA3XSBUZXN0IFBTQV9CTE9DS1xuIiwgMCk7CiAgICByZXR1cm4gKGNsaWVudF90ZXN0X3BzYV93YWl0KCkpOwogfQogCiBpbnQzMl90IGNsaWVudF90ZXN0X3BzYV9wb2xsX2JlaGF2ZShzZWN1cml0eV90IGNhbGxlcikKIHsKLSAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazhdIFRlc3QgUFNBX1BPTExcbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDhdIFRlc3QgUFNBX1BPTExcbiIsIDApOwogICAgcmV0dXJuIChjbGllbnRfdGVzdF9wc2Ffd2FpdCgpKTsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAyL3Rlc3RfaTAwMi5oIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDIvdGVzdF9pMDAyLmgKaW5kZXggYzRlYjIwNS4uYTA3Njc4NyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDIvdGVzdF9pMDAyLmgKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDIvdGVzdF9pMDAyLmgKQEAgLTI4LDcgKzI4LDcgQEAKICNkZWZpbmUgcHNhIENPTkNBVChwc2EsX2NsaWVudF9zcCkKICNlbmRpZgogCi0jZGVmaW5lIENPTk5FQ1RfTElNSVQgMjAKKyNkZWZpbmUgQ09OTkVDVF9MSU1JVCA1MAogI2RlZmluZSBDT05ORUNUX05VTSAyCiAKIGV4dGVybiB2YWxfYXBpX3QgKnZhbDsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAyL3Rlc3Rfc3VwcF9pMDAyLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwMi90ZXN0X3N1cHBfaTAwMi5jCmluZGV4IDQzNThlMjQuLjI3NDQ1MmIgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAyL3Rlc3Rfc3VwcF9pMDAyLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDIvdGVzdF9zdXBwX2kwMDIuYwpAQCAtMTUsOCArMTUsMTMgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKIAogI2RlZmluZSBDT05ORUNUX05VTSAyCiAKQEAgLTQ3LDI4ICs1MiwyOSBAQAogICAgIGludDMyX3QgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKICAgICBwc2FfbXNnX3QgICBtc2cgPSB7MH07CiAKLSAgICAvKiBDaGVja3MgcGVyZm9ybWVkOgotICAgICAqIHBzYV93YWl0KCktIFJldHVybnMgPiAwIHdoZW4gYXQgbGVhc3Qgb25lIHNpZ25hbCBpcyBhc3NlcnRlZAorICAgIC8qCisgICAgICogQ2hlY2tzIHBlcmZvcm1lZDoKKyAgICAgKiBwc2EtPndhaXQoKS0gUmV0dXJucyA+IDAgd2hlbiBhdCBsZWFzdCBvbmUgc2lnbmFsIGlzIGFzc2VydGVkCiAgICAgICogY2hlY2sgZGVsaXZlcnkgb2YgUFNBX0lQQ19DT05ORUNUIHdoZW4gcHNhX2Nvbm5lY3QgY2FsbGVkLgogICAgICAqIEFuZCBtc2cuaGFuZGxlIG11c3QgYmUgcG9zaXRpdmUuCiAgICAgKi8KLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCiAgICAgewogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAogICAgIC8qIFJlamVjdGluZyBjb25uZWN0aW9uIHRvIGNoZWNrIGJlaGF2aW91ciBvZiBQU0FfQ09OTkVDVElPTl9CVVNZICovCi0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX0JVU1kpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fQlVTWSk7CiAKLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCiAgICAgewogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAotICAgIC8qIFJlamVjdGluZyBjb25uZWN0aW9uIHRvIGNoZWNrIGJlaGF2aW91ciBvZiBQU0FfQ09OTkVDVElPTl9SRUZVU0VEICovCi0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgIC8qIFJlamVjdGluZyBjb25uZWN0aW9uIHRvIGNoZWNrIGJlaGF2aW91ciBvZiBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEICovCisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICByZXR1cm4gc3RhdHVzOwogfQogCkBAIC03NywzMCArODMsMzAgQEAKICAgICBpbnQzMl90ICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CiAgICAgcHNhX21zZ190ICAgbXNnID0gezB9OwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDMpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDMpLCBzdGF0dXMpKQogICAgIHsKICAgICAgICAgLyogUmVqZWN0IHRoZSBjb25uZWN0aW9uIGlmIHByb2Nlc3Npbmcgb2YgY29ubmVjdCByZXF1ZXN0IGhhcyBmYWlsZWQgKi8KLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAogICAgIC8qIEFjY2VwdGluZyBjb25uZWN0aW9uIHRvIGNoZWNrIGJlaGF2aW91ciBvZiBQU0FfU1VDQ0VTUyAqLwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAKICAgICAvKiBDaGVja2luZyBkZWxpdmVyeSBvZiBQU0FfSVBDX0RJU0NPTk5FQ1Qgd2hlbiBwc2FfY2xvc2UgY2FsbGVkCiAgICAgICogbXNnLmhhbmRsZSBtdXN0IGJlIHBvc2l0aXZlCiAgICAgICovCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpKQogICAgIHsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKICAgICAvKiBTYW5pdHkgY2hlY2sgLSBpZiB0aGUgbWVzc2FnZSB0eXBlIGlzIFBTQV9JUENfRElTQ09OTkVDVCB0aGVuIHRoZSBzdGF0dXMgY29kZSBpcyBpZ25vcmVkLiovCi0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgLyogRGVidWcgcHJpbnQgZm9yIHNhbml0eSBjaGVjayAqLwotICAgIHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjA1KSwgc3RhdHVzKTsKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDUpLCBzdGF0dXMpOwogICAgIHJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTExNiwyMCArMTIyLDIwIEBACiAKICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQogICAgIHsKLSAgICAgICAgc3RhdHVzID0gKCh2YWxfcHJvY2Vzc19jb25uZWN0X3JlcXVlc3Qoc2lnbmFsW2ldLCAmbXNnKSkKKyAgICAgICAgc3RhdHVzID0gKCh2YWwtPnByb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KHNpZ25hbFtpXSwgJm1zZykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFZBTF9TVEFUVVNfRVJST1IgOiBzdGF0dXMpOwotICAgICAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDYpLCBzdGF0dXMpKQorICAgICAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjA2KSwgc3RhdHVzKSkKICAgICAgICAgewotICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgICAgIH0KIAotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKIAotICAgICAgICBzdGF0dXMgPSAoKHZhbF9wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChzaWduYWxbaV0sICZtc2cpKQorICAgICAgICBzdGF0dXMgPSAoKHZhbC0+cHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3Qoc2lnbmFsW2ldLCAmbXNnKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFZBTF9TVEFUVVNfRVJST1IgOiBzdGF0dXMpOwotICAgICAgICB2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwNyksIHN0YXR1cyk7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgICAgIHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwNyksIHN0YXR1cyk7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogICAgIH0KICAgICByZXR1cm4gc3RhdHVzOwogfQpAQCAtMTQzLDMzICsxNDksMzMgQEAKIAogICAgIGZvciAoaSA9IDA7IGkgPCAoc2l6ZW9mKHN0YXR1c19jb2RlKS9zaXplb2Yoc3RhdHVzX2NvZGVbMF0pKTsgaSsrKQogICAgIHsKLSAgICAgICAgc3RhdHVzID0gKCh2YWxfcHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpKQorICAgICAgICBzdGF0dXMgPSAoKHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gVkFMX1NUQVRVU19FUlJPUiA6IHN0YXR1cyk7Ci0gICAgICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwOCksIHN0YXR1cykpCisgICAgICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDgpLCBzdGF0dXMpKQogICAgICAgICB7Ci0gICAgICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICAgICAgfQotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKIAotICAgICAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgICAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDkpLCBzdGF0dXMpKQorICAgICAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICAgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwOSksIHN0YXR1cykpCiAgICAgICAgIHsKICAgICAgICAgICAgIC8qIFNlbmQgc3RhdHVzIGNvZGUgb3RoZXIgdGhhbiBzdGF0dXNfY29kZVtdIHRvIGluZGljYXRlIGZhaWx1cmUKICAgICAgICAgICAgICAqIGluIHByb2Nlc3NpbmcgY2FsbCByZXF1ZXN0CiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCAtMyk7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIC0zKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgICAgIC8qIFNlbmQgdmFyaW91cyBzdGF0dXMgY29kZSBhdmFpbGFibGUgaW4gc3RhdHVzX2NvZGVbXSAqLwotICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIHN0YXR1c19jb2RlW2ldKTsKKyAgICAgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgc3RhdHVzX2NvZGVbaV0pOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdHVzID0gKCh2YWxfcHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpKQorICAgICAgICBzdGF0dXMgPSAoKHZhbC0+cHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gVkFMX1NUQVRVU19FUlJPUiA6IHN0YXR1cyk7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7Ci0gICAgICAgIHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjEwKSwgc3RhdHVzKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgICAgIHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIxMCksIHN0YXR1cyk7CiAgICAgfQogICAgIHJldHVybiBzdGF0dXM7CiB9CkBAIC0xODAsMzggKzE4NiwzOCBAQAogICAgIHBzYV9tc2dfdCAgIG1zZyA9IHswfTsKICAgICBpbnQgICAgICAgICBpZF9hdF9jb25uZWN0ID0gMCwgaWRfYXRfY2FsbCA9IDA7CiAKLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwogCi0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjExKSwgc3RhdHVzKSkKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjExKSwgc3RhdHVzKSkKICAgICB7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKICAgICAvKiBDbGllbnQgSUQgZHVyaW5nIGNvbm5lY3QgKi8KICAgICBpZF9hdF9jb25uZWN0ID0gbXNnLmNsaWVudF9pZDsKLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMTIpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMTIpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC0zKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCAtMyk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CiAgICAgICAgIC8qIENsaWVudCBJRCBkdXJpbmcgY2FsbCAqLwogICAgICAgICBpZF9hdF9jYWxsID0gbXNnLmNsaWVudF9pZDsKLSAgICAgICAgcHNhX3dyaXRlKG1zZy5oYW5kbGUsIDAsICZpZF9hdF9jb25uZWN0LCBtc2cub3V0X3NpemVbMF0pOwotICAgICAgICBwc2Ffd3JpdGUobXNnLmhhbmRsZSwgMSwgJmlkX2F0X2NhbGwsIG1zZy5vdXRfc2l6ZVsxXSk7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgICAgIHBzYS0+d3JpdGUobXNnLmhhbmRsZSwgMCwgJmlkX2F0X2Nvbm5lY3QsIG1zZy5vdXRfc2l6ZVswXSk7CisgICAgICAgIHBzYS0+d3JpdGUobXNnLmhhbmRsZSwgMSwgJmlkX2F0X2NhbGwsIG1zZy5vdXRfc2l6ZVsxXSk7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogICAgIH0KIAotICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7Ci0gICAgdmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMTMpLCBzdGF0dXMpOworICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIxMyksIHN0YXR1cyk7CiAgICAgLyogQ2xpZW50IElEIGR1cmluZyBkaXNjb25uZWN0LiBJdCBzaG91bGQgYmUgZXF1YWwgdG8gaWRfYXRfY2FsbCAqLwogICAgIGlmIChtc2cuY2xpZW50X2lkICE9IGlkX2F0X2NhbGwpCiAgICAgewotICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdG1zZy5jbGllbnRfaWQgZmFpbGVkIGZvciBJUENfRElTQ09OTkVDVCIsIDApOworICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRtc2cuY2xpZW50X2lkIGZhaWxlZCBmb3IgSVBDX0RJU0NPTk5FQ1QiLCAwKTsKICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19XUk9OR19JREVOVElUWTsKICAgICB9CiAKQEAgLTIyMywxMCArMjI5LDEwIEBACiAgICAgICovCiAgICAgaWYgKChtc2cuY2xpZW50X2lkID4gMCkgJiYgKG1zZy5jbGllbnRfaWQgIT0gQ0xJRU5UX1BBUlRJVElPTikpCiAgICAgewotICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdG1zZy5jbGllbnRfaWQgZmFpbGVkIGZvciBDTElFTlRfUEFSVElUSU9OIiwgMCk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdG1zZy5jbGllbnRfaWQgZmFpbGVkIGZvciBDTElFTlRfUEFSVElUSU9OIiwgMCk7CiAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfV1JPTkdfSURFTlRJVFk7CiAgICAgfQotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAgICAgcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMjM5LDE1ICsyNDUsMTUgQEAKIAogICAgIHdoaWxlICgxKQogICAgIHsKLSAgICAgICBzaWduYWxzID0gcHNhX3dhaXQoUFNBX1dBSVRfQU5ZLCBQU0FfQkxPQ0spOworICAgICAgIHNpZ25hbHMgPSBwc2EtPndhaXQoUFNBX1dBSVRfQU5ZLCBQU0FfQkxPQ0spOwogICAgICAgIGlmICgoc2lnbmFscyAmIFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHKSA9PSAwKQogICAgICAgIHsKLSAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsCisgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwKICAgICAgICAgICAgICAgICAgICAgInBzYV93YWl0IHJldHVybmVkIHdpdGggaW52YWxpZCBzaWduYWwgdmFsdWUgPSAweCV4XG4iLCBzaWduYWxzKTsKICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKICAgICAgICB9CiAKLSAgICAgICBpZiAocHNhX2dldChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZykgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgaWYgKHBzYS0+Z2V0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSAhPSBQU0FfU1VDQ0VTUykKICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICBzd2l0Y2gobXNnLnR5cGUpCkBAIC0yNTUsMTIgKzI2MSwxMiBAQAogICAgICAgICAgICBjYXNlIFBTQV9JUENfQ09OTkVDVDoKICAgICAgICAgICAgICAgICAvKiBzZXJ2ZSBidWxrIGNvbm5lY3QgY2FzZXMgdG8gcmVhY2ggY29ubmVjdCBsaW1pdCAqLwogICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICAgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBQU0FfSVBDX0RJU0NPTk5FQ1Q6CiAgICAgICAgICAgICAgICAgLyogc2VydmUgYnVsayBkaXNjb25uZWN0IGNhc2VzICovCiAgICAgICAgICAgICAgICAgY291bnQtLTsKLSAgICAgICAgICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgICAgICAgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogICAgICAgIH0KICAgICAgICBpZiAoY291bnQgPT0gMCkKICAgICAgICB7CkBAIC0yNzcsMzkgKzI4Myw0MCBAQAogICAgIHBzYV9tc2dfdCAgICAgICBtc2cgPSB7MH07CiAgICAgaW50ICAgICAgICAgICAgIGkgPSAwOwogCi0gICAgLyogVGhpcyBpcyBhIHNhbml0eSBjaGVjayAtIGEgc3VjY2Vzc2Z1bCBoYW5kc2hha2luZyBiZXR3ZWVuIGNsaWVudCBhbmQKKyAgICAvKgorICAgICAqIFRoaXMgaXMgYSBzYW5pdHkgY2hlY2sgLSBhIHN1Y2Nlc3NmdWwgaGFuZHNoYWtpbmcgYmV0d2VlbiBjbGllbnQgYW5kCiAgICAgICogc2VydmVyIGZvciByZXF1ZXN0ZWQgY29ubmVjdGlvbiByZXByZXNlbnRzIGNoZWNrIHBhc3MuCiAgICAgICovCiAKICAgICAvKiBEZWJ1ZyBwcmludCAqLwotICAgIHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjE0KSwgVkFMX1NUQVRVU19TVUNDRVNTKTsKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMTQpLCBWQUxfU1RBVFVTX1NVQ0NFU1MpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IENPTk5FQ1RfTlVNOyBpKyspCiAgICAgewogd2FpdDoKICAgICAgICAgIC8qIFBTQV9CTE9DSyBvcmVkIHdpdGggMHhGRiB0byBjaGVjayB0aW1lb3V0WzMwOjBdPVJFUyBpcyBpZ25vcmVkIGJ5IGltcGxlbWVudGF0aW9uICovCi0gICAgICAgICBzaWduYWxzID0gcHNhX3dhaXQoUFNBX1dBSVRfQU5ZLCBQU0FfQkxPQ0spOworICAgICAgICAgc2lnbmFscyA9IHBzYS0+d2FpdChQU0FfV0FJVF9BTlksIFBTQV9CTE9DSyk7CiAKICAgICAgICAgIC8qIFdoZW4gTU9ERSBpcyBvbmUoUFNBX0JMT0NLKSwgdGhlIHBzYV93YWl0IG11c3QgcmV0dXJuIG5vbi16ZXJvIHNpZ25hbCB2YWx1ZSAqLwogICAgICAgICAgaWYgKChzaWduYWxzICYgU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcpID09IDApCiAgICAgICAgICB7Ci0gICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLAorICAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsCiAgICAgICAgICAgICAgICAgICAgICAicHNhX3dhaXQgcmV0dXJuZWQgd2l0aCBpbnZhbGlkIHNpZ25hbCB2YWx1ZSA9IDB4JXhcbiIsIHNpZ25hbHMpOwogICAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwogICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgewotICAgICAgICAgICAgIGlmIChwc2FfZ2V0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSAhPSBQU0FfU1VDQ0VTUykKKyAgICAgICAgICAgICBpZiAocHNhLT5nZXQoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpICE9IFBTQV9TVUNDRVNTKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgZ290byB3YWl0OwogICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICAgfQogICAgIH0KIAogICAgIC8qIERlYnVnIHByaW50ICovCi0gICAgdmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMTUpLCBWQUxfU1RBVFVTX1NVQ0NFU1MpOworICAgIHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIxNSksIFZBTF9TVEFUVVNfU1VDQ0VTUyk7CiAKICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOwogfQpAQCAtMzIzLDM3ICszMzAsMzggQEAKICAgICB3aGlsZSAoMSkKICAgICB7CiAgICAgICAgIC8qIERlYnVnIHByaW50ICovCi0gICAgICAgIHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjE2KSwgVkFMX1NUQVRVU19TVUNDRVNTKTsKKyAgICAgICAgdmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjE2KSwgVkFMX1NUQVRVU19TVUNDRVNTKTsKIAogICAgICAgICAvKiBMb29wIHRvIHJlY2VpdmUgY2xpZW50IHJlcXVlc3QgKi8KICAgICAgICAgd2hpbGUgKHNpZ25hbHMgPT0gMCkKICAgICAgICAgewotICAgICAgICAgICAgc2lnbmFscyA9IHBzYV93YWl0KFBTQV9XQUlUX0FOWSwgUFNBX1BPTEwpOworICAgICAgICAgICAgc2lnbmFscyA9IHBzYS0+d2FpdChQU0FfV0FJVF9BTlksIFBTQV9QT0xMKTsKICAgICAgICAgfQogCi0gICAgICAgIC8qIFdoZW4gTU9ERSBpcyB6ZXJvKFBTQV9QT0xMKSwgdGhlIHBzYV93YWl0IHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5IHdpdGggdGhlIGN1cnJlbnQKKyAgICAgICAgLyoKKyAgICAgICAgICogV2hlbiBNT0RFIGlzIHplcm8oUFNBX1BPTEwpLCB0aGUgcHNhX3dhaXQgd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkgd2l0aCB0aGUgY3VycmVudAogICAgICAgICAgKiBzaWduYWwgc3RhdGUsIHdoaWNoIGNhbiBiZSB6ZXJvIGlmIG5vIHNpZ25hbHMgYXJlIGFjdGl2ZS4gRXhlcGVjdGluZyBmb2xsb3dpbmcgY2FsbCB0bwogICAgICAgICAgKiByZXR1cm4gaW1tZWRpYXRlbHkgYXMgbm9uZSBvZiBjbGllbnQgaXMgbWFraW5nIHJlcXVlc3QuCiAgICAgICAgICAqLwotICAgICAgICBzaWduYWxzX3RlbXAgPSBwc2Ffd2FpdChQU0FfV0FJVF9BTlksIFBTQV9QT0xMKTsKKyAgICAgICAgc2lnbmFsc190ZW1wID0gcHNhLT53YWl0KFBTQV9XQUlUX0FOWSwgUFNBX1BPTEwpOwogCiAgICAgICAgIGlmIChzaWduYWxzX3RlbXAgPT0gMCkKICAgICAgICAgewotICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLAorICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwKICAgICAgICAgICAgICAgICAgICAgInBzYV93YWl0IHJldHVybmVkIHdpdGggaW52YWxpZCBzaWduYWxzX3RlbXAgPSAweCV4XG4iLCBzaWduYWxzX3RlbXApOwogICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoKHNpZ25hbHMgJiBTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRykgPT0gMCkKICAgICAgICAgewotICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLAorICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwKICAgICAgICAgICAgICAgICAgICAgInBzYV93YWl0IHJldHVybmVkIHdpdGggaW52YWxpZCBzaWduYWwgdmFsdWUgPSAweCV4XG4iLCBzaWduYWxzKTsKICAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHBzYV9nZXQoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpICE9IFBTQV9TVUNDRVNTKQorICAgICAgICAgICAgaWYgKHBzYS0+Z2V0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSAhPSBQU0FfU1VDQ0VTUykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICAgc2lnbmFscyA9IDA7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAzL3Rlc3RfaTAwMy5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDMvdGVzdF9pMDAzLmMKaW5kZXggMTdiMWJkYi4uYTZhYzI5NCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDMvdGVzdF9pMDAzLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDMvdGVzdF9pMDAzLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMDMuaCIKQEAgLTQzLDcgKzQzLDcgQEAKICAgIHBzYV9oYW5kbGVfdCAgICAgICAgIGhhbmRsZSA9IDA7CiAgICBpbnQgICAgICAgICAgICAgICAgICBkYXRhWzRdID0gezB4MTEsIDB4MjJ9OwogCi0gICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sxXSBUZXN0IHplcm8gbGVuZ3RoIGludmVjXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAxXSBUZXN0IHplcm8gbGVuZ3RoIGludmVjXG4iLCAwKTsKIAogICAgaWYgKHZhbC0+aXBjX2Nvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEsICZoYW5kbGUpKQogICAgewpAQCAtOTcsNyArOTcsNyBAQAogICAgcHNhX2hhbmRsZV90ICAgICAgICAgaGFuZGxlID0gMDsKICAgIGludCAgICAgICAgICAgICAgICAgIGRhdGFbNF0gPSB7MHgxMX07CiAKLSAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazJdIFRlc3QgemVybyBsZW5ndGggb3V0dmVjXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAyXSBUZXN0IHplcm8gbGVuZ3RoIG91dHZlY1xuIiwgMCk7CiAKICAgIGlmICh2YWwtPmlwY19jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxLCAmaGFuZGxlKSkKICAgIHsKQEAgLTE1NSw3ICsxNTUsNyBAQAogICAgdWludDY0X3QgICAgICAgICAgICAgZGF0YTMgPSAweDEwMjAzMDQwNTA2MDcwODA7CiAgICBwc2FfaGFuZGxlX3QgICAgICAgICBoYW5kbGUgPSAwOwogCi0gICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2szXSBUZXN0IHBzYV93cml0ZSwgcHNhX3JlYWQgYW5kIHBzYV9za2lwXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAzXSBUZXN0IHBzYV93cml0ZSwgcHNhX3JlYWQgYW5kIHBzYV9za2lwXG4iLCAwKTsKIAogICAgaWYgKHZhbC0+aXBjX2Nvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEsICZoYW5kbGUpKQogICAgewpAQCAtMTkyLDcgKzE5Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMn07CiAgICBwc2FfaGFuZGxlX3QgICAgICAgICBoYW5kbGUgPSAwOwogCi0gICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2s0XSBUZXN0IHBzYV9jYWxsIGFuZCBwc2Ffd3JpdGVcbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDRdIFRlc3QgcHNhX2NhbGwgYW5kIHBzYV93cml0ZVxuIiwgMCk7CiAKICAgIGlmICh2YWwtPmlwY19jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxLCAmaGFuZGxlKSkKICAgIHsKQEAgLTI0OCw3ICsyNDgsNyBAQAogICAgcHNhX2hhbmRsZV90ICAgICAgIGhhbmRsZSA9IDA7CiAgICBpbnQgICAgICAgICAgICAgICAgaSA9IDA7CiAKLSAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazVdIFRlc3QgcHNhX3NldF9yaGFuZGxlIEFQSVxuIiwgMCk7CisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgNV0gVGVzdCBwc2Ffc2V0X3JoYW5kbGUgQVBJXG4iLCAwKTsKIAogICAgIC8qcmhhbmRsZSB2YWx1ZSBjaGVjayB3aGVuIFBTQV9JUENfQ09OTkVDVCAqLwogICAgaWYgKHZhbC0+aXBjX2Nvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEsICZoYW5kbGUpKQpAQCAtMjgxLDcgKzI4MSw3IEBACiAgICBwc2FfaGFuZGxlX3QgICAgICAgaGFuZGxlID0gMDsKICAgIHVpbnQ4X3QgICAgICAgICAgICBkYXRhID0gMHgxMSwgZXhwZWN0ZWRfZGF0YVtdID0gezB4MjIsIDB4MzN9OwogCi0gICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2s2XSBUZXN0IG92ZXJsYXBwaW5nIHZlY3RvcnNcbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDZdIFRlc3Qgb3ZlcmxhcHBpbmcgdmVjdG9yc1xuIiwgMCk7CiAKICAgIGlmICh2YWwtPmlwY19jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxLCAmaGFuZGxlKSkKICAgIHsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAzL3Rlc3Rfc3VwcF9pMDAzLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwMy90ZXN0X3N1cHBfaTAwMy5jCmluZGV4IGNmNDE0NGYuLmVkZGVmY2UgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDAzL3Rlc3Rfc3VwcF9pMDAzLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDMvdGVzdF9zdXBwX2kwMDMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsOCArMTUsMTMgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKIAogaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2Ffc2V0X3JoYW5kbGUodm9pZCk7CiBpbnQzMl90IHNlcnZlcl90ZXN0X2NhbGxfcmVhZF9hbmRfc2tpcCh2b2lkKTsKQEAgLTQzLDE5ICs0OCwxOSBAQAogCiAgICAgaWYgKHByaW50X25leHRfYXJncyAhPSAwKQogICAgIHsKLSAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRFeHBlY3RlZCBkYXRhPSV4XG4iLCBleHBlY3RlZF9kYXRhKTsKLSAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRBY3R1YWwgZGF0YT0leFxuIiwgYWN0dWFsX2RhdGEpOworICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRFeHBlY3RlZCBkYXRhPSV4XG4iLCBleHBlY3RlZF9kYXRhKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0QWN0dWFsIGRhdGE9JXhcbiIsIGFjdHVhbF9kYXRhKTsKICAgICB9CiAgICAgLyogTmVnYXRpdmUgc3RhdHVzX2NvZGUgcmVwcmVzZW50cyBjaGVjayBmYWlsdXJlIGFuZCBlYWNoIGNoZWNrIGhhcwogICAgICAqIHVuaXEgc3RhdHVzX2NvZGUgdG8gaWRlbnRpZnkgZmFpbGluZyBwb2ludAogICAgICAqLwotICAgIHBzYV9yZXBseShtc2dfaGFuZGxlLCBzdGF0dXNfY29kZSk7CisgICAgcHNhLT5yZXBseShtc2dfaGFuZGxlLCBzdGF0dXNfY29kZSk7CiAKLSAgICBpZiAodmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSkKKyAgICBpZiAodmFsLT5wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZykpCiAgICAgewotICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdGRpc2Nvbm5lY3QgZmFpbGVkIGluIGV4aXRfZ3JhY2VmdWwgZnVuY1xuIiwgMCk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdGRpc2Nvbm5lY3QgZmFpbGVkIGluIGV4aXRfZ3JhY2VmdWwgZnVuY1xuIiwgMCk7CiAgICAgfQotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiB9CiAKIGludDMyX3Qgc2VydmVyX3Rlc3RfemVyb19sZW5ndGhfaW52ZWModm9pZCkKQEAgLTY0LDE0ICs2OSwxNCBAQAogICAgIHBzYV9tc2dfdCAgICAgICAgICAgIG1zZyA9IHswfTsKICAgICBpbnQgICAgICAgICAgICAgICAgICBkYXRhWzVdID0gezB9LCBhY3R1YWxfZGF0YSA9IDB4MjI7CiAKLSAgICBpZiAodmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSkKKyAgICBpZiAodmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZykpCiAgICAgewotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0NPTk5FQ1RJT05fRkFJTEVEOwogICAgIH0KLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogCi0gICAgaWYgKHZhbF9wcm9jZXNzX2NhbGxfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZykpCisgICAgaWYgKHZhbC0+cHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpKQogICAgIHsKICAgICAgICAgZXhpdF9ncmFjZWZ1bChtc2cuaGFuZGxlLCAtMiwgMCwgMCwgMCk7CiAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0NBTExfRkFJTEVEOwpAQCAtODcsNyArOTIsNyBAQAogICAgIH0KIAogICAgIGlmICgobXNnLmluX3NpemVbMl0gPD0gc2l6ZW9mKGRhdGFbMl0pKSAmJgotICAgICAgICAocHNhX3JlYWQobXNnLmhhbmRsZSwgMiwgJmRhdGFbMl0sIG1zZy5pbl9zaXplWzJdKSAhPSBtc2cuaW5fc2l6ZVsyXSkpCisgICAgICAgIChwc2EtPnJlYWQobXNnLmhhbmRsZSwgMiwgJmRhdGFbMl0sIG1zZy5pbl9zaXplWzJdKSAhPSBtc2cuaW5fc2l6ZVsyXSkpCiAgICAgewogICAgICAgICBleGl0X2dyYWNlZnVsKG1zZy5oYW5kbGUsIC00LCAwLCAwLCAwKTsKICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfUkVBRF9GQUlMRUQ7CkBAIC0xMDgsMTEgKzExMywxMSBAQAogICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfTVNHX09VVFNJWkVfRkFJTEVEOwogICAgIH0KIAotICAgIHBzYV93cml0ZShtc2cuaGFuZGxlLCAwLCAmZGF0YVsyXSwgbXNnLm91dF9zaXplWzBdKTsKLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHBzYS0+d3JpdGUobXNnLmhhbmRsZSwgMCwgJmRhdGFbMl0sIG1zZy5vdXRfc2l6ZVswXSk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAKLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAgICAgcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMTIyLDE0ICsxMjcsMTQgQEAKICAgICBwc2FfbXNnX3QgICAgICAgICAgICBtc2c9ezB9OwogICAgIGludCAgICAgICAgICAgICAgICAgIGRhdGFbNV0gPXswfSwgYWN0dWFsX2RhdGE9MHgxMTsKIAotICAgIGlmICh2YWxfcHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpKQorICAgIGlmICh2YWwtPnByb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSkKICAgICB7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfQ09OTkVDVElPTl9GQUlMRUQ7CiAgICAgfQotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAKLSAgICBpZiAodmFsX3Byb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSkKKyAgICBpZiAodmFsLT5wcm9jZXNzX2NhbGxfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZykpCiAgICAgewogICAgICAgICBleGl0X2dyYWNlZnVsKG1zZy5oYW5kbGUsIC0yLCAwLCAwLCAwKTsKICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfQ0FMTF9GQUlMRUQ7CkBAIC0xNDUsNyArMTUwLDcgQEAKICAgICB9CiAKICAgICBpZiAoKG1zZy5pbl9zaXplWzBdIDw9IHNpemVvZihkYXRhWzBdKSkgJiYKLSAgICAgICAgKHBzYV9yZWFkKG1zZy5oYW5kbGUsIDAsICZkYXRhWzBdLCBtc2cuaW5fc2l6ZVswXSkgIT0gbXNnLmluX3NpemVbMF0pKQorICAgICAgICAocHNhLT5yZWFkKG1zZy5oYW5kbGUsIDAsICZkYXRhWzBdLCBtc2cuaW5fc2l6ZVswXSkgIT0gbXNnLmluX3NpemVbMF0pKQogICAgIHsKICAgICAgICAgZXhpdF9ncmFjZWZ1bChtc2cuaGFuZGxlLCAtNCwgMCwgMCwgMCk7CiAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1JFQURfRkFJTEVEOwpAQCAtMTY1LDE0ICsxNzAsMTQgQEAKICAgICAgICAgIGV4aXRfZ3JhY2VmdWwobXNnLmhhbmRsZSwgLTYsIDAsIDAsIDApOwogICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfTVNHX09VVFNJWkVfRkFJTEVEOwogICAgIH0KLSAgICBwc2Ffd3JpdGUobXNnLmhhbmRsZSwgMiwgJmRhdGFbMF0sIG1zZy5vdXRfc2l6ZVsyXSk7CisgICAgcHNhLT53cml0ZShtc2cuaGFuZGxlLCAyLCAmZGF0YVswXSwgbXNnLm91dF9zaXplWzJdKTsKIAogICAgIC8qIER1bW15IHdyaXRlIHdpdGggemVybyBieXRlLiBUaGlzIHNob3VsZCBub3Qgb3ZlcndyaXRlIHByZXZpb3VzbHkgd3JpdHRlbiBkYXRhICovCi0gICAgcHNhX3dyaXRlKG1zZy5oYW5kbGUsIDIsICZkYXRhWzBdLCBtc2cub3V0X3NpemVbMF0pOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT53cml0ZShtc2cuaGFuZGxlLCAyLCAmZGF0YVswXSwgbXNnLm91dF9zaXplWzBdKTsKKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKIAotICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7Ci0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKICAgICByZXR1cm4gc3RhdHVzOwogfQogCkBAIC0xODQsMTQgKzE4OSwxNCBAQAogICAgICAgICAgICAgICAgIGFjdHVhbF9kYXRhWzRdID0gezB9LCBpOwogICAgIHBzYV9tc2dfdCAgIG1zZyA9IHswfTsKIAotICAgIGlmICh2YWxfcHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpKQorICAgIGlmICh2YWwtPnByb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSkKICAgICB7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfQ09OTkVDVElPTl9GQUlMRUQ7CiAgICAgfQotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAKLSAgICBpZiAodmFsX3Byb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSkKKyAgICBpZiAodmFsLT5wcm9jZXNzX2NhbGxfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZykpCiAgICAgewogICAgICAgICBleGl0X2dyYWNlZnVsKG1zZy5oYW5kbGUsIC0yLCAwLCAwLCAwKTsKICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfQ0FMTF9GQUlMRUQ7CkBAIC0yMTEsNyArMjE2LDcgQEAKICAgICBmb3IgKGkgPSAwOyBpIDwgMiA7IGkrKykKICAgICB7CiAgICAgICAgaWYgKChtc2cuaW5fc2l6ZVtpXSA8PSBzaXplb2YoYWN0dWFsX2RhdGFbaV0pKSAmJgotICAgICAgICAgICAocHNhX3JlYWQobXNnLmhhbmRsZSwgaSwgJmFjdHVhbF9kYXRhW2ldLCBtc2cuaW5fc2l6ZVtpXSkgIT0gbXNnLmluX3NpemVbaV0pKQorICAgICAgICAgICAocHNhLT5yZWFkKG1zZy5oYW5kbGUsIGksICZhY3R1YWxfZGF0YVtpXSwgbXNnLmluX3NpemVbaV0pICE9IG1zZy5pbl9zaXplW2ldKSkKICAgICAgICB7CiAgICAgICAgICAgIGV4aXRfZ3JhY2VmdWwobXNnLmhhbmRsZSwgLTQsIDAsIDAsIDApOwogICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19SRUFEX0ZBSUxFRDsKQEAgLTIyNCw3ICsyMjksNyBAQAogICAgIH0KIAogICAgIC8qIEluYm91bmQgcmVhZCBvZiAyIGJ5dGVzIGZyb20gaW52ZWMgMiAqLwotICAgIGlmIChwc2FfcmVhZChtc2cuaGFuZGxlLCAyLCAmYWN0dWFsX2RhdGFbMF0sIDIpICE9IDIpCisgICAgaWYgKHBzYS0+cmVhZChtc2cuaGFuZGxlLCAyLCAmYWN0dWFsX2RhdGFbMF0sIDIpICE9IDIpCiAgICAgewogICAgICAgIGV4aXRfZ3JhY2VmdWwobXNnLmhhbmRsZSwgLTYsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1JFQURfRkFJTEVEOwpAQCAtMjM2LDE0ICsyNDEsMTQgQEAKICAgICB9CiAKICAgICAvKiBJbmJvdW5kIHJlYWQgb2YgMyBieXRlcyBmcm9tIGludmVjIDIgKi8KLSAgICBpZiAocHNhX3NraXAobXNnLmhhbmRsZSwgMiwgMykgIT0gMykKKyAgICBpZiAocHNhLT5za2lwKG1zZy5oYW5kbGUsIDIsIDMpICE9IDMpCiAgICAgewogICAgICAgIGV4aXRfZ3JhY2VmdWwobXNnLmhhbmRsZSwgLTgsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NLSVBfRkFJTEVEOwogICAgIH0KIAogICAgIC8qIENoZWNrIHByZXZpb3VzIHBzYV9za2lwIGhhcyBhY3R1YWxseSBza2lwcGVkIDMgYnl0ZXMgKi8KLSAgICBpZiAocHNhX3JlYWQobXNnLmhhbmRsZSwgMiwgJmFjdHVhbF9kYXRhWzBdLCAyKSAhPSAyKQorICAgIGlmIChwc2EtPnJlYWQobXNnLmhhbmRsZSwgMiwgJmFjdHVhbF9kYXRhWzBdLCAyKSAhPSAyKQogICAgIHsKICAgICAgICBleGl0X2dyYWNlZnVsKG1zZy5oYW5kbGUsIC05LCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19SRUFEX0ZBSUxFRDsKQEAgLTI1OCw3ICsyNjMsNyBAQAogICAgIC8qIE91dGJvdW5kIHJlYWQgb2YgMyBieXRlcyBmcm9tIGludmVjIDIKICAgICAgKiBPbmx5IG9uZSBieXRlIHNob3VsZCBiZSB1cGRhdGVkIGluIGJ1ZmZlci4gUmVtYWluaW5nIHNwYWNlIHNob3VsZCBiZSB1bnRvdWNoZWQKICAgICAgKi8KLSAgICBpZiAocHNhX3JlYWQobXNnLmhhbmRsZSwgMiwgJmFjdHVhbF9kYXRhWzBdLCAzKSAhPSAxKQorICAgIGlmIChwc2EtPnJlYWQobXNnLmhhbmRsZSwgMiwgJmFjdHVhbF9kYXRhWzBdLCAzKSAhPSAxKQogICAgIHsKICAgICAgICBleGl0X2dyYWNlZnVsKG1zZy5oYW5kbGUsIC0xMSwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfUkVBRF9GQUlMRUQ7CkBAIC0yNzUsMjkgKzI4MCwyOSBAQAogICAgIC8qIEFmdGVyIG91dGJvdW5kIHJlYWQsIHN1YnNlcXVlbnQgcmVhZCBvciBza2lwIHRvIGludmVjIDIgc2hvdWxkIHJldHVybiAwCiAgICAgICogYW5kIG1lbW9yeSBidWZmZXIgc2hvdWxkbid0IGJlIHVwZGF0ZWQKICAgICAgKi8KLSAgICBpZiAoKHBzYV9yZWFkKG1zZy5oYW5kbGUsIDIsICZhY3R1YWxfZGF0YVswXSwgMykgIT0gMCkgfHwKLSAgICAgICAgKHBzYV9za2lwKG1zZy5oYW5kbGUsIDIsIDMpICE9IDApIHx8IChhY3R1YWxfZGF0YVswXSAhPSAweGFhKSkKKyAgICBpZiAoKHBzYS0+cmVhZChtc2cuaGFuZGxlLCAyLCAmYWN0dWFsX2RhdGFbMF0sIDMpICE9IDApIHx8CisgICAgICAgIChwc2EtPnNraXAobXNnLmhhbmRsZSwgMiwgMykgIT0gMCkgfHwgKGFjdHVhbF9kYXRhWzBdICE9IDB4YWEpKQogICAgIHsKICAgICAgICBleGl0X2dyYWNlZnVsKG1zZy5oYW5kbGUsIC0xMywgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfUkVBRF9GQUlMRUQ7CiAgICAgfQogCiAgICAgLyogUmVhZCBvZiB6ZXJvIGJ5dGVzIHNob3VsZCBub3QgcmVhZCBhbnl0aGluZyAqLwotICAgIGlmICgocHNhX3JlYWQobXNnLmhhbmRsZSwgMywgJmFjdHVhbF9kYXRhWzBdLCAwKSAhPSAwKSB8fCAoYWN0dWFsX2RhdGFbMF0gIT0gMHhhYSkpCisgICAgaWYgKChwc2EtPnJlYWQobXNnLmhhbmRsZSwgMywgJmFjdHVhbF9kYXRhWzBdLCAwKSAhPSAwKSB8fCAoYWN0dWFsX2RhdGFbMF0gIT0gMHhhYSkpCiAgICAgewogICAgICAgIGV4aXRfZ3JhY2VmdWwobXNnLmhhbmRsZSwgLTE0LCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19SRUFEX0ZBSUxFRDsKICAgICB9CiAKICAgICAvKiBTa2lwIG9mIHplcm8gYnl0ZXMgc2hvdWxkIG5vdCBza2lwIGFueXRoaW5nICovCi0gICAgaWYgKHBzYV9za2lwKG1zZy5oYW5kbGUsIDMsIDApICE9IDApCisgICAgaWYgKHBzYS0+c2tpcChtc2cuaGFuZGxlLCAzLCAwKSAhPSAwKQogICAgIHsKICAgICAgICBleGl0X2dyYWNlZnVsKG1zZy5oYW5kbGUsIC0xNSwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU0tJUF9GQUlMRUQ7CiAgICAgfQogCiAgICAgLyogQ2hlY2sgZWZmZWN0IG9mIHByZXZpb3VzIHplcm8gYnl0ZSByZWFkIGFuZCBza2lwICovCi0gICAgcHNhX3JlYWQobXNnLmhhbmRsZSwgMywgJmFjdHVhbF9kYXRhWzBdLCA0KTsKKyAgICBwc2EtPnJlYWQobXNnLmhhbmRsZSwgMywgJmFjdHVhbF9kYXRhWzBdLCA0KTsKICAgICBpZiAoYWN0dWFsX2RhdGFbMF0gIT0gZXhwZWN0ZWRfZGF0YTJbM10pCiAgICAgewogICAgICAgIGV4aXRfZ3JhY2VmdWwobXNnLmhhbmRsZSwgLTE2LCAxLCBleHBlY3RlZF9kYXRhMlszXSwgYWN0dWFsX2RhdGFbMF0pOwpAQCAtMzA1LDEyICszMTAsMTIgQEAKICAgICB9CiAKICAgICAvKiBPdXRib3VuZCBza2lwIHRvIGludmVjIDMgKi8KLSAgICBpZiAocHNhX3NraXAobXNnLmhhbmRsZSwgMywgNSkgIT0gNCkKKyAgICBpZiAocHNhLT5za2lwKG1zZy5oYW5kbGUsIDMsIDUpICE9IDQpCiAgICAgewogICAgICAgIGV4aXRfZ3JhY2VmdWwobXNnLmhhbmRsZSwgLTE3LCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19TS0lQX0ZBSUxFRDsKICAgICB9Ci0gICAgaWYgKHBzYV9za2lwKG1zZy5oYW5kbGUsIDMsIDUpICE9IDApCisgICAgaWYgKHBzYS0+c2tpcChtc2cuaGFuZGxlLCAzLCA1KSAhPSAwKQogICAgIHsKICAgICAgICBleGl0X2dyYWNlZnVsKG1zZy5oYW5kbGUsIC0xOCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU0tJUF9GQUlMRUQ7CkBAIC0zMjUsMTAgKzMzMCwxMCBAQAogICAgICAgICAgZXhpdF9ncmFjZWZ1bChtc2cuaGFuZGxlLCAtMTQsIDAsIDAsIDApOwogICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfTVNHX09VVFNJWkVfRkFJTEVEOwogICAgIH0KLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogICAgIHJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTMzOCwxNCArMzQzLDE0IEBACiAgICAgaW50ICAgICAgICAgIGRhdGFbNV0gPSB7MHhhYSwgMHhiYiwgMHhjYywgMHhkZCwgMHhlZX0sIGk7CiAgICAgcHNhX21zZ190ICAgIG1zZyA9IHswfTsKIAotICAgIGlmICh2YWxfcHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpKQorICAgIGlmICh2YWwtPnByb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSkKICAgICB7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfQ09OTkVDVElPTl9GQUlMRUQ7CiAgICAgfQotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAKLSAgICBpZiAodmFsX3Byb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSkKKyAgICBpZiAodmFsLT5wcm9jZXNzX2NhbGxfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZykpCiAgICAgewogICAgICAgICBleGl0X2dyYWNlZnVsKG1zZy5oYW5kbGUsIC0yLCAwLCAwLCAwKTsKICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfQ0FMTF9GQUlMRUQ7CkBAIC0zNzQsMjAgKzM3OSwyMCBAQAogCiAgICAgZm9yIChpID0gMDsgaSA8IDMgOyBpKyspCiAgICAgewotICAgICAgIHBzYV93cml0ZShtc2cuaGFuZGxlLCBpLCAmZGF0YVtpXSwgbXNnLm91dF9zaXplW2ldKTsKKyAgICAgICBwc2EtPndyaXRlKG1zZy5oYW5kbGUsIGksICZkYXRhW2ldLCBtc2cub3V0X3NpemVbaV0pOwogICAgIH0KIAogICAgIC8qIFplcm8gYnl0ZSB3cml0ZSBzaG91bGRuJ3QgaGF2ZSBhbnkgZWZmZWN0ICovCi0gICAgcHNhX3dyaXRlKG1zZy5oYW5kbGUsIDMsICZkYXRhWzNdLCAwKTsKKyAgICBwc2EtPndyaXRlKG1zZy5oYW5kbGUsIDMsICZkYXRhWzNdLCAwKTsKIAogICAgIC8qVXNpbmcgaW52ZWMgMyB0byB0ZXN0IHdyaXRlIGNvbmNhdGVuYXRpb24gYmVoYXZpb3VyICovCi0gICAgcHNhX3dyaXRlKG1zZy5oYW5kbGUsIDMsICZkYXRhWzNdLCAxKTsKLSAgICBwc2Ffd3JpdGUobXNnLmhhbmRsZSwgMywgJmRhdGFbNF0sIDEpOworICAgIHBzYS0+d3JpdGUobXNnLmhhbmRsZSwgMywgJmRhdGFbM10sIDEpOworICAgIHBzYS0+d3JpdGUobXNnLmhhbmRsZSwgMywgJmRhdGFbNF0sIDEpOwogCi0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKIAotICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7Ci0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKICAgICByZXR1cm4gc3RhdHVzOwogfQogCkBAIC0zOTUsNDUgKzQwMCw0NSBAQAogewogICAgIGludDMyX3QgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwogICAgIHBzYV9tc2dfdCAgICAgbXNnID0gezB9OwotICAgIGludCAgICAgICAgICAgKm51bSA9IE5VTEw7CisgICAgaW50ICAgICAgICAgICBudW07CiAKICAgICAvKnJoYW5kbGUgdmFsdWUgY2hlY2sgd2hlbiBQU0FfSVBDX0NPTk5FQ1QgKi8KLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwogICAgIGlmIChtc2cucmhhbmRsZSAhPSBOVUxMKQogICAgIHsKICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKICAgICB9Ci0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKSkKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKSkKICAgICB7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9Ci0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKIAogCiAgICAgLypyaGFuZGxlIHZhbHVlIGNoZWNrIHdoZW4gUFNBX0lQQ19DQUxMICovCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKICAgICBpZiAobXNnLnJoYW5kbGUgIT0gTlVMTCkKICAgICB7CiAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfSU5WQUxJRF9IQU5ETEU7CiAgICAgfQotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCiAgICAgewogICAgICAgICBleGl0X2dyYWNlZnVsKG1zZy5oYW5kbGUsIC0yLCAwLCAwLCAwKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKICAgICAvKnNldCByaGFuZGxlICovCi0gICAgKm51bSA9IDU7Ci0gICAgcHNhX3NldF9yaGFuZGxlKG1zZy5oYW5kbGUsIG51bSk7Ci0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICBudW0gPSA1OworICAgIHBzYS0+c2V0X3JoYW5kbGUobXNnLmhhbmRsZSwgJm51bSk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAKLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIGlmIChtc2cucmhhbmRsZSAhPSBudW0pCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2NhbGxfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKCooaW50ICopKG1zZy5yaGFuZGxlKSAhPSBudW0pCiAgICAgewogICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX0lOVkFMSURfSEFORExFOwogICAgIH0KLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDMpLCBzdGF0dXMpKQorICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDMpLCBzdGF0dXMpKQogICAgIHsKICAgICAgICAgZXhpdF9ncmFjZWZ1bChtc2cuaGFuZGxlLCAtMywgMCwgMCwgMCk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CkBAIC00NDMsMzcgKzQ0OCwzNyBAQAogICAgICAqIHVwZGF0ZWQgdmFsdWUgaW4gbmV4dCBtc2cgZGVsaXZlcnkuIE5leHQgbXNnIHNob3VsZAogICAgICAqIHJldHVybiB0aGUgdXBkYXRlZCB2YWx1ZS4KICAgICAgKi8KLSAgICAqbnVtID0gMTA7Ci0gICAgcHNhX3NldF9yaGFuZGxlKG1zZy5oYW5kbGUsIG51bSk7Ci0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICBudW0gPSAxMDsKKyAgICBwc2EtPnNldF9yaGFuZGxlKG1zZy5oYW5kbGUsICZudW0pOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAobXNnLnJoYW5kbGUgIT0gbnVtKQorICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICgqKGludCAqKShtc2cucmhhbmRsZSkgIT0gbnVtKQogICAgIHsKICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKICAgICB9Ci0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjA0KSwgc3RhdHVzKSkKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjA0KSwgc3RhdHVzKSkKICAgICB7CiAgICAgICAgIGV4aXRfZ3JhY2VmdWwobXNnLmhhbmRsZSwgLTQsIDAsIDAsIDApOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogCiAgICAgLyogcmhhbmRsZSBzaG91bGQgcmV0YWluIHRoZSB2YWx1ZSBhdCBQU0FfSVBDX0RJU0NPTk5FQ1QgdG9vICovCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAobXNnLnJoYW5kbGUgIT0gbnVtKQorICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICgqKGludCAqKShtc2cucmhhbmRsZSkgIT0gbnVtKQogICAgIHsKICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKICAgICB9Ci0gICAgdmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDUpLCBzdGF0dXMpOworICAgIHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwNSksIHN0YXR1cyk7CiAKICAgICAvKlNldHRpbmcgdGhlIHJoYW5kbGUgZm9yIGEgY29ubmVjdGlvbiBkdXJpbmcgZGlzY29ubmVjdGlvbiBoYXMgbm8gb2JzZXJ2YWJsZSBlZmZlY3QqLwotICAgICpudW0gPSAxNTsKLSAgICBwc2Ffc2V0X3JoYW5kbGUobXNnLmhhbmRsZSwgbnVtKTsKKyAgICBudW0gPSAxNTsKKyAgICBwc2EtPnNldF9yaGFuZGxlKG1zZy5oYW5kbGUsICZudW0pOwogCiAgICAgLyogU2FuaXR5IGNoZWNrIC0gcHJldmlvdXMgY2FsbCBzaG91bGRuJ3QgaGFuZyAqLwotICAgIHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjA2KSwgc3RhdHVzKTsKLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwNiksIHN0YXR1cyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAgICAgcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtNDg1LDM5ICs0OTAsMzkgQEAKICAgICAgICAgICAgICAgICAgIHJkX2RhdGFbXSA9IHsweDAsIDB4MH0sCiAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9kYXRhW10gPSB7MHgxMSwgMHgyMn07CiAKLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwNyksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwNyksIHN0YXR1cykpCiAgICAgewotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAKLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwOCksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2NhbGxfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwOCksIHN0YXR1cykpCiAgICAgewogICAgICAgICBleGl0X2dyYWNlZnVsKG1zZy5oYW5kbGUsIC0xLCAwLCAwLCAwKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKICAgICAgLyogUGVyZm9ybWluZyByZWFkIGFmdGVyIHdyaXRlIHRvIG92ZXJsYXBwaW5nIHZlY3Rvci4gKi8KLSAgICBwc2Ffd3JpdGUobXNnLmhhbmRsZSwgMCwgJndyX2RhdGFbMF0sIDEpOwotICAgIHBzYV9yZWFkKG1zZy5oYW5kbGUsIDAsICZyZF9kYXRhWzBdLCAxKTsKKyAgICBwc2EtPndyaXRlKG1zZy5oYW5kbGUsIDAsICZ3cl9kYXRhWzBdLCAxKTsKKyAgICBwc2EtPnJlYWQobXNnLmhhbmRsZSwgMCwgJnJkX2RhdGFbMF0sIDEpOwogCiAgICAgLyogcmRfZGF0YVswXSBzaG91bGQgZWl0aGVyIGJlIG9yaWdpbmFsIHZhbHVlIG9yIG1vZGlmaWVkIHZhbHVlICovCiAgICAgaWYgKChyZF9kYXRhWzBdICE9IGV4cGVjdGVkX2RhdGFbMF0pICYmIChyZF9kYXRhWzBdICE9IGV4cGVjdGVkX2RhdGFbMV0pKQogICAgIHsKLSAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRSZWNlaXZlZCBpbnZhbGlkIGRhdGE9JXhcbiIsIHJkX2RhdGFbMF0pOworICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRSZWNlaXZlZCBpbnZhbGlkIGRhdGE9JXhcbiIsIHJkX2RhdGFbMF0pOwogICAgICAgICBleGl0X2dyYWNlZnVsKG1zZy5oYW5kbGUsIC0yLCAwLCAwLCAwKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKICAgICAgLyogUGVyZm9ybWluZyB3cml0ZSBhZnRlciB3cml0ZSB0byBvdmVybGFwcGluZyB2ZWN0b3IuICovCi0gICAgcHNhX3dyaXRlKG1zZy5oYW5kbGUsIDEsICZ3cl9kYXRhWzFdLCAxKTsKLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHBzYS0+d3JpdGUobXNnLmhhbmRsZSwgMSwgJndyX2RhdGFbMV0sIDEpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICB2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwOSksIHN0YXR1cyk7Ci0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDkpLCBzdGF0dXMpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogICAgIHJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwNC90ZXN0X2kwMDQuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA0L3Rlc3RfaTAwNC5jCmluZGV4IDc5MGU5MWIuLjdmMTliYWIgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA0L3Rlc3RfaTAwNC5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA0L3Rlc3RfaTAwNC5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDA0LmgiCkBAIC0zNiwxOCArMzYsMjggQEAKICAgIHBzYV9oYW5kbGVfdCAgICAgICBoYW5kbGUgPSAwOwogICAgYm9vdF9zdGF0ZV90ICAgICAgIGJvb3Rfc3RhdGU7CiAKLSAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazFdIHBzYV9jb25uZWN0IHdpdGggaW52YWxpZCBzaWQgXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAxXSBwc2FfY29ubmVjdCB3aXRoIGludmFsaWQgc2lkXG4iLCAwKTsKIAotICAgLyogVGVzdCBpcyB0YXJnZXRpbmcgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCBpdCB3aWxsIGV4cGVjdCBhbiBlcnJvciByZWNvdmVyeShyZWJvb3QpCi0gICAgKiB0byBoYXBwZW4uIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgd2FzIGludGVuZGVkIGFzIHBlciB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgLyoKKyAgICAqIFRoaXMgdGVzdCBjaGVja3MgZm9yIHRoZSBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiBmb3IgdGhlIFBTQSBBUEkuIEFQSSdzIHJlc3BvbmQgdG8KKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY291bGQgYmUgZWl0aGVyIHRvIHJldHVybiBhcHByb3ByaWF0ZSBzdGF0dXMgY29kZSBvciBwYW5pYyB0aGUgY2FsbGVyLgorICAgICogV2hlbiBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWNzLCB0aGUgU1BFIGNhbm5vdCBjb250aW51ZSBub3JtYWwgZXhlY3V0aW9uLCBhcyBkZWZpbmVkCisgICAgKiBpbiB0aGlzIHNwZWNpZmljYXRpb24uIFRoZSBiZWhhdmlvciBvZiB0aGUgU1BNIGZvbGxvd2luZyBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWMgaXMKKyAgICAqIElNUExFTUVOVEFUSU9OIERFRklORUQtIEFybSByZWNvbW1lbmRzIHRoYXQgdGhlIFNQTSBjYXVzZXMgdGhlIHN5c3RlbSB0byByZXN0YXJ0IGluCisgICAgKiB0aGlzIHNpdHVhdGlvbi4gUmVmZXIgUFNBLUZGIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhbmljLgorICAgICogRm9yIHRoZSBjYXNlcyB3aGVyZSwgU1BNIGNhbm5vdCBjYXBhYmxlIHRvIHJlYm9vdCB0aGUgc3lzdGVtIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBzZXQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4gVGhpcyB3aWxsCisgICAgKiB0ZXN0cyBjb250aW51aXR5IGFuZCBhYmxlIHRvIGp1bXAgdG8gbmV4dCB0ZXN0cy4gVGhlcmVmb3JlLCBlYWNoIHRlc3Qgd2hvIGNoZWNrcyBmb3IKKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uLCBleHBlY3RzIHN5c3RlbSB0byBnZXQgcmVzZXQgZWl0aGVyIGJ5IFNQTSBvciB3YXRjaGRvZyBzZXQgYnkKKyAgICAqIHRoZSB0ZXN0IGhhcm5lc3MgZnVuY3Rpb24uCisgICAgKgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKgorICAgICogVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCBhcyBpbnRlbmRlZCBieSB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAogICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCiAgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQogICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgotICAgICoKLSAgICAqIE5vdGU6IElmIFNQTSBpcyBub3QgY2FwYWJsZSBvZiByZWJvb3RpbmcgKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93bikgaW4gZmF0YWwgZXJyb3IgY29uZGl0aW9uLAotICAgICogYSB3YXRjaGRvZyB0aW1lciBlbmFibGVkIGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuCi0gICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKLSAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KICAgICAqLwogCiAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KQEAgLTU4LDEwICs2OCwyMCBAQAogICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwogICAgfQogCi0gICAvKiBUZXN0IGNoZWNrIC0gcHNhX2Nvbm5lY3Qgd2l0aCBJTlZBTElEX1NJRCwgY2FsbCBtdXN0IG5vdCByZXR1cm4gKi8KKyAgIC8qIFRlc3QgY2hlY2sgLSBwc2FfY29ubmVjdCB3aXRoIElOVkFMSURfU0lEICovCiAgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoSU5WQUxJRF9TSUQsIDEpOwogCi0gICAvKiBDb250cm9sIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZSAqLworICAgLyoKKyAgICAqIElmIHRoZSBjYWxsZXIgaXMgaW4gdGhlIE5TUEUsIGl0IGlzIElNUExFTUVOVEFUSU9OIERFRklORUQgd2hldGhlcgorICAgICogYSBQUk9HUkFNTUVSIEVSUk9SIHdpbGwgcGFuaWMgb3IgcmV0dXJuIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQuCisgICAgKiBGb3IgU1BFIGNhbGxlciwgaXQgbXVzdCBwYW5pYy4KKyAgICAqLworICAgaWYgKGNhbGxlciA9PSBOT05TRUNVUkUgJiYgaGFuZGxlID09IFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpCisgICB7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKKyAgIH0KKworICAgLyogSWYgUFJPR1JBTU1FUiBFUlJPUiByZXN1bHRzIGludG8gcGFuaWMgdGhlbiBjb250cm9sIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZSAqLwogICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0cHNhX2Nvbm5lY3Qgd2l0aCBpbnZhbGlkIHNpZCBzaG91bGQgaGF2ZSBmYWlsZWQgYnV0IHN1Y2NlZWRlZFxuIiwgMCk7CiAKICAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDQvdGVzdF9zdXBwX2kwMDQuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA0L3Rlc3Rfc3VwcF9pMDA0LmMKaW5kZXggOGQxYWJkMi4uYzBmNDg0YSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDQvdGVzdF9zdXBwX2kwMDQuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwNC90ZXN0X3N1cHBfaTAwNC5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSw4ICsxNSwxMyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KIAotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKworI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfc2VydmVyX3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfc2VydmVyX3NwKQorZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOwogCiBpbnQzMl90IHNlcnZlcl90ZXN0X3NpZF9kb2VzX25vdF9leGlzdHMoKTsKIApAQCAtMjgsNiArMzMsNiBAQAogCiBpbnQzMl90IHNlcnZlcl90ZXN0X3NpZF9kb2VzX25vdF9leGlzdHMoKQogewotICAgIHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgVkFMX1NUQVRVU19TVUNDRVNTKTsKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBWQUxfU1RBVFVTX1NVQ0NFU1MpOwogICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwNS90ZXN0X2kwMDUuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA1L3Rlc3RfaTAwNS5jCmluZGV4IDhlMDJlMjEuLjJiMWQyMmYgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA1L3Rlc3RfaTAwNS5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA1L3Rlc3RfaTAwNS5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDA1LmgiCkBAIC0zNiwxOCArMzYsMjggQEAKICAgIHBzYV9oYW5kbGVfdCAgICAgICBoYW5kbGUgPSAwOwogICAgYm9vdF9zdGF0ZV90ICAgICAgIGJvb3Rfc3RhdGU7CiAKLSAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazFdIFRlc3QgU1RSSUNUIHBvbGljeSB3aXRoIGhpZ2hlciBtaW5vciB2ZXJzaW9uXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAxXSBUZXN0IFNUUklDVCBwb2xpY3kgd2l0aCBoaWdoZXIgbWlub3IgdmVyc2lvblxuIiwgMCk7CiAKLSAgIC8qIFRlc3QgaXMgdGFyZ2V0aW5nIGZhdGFsIGVycm9yIGNvbmRpdGlvbiBhbmQgaXQgd2lsbCBleHBlY3QgYW4gZXJyb3IgcmVjb3ZlcnkocmVib290KQotICAgICogdG8gaGFwcGVuLiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIHdhcyBpbnRlbmRlZCBhcyBwZXIgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKKyAgIC8qCisgICAgKiBUaGlzIHRlc3QgY2hlY2tzIGZvciB0aGUgUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24gZm9yIHRoZSBQU0EgQVBJLiBBUEkncyByZXNwb25kIHRvCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvdWxkIGJlIGVpdGhlciB0byByZXR1cm4gYXBwcm9wcmlhdGUgc3RhdHVzIGNvZGUgb3IgcGFuaWMgdGhlIGNhbGxlci4KKyAgICAqIFdoZW4gYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljcywgdGhlIFNQRSBjYW5ub3QgY29udGludWUgbm9ybWFsIGV4ZWN1dGlvbiwgYXMgZGVmaW5lZAorICAgICogaW4gdGhpcyBzcGVjaWZpY2F0aW9uLiBUaGUgYmVoYXZpb3Igb2YgdGhlIFNQTSBmb2xsb3dpbmcgYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljIGlzCisgICAgKiBJTVBMRU1FTlRBVElPTiBERUZJTkVELSBBcm0gcmVjb21tZW5kcyB0aGF0IHRoZSBTUE0gY2F1c2VzIHRoZSBzeXN0ZW0gdG8gcmVzdGFydCBpbgorICAgICogdGhpcyBzaXR1YXRpb24uIFJlZmVyIFBTQS1GRiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYW5pYy4KKyAgICAqIEZvciB0aGUgY2FzZXMgd2hlcmUsIFNQTSBjYW5ub3QgY2FwYWJsZSB0byByZWJvb3QgdGhlIHN5c3RlbSAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSwKKyAgICAqIGEgd2F0Y2hkb2cgdGltZXIgc2V0IGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuIFRoaXMgd2lsbAorICAgICogdGVzdHMgY29udGludWl0eSBhbmQgYWJsZSB0byBqdW1wIHRvIG5leHQgdGVzdHMuIFRoZXJlZm9yZSwgZWFjaCB0ZXN0IHdobyBjaGVja3MgZm9yCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiwgZXhwZWN0cyBzeXN0ZW0gdG8gZ2V0IHJlc2V0IGVpdGhlciBieSBTUE0gb3Igd2F0Y2hkb2cgc2V0IGJ5CisgICAgKiB0aGUgdGVzdCBoYXJuZXNzIGZ1bmN0aW9uLgorICAgICoKKyAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZworICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgorICAgICoKKyAgICAqIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgYXMgaW50ZW5kZWQgYnkgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKICAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAogICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKICAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KLSAgICAqCi0gICAgKiBOb3RlOiBJZiBTUE0gaXMgbm90IGNhcGFibGUgb2YgcmVib290aW5nIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbiwKLSAgICAqIGEgd2F0Y2hkb2cgdGltZXIgZW5hYmxlZCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LgotICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCi0gICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCiAgICAgKi8KIAogICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCkBAIC02Myw3ICs3MywxNyBAQAogICAgICovCiAgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1NUUklDVF9NSU5PUl9WRVJTSU9OX1NJRCwgMyk7CiAKLSAgIC8qIFNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZSAqLworICAgLyoKKyAgICAqIElmIHRoZSBjYWxsZXIgaXMgaW4gdGhlIE5TUEUsIGl0IGlzIElNUExFTUVOVEFUSU9OIERFRklORUQgd2hldGhlcgorICAgICogYSBQUk9HUkFNTUVSIEVSUk9SIHdpbGwgcGFuaWMgb3IgcmV0dXJuIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQuCisgICAgKiBGb3IgU1BFIGNhbGxlciwgaXQgbXVzdCBwYW5pYy4KKyAgICAqLworICAgaWYgKGNhbGxlciA9PSBOT05TRUNVUkUgJiYgaGFuZGxlID09IFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpCisgICB7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKKyAgIH0KKworICAgLyogSWYgUFJPR1JBTU1FUiBFUlJPUiByZXN1bHRzIGludG8gcGFuaWMgdGhlbiBjb250cm9sIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZSAqLwogICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwKICAgICAgICAgICAiXHRTVFJJQ1QgcG9saWN5IHdpdGggaGlnaGVyIG1pbm9yIHZlcnNpb24gc2hvdWxkIGhhdmUgZmFpbGVkIGJ1dCBzdWNjZWVkZWRcbiIsIDApOwogCkBAIC03NCw2ICs5NCw1IEBACiAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CiAgICB9CiAKLSAgICh2b2lkKShoYW5kbGUpOwogICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA1L3Rlc3Rfc3VwcF9pMDA1LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwNS90ZXN0X3N1cHBfaTAwNS5jCmluZGV4IGI1MGM1NDguLjdlODE5ZjggMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA1L3Rlc3Rfc3VwcF9pMDA1LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDUvdGVzdF9zdXBwX2kwMDUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsOCArMTUsMTMgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKIAogaW50MzJfdCBzZXJ2ZXJfdGVzdF9zdHJpY3RfcG9saWN5X2hpZ2hlcl9taW5vcl92ZXJzaW9uKHZvaWQpOwogCkBAIC0zMSwxNCArMzYsMjEgQEAKICAgICBpbnQzMl90ICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwogICAgIHBzYV9tc2dfdCAgICAgICBtc2cgPSB7MH07CiAKLSAgICB2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cyk7Ci0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9TVFJJQ1RfTUlOT1JfVkVSU0lPTl9TSUcsICZtc2cpOworICAgIHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cyk7CisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfU1RSSUNUX01JTk9SX1ZFUlNJT05fU0lHLCAmbXNnKTsKIAogICAgIC8qIFNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZSAqLwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCiAgICAgewogICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOwogICAgIH0KLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisKKyAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KKyAgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCisgICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICB9CisKKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSUQ7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwNi90ZXN0X2kwMDYuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA2L3Rlc3RfaTAwNi5jCmluZGV4IDYzNTZiOWMuLjNmMWY2ZWIgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA2L3Rlc3RfaTAwNi5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA2L3Rlc3RfaTAwNi5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDA2LmgiCkBAIC0zNiwxOCArMzYsMjggQEAKICAgIHBzYV9oYW5kbGVfdCAgICAgICBoYW5kbGUgPSAwOwogICAgYm9vdF9zdGF0ZV90ICAgICAgIGJvb3Rfc3RhdGU7CiAKLSAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazFdIFRlc3QgU1RSSUNUIHBvbGljeSB3aXRoIGxvd2VyIG1pbm9yIHZlcnNpb25cbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDFdIFRlc3QgU1RSSUNUIHBvbGljeSB3aXRoIGxvd2VyIG1pbm9yIHZlcnNpb25cbiIsIDApOwogCi0gICAvKiBUZXN0IGlzIHRhcmdldGluZyBmYXRhbCBlcnJvciBjb25kaXRpb24gYW5kIGl0IHdpbGwgZXhwZWN0IGFuIGVycm9yIHJlY292ZXJ5KHJlYm9vdCkKLSAgICAqIHRvIGhhcHBlbi4gVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCB3YXMgaW50ZW5kZWQgYXMgcGVyIHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCisgICAvKgorICAgICogVGhpcyB0ZXN0IGNoZWNrcyBmb3IgdGhlIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uIGZvciB0aGUgUFNBIEFQSS4gQVBJJ3MgcmVzcG9uZCB0bworICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb3VsZCBiZSBlaXRoZXIgdG8gcmV0dXJuIGFwcHJvcHJpYXRlIHN0YXR1cyBjb2RlIG9yIHBhbmljIHRoZSBjYWxsZXIuCisgICAgKiBXaGVuIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pY3MsIHRoZSBTUEUgY2Fubm90IGNvbnRpbnVlIG5vcm1hbCBleGVjdXRpb24sIGFzIGRlZmluZWQKKyAgICAqIGluIHRoaXMgc3BlY2lmaWNhdGlvbi4gVGhlIGJlaGF2aW9yIG9mIHRoZSBTUE0gZm9sbG93aW5nIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pYyBpcworICAgICogSU1QTEVNRU5UQVRJT04gREVGSU5FRC0gQXJtIHJlY29tbWVuZHMgdGhhdCB0aGUgU1BNIGNhdXNlcyB0aGUgc3lzdGVtIHRvIHJlc3RhcnQgaW4KKyAgICAqIHRoaXMgc2l0dWF0aW9uLiBSZWZlciBQU0EtRkYgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFuaWMuCisgICAgKiBGb3IgdGhlIGNhc2VzIHdoZXJlLCBTUE0gY2Fubm90IGNhcGFibGUgdG8gcmVib290IHRoZSBzeXN0ZW0gKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93biksCisgICAgKiBhIHdhdGNoZG9nIHRpbWVyIHNldCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LiBUaGlzIHdpbGwKKyAgICAqIHRlc3RzIGNvbnRpbnVpdHkgYW5kIGFibGUgdG8ganVtcCB0byBuZXh0IHRlc3RzLiBUaGVyZWZvcmUsIGVhY2ggdGVzdCB3aG8gY2hlY2tzIGZvcgorICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24sIGV4cGVjdHMgc3lzdGVtIHRvIGdldCByZXNldCBlaXRoZXIgYnkgU1BNIG9yIHdhdGNoZG9nIHNldCBieQorICAgICogdGhlIHRlc3QgaGFybmVzcyBmdW5jdGlvbi4KKyAgICAqCisgICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKKyAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KKyAgICAqCisgICAgKiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIGFzIGludGVuZGVkIGJ5IHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCiAgICAgKiBkdWUgdG8gb3RoZXIgcmVhc29ucywgdGVzdCBpcyBzZXR0aW5nIGEgYm9vdCBzaWduYXR1cmUgaW50byBub24tdm9sYXRpbGUgbWVtb3J5IGJlZm9yZSBhbmQKICAgICAqIGFmdGVyIHRhcmdldGVkIHRlc3QgY2hlY2suIEFmdGVyIGEgcmVib290LCB0aGVzZSBib290IHNpZ25hdHVyZXMgYXJlIGJlaW5nIHJlYWQgYnkgdGhlCiAgICAgKiBWQUwgQVBJcyB0byBkZWNpZGUgdGVzdCBzdGF0dXMuCi0gICAgKgotICAgICogTm90ZTogSWYgU1BNIGlzIG5vdCBjYXBhYmxlIG9mIHJlYm9vdGluZyAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSBpbiBmYXRhbCBlcnJvciBjb25kaXRpb24sCi0gICAgKiBhIHdhdGNoZG9nIHRpbWVyIGVuYWJsZWQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4KLSAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZwotICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgogICAgICovCiAKICAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLwpAQCAtNTgsMTAgKzY4LDIwIEBACiAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CiAgICB9CiAKLSAgIC8qVmVyc2lvbiBwb2xpY3kgaXMgc3RyaWN0IGFuZCByZXF1ZXN0ZWQgdmVyc2lvbiBpcyBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gdmVyc2lvbiAqLworICAgLyogVmVyc2lvbiBwb2xpY3kgaXMgc3RyaWN0IGFuZCByZXF1ZXN0ZWQgdmVyc2lvbiBpcyBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gdmVyc2lvbiAqLwogICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9TVFJJQ1RfTUlOT1JfVkVSU0lPTl9TSUQsIDEpOwogCi0gICAvKiBTaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KKyAgIC8qCisgICAgKiBJZiB0aGUgY2FsbGVyIGlzIGluIHRoZSBOU1BFLCBpdCBpcyBJTVBMRU1FTlRBVElPTiBERUZJTkVEIHdoZXRoZXIKKyAgICAqIGEgUFJPR1JBTU1FUiBFUlJPUiB3aWxsIHBhbmljIG9yIHJldHVybiBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VELgorICAgICogRm9yIFNQRSBjYWxsZXIsIGl0IG11c3QgcGFuaWMuCisgICAgKi8KKyAgIGlmIChjYWxsZXIgPT0gTk9OU0VDVVJFICYmIGhhbmRsZSA9PSBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKQorICAgeworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICB9CisKKyAgIC8qIElmIFBST0dSQU1NRVIgRVJST1IgcmVzdWx0cyBpbnRvIHBhbmljIHRoZW4gY29udHJvbCBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsCiAgICAgICAgICAgICJcdFNUUklDVCBwb2xpY3kgd2l0aCBsb3dlciBtaW5vciB2ZXJzaW9uIHNob3VsZCBoYXZlIGZhaWxlZCBidXQgc3VjY2VlZGVkXG4iLCAwKTsKIApAQCAtNzIsNiArOTIsNSBAQAogICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwogICAgfQogCi0gICAodm9pZCkoaGFuZGxlKTsKICAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwNi90ZXN0X3N1cHBfaTAwNi5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDYvdGVzdF9zdXBwX2kwMDYuYwppbmRleCBiMWNkOTVlLi43ODMxZDA2IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwNi90ZXN0X3N1cHBfaTAwNi5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA2L3Rlc3Rfc3VwcF9pMDA2LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDggKzE1LDEzIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CiAKIGludDMyX3Qgc2VydmVyX3Rlc3Rfc3RyaWN0X3BvbGljeV9sb3dlcl9taW5vcl92ZXJzaW9uKHZvaWQpOwogCkBAIC0zMSwxNCArMzYsMjEgQEAKICAgICBpbnQzMl90ICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwogICAgIHBzYV9tc2dfdCAgICAgICBtc2cgPSB7MH07CiAKLSAgICB2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cyk7Ci0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpOworICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1NUUklDVF9NSU5PUl9WRVJTSU9OX1NJRywgJm1zZyk7CiAKICAgICAvKiBTaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQorICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQogICAgIHsKICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKICAgICB9Ci0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworCisgICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCisgICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgfQorCisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDcvdGVzdF9pMDA3LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwNy90ZXN0X2kwMDcuYwppbmRleCA1MThjMTNiLi5jOTBkZmZjIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwNy90ZXN0X2kwMDcuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwNy90ZXN0X2kwMDcuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTAwNy5oIgpAQCAtMzYsMTggKzM2LDI4IEBACiAgICBwc2FfaGFuZGxlX3QgICAgICAgaGFuZGxlID0gMDsKICAgIGJvb3Rfc3RhdGVfdCAgICAgICBib290X3N0YXRlOwogCi0gICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sxXSBUZXN0IFJFTEFYIHBvbGljeSB3aXRoIGhpZ2hlciBtaW5vciB2ZXJzaW9uXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAxXSBUZXN0IFJFTEFYIHBvbGljeSB3aXRoIGhpZ2hlciBtaW5vciB2ZXJzaW9uXG4iLCAwKTsKIAotICAgLyogVGVzdCBpcyB0YXJnZXRpbmcgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCBpdCB3aWxsIGV4cGVjdCBhbiBlcnJvciByZWNvdmVyeShyZWJvb3QpCi0gICAgKiB0byBoYXBwZW4uIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgd2FzIGludGVuZGVkIGFzIHBlciB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgLyoKKyAgICAqIFRoaXMgdGVzdCBjaGVja3MgZm9yIHRoZSBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiBmb3IgdGhlIFBTQSBBUEkuIEFQSSdzIHJlc3BvbmQgdG8KKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY291bGQgYmUgZWl0aGVyIHRvIHJldHVybiBhcHByb3ByaWF0ZSBzdGF0dXMgY29kZSBvciBwYW5pYyB0aGUgY2FsbGVyLgorICAgICogV2hlbiBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWNzLCB0aGUgU1BFIGNhbm5vdCBjb250aW51ZSBub3JtYWwgZXhlY3V0aW9uLCBhcyBkZWZpbmVkCisgICAgKiBpbiB0aGlzIHNwZWNpZmljYXRpb24uIFRoZSBiZWhhdmlvciBvZiB0aGUgU1BNIGZvbGxvd2luZyBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWMgaXMKKyAgICAqIElNUExFTUVOVEFUSU9OIERFRklORUQtIEFybSByZWNvbW1lbmRzIHRoYXQgdGhlIFNQTSBjYXVzZXMgdGhlIHN5c3RlbSB0byByZXN0YXJ0IGluCisgICAgKiB0aGlzIHNpdHVhdGlvbi4gUmVmZXIgUFNBLUZGIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhbmljLgorICAgICogRm9yIHRoZSBjYXNlcyB3aGVyZSwgU1BNIGNhbm5vdCBjYXBhYmxlIHRvIHJlYm9vdCB0aGUgc3lzdGVtIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBzZXQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4gVGhpcyB3aWxsCisgICAgKiB0ZXN0cyBjb250aW51aXR5IGFuZCBhYmxlIHRvIGp1bXAgdG8gbmV4dCB0ZXN0cy4gVGhlcmVmb3JlLCBlYWNoIHRlc3Qgd2hvIGNoZWNrcyBmb3IKKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uLCBleHBlY3RzIHN5c3RlbSB0byBnZXQgcmVzZXQgZWl0aGVyIGJ5IFNQTSBvciB3YXRjaGRvZyBzZXQgYnkKKyAgICAqIHRoZSB0ZXN0IGhhcm5lc3MgZnVuY3Rpb24uCisgICAgKgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKgorICAgICogVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCBhcyBpbnRlbmRlZCBieSB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAogICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCiAgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQogICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgotICAgICoKLSAgICAqIE5vdGU6IElmIFNQTSBpcyBub3QgY2FwYWJsZSBvZiByZWJvb3RpbmcgKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93bikgaW4gZmF0YWwgZXJyb3IgY29uZGl0aW9uLAotICAgICogYSB3YXRjaGRvZyB0aW1lciBlbmFibGVkIGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuCi0gICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKLSAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KICAgICAqLwogCiAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KQEAgLTU4LDEwICs2OCwyMCBAQAogICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwogICAgfQogCi0gICAvKlZlcnNpb24gcG9saWN5IGlzIHJlbGF4ZWQgYW5kIHJlcXVlc3RlZCB2ZXJzaW9uIGlzIGhpZ2hlciB0aGFuIHRoZSBtaW5pbXVtIHZlcnNpb24gKi8KKyAgIC8qIFZlcnNpb24gcG9saWN5IGlzIHJlbGF4ZWQgYW5kIHJlcXVlc3RlZCB2ZXJzaW9uIGlzIGhpZ2hlciB0aGFuIHRoZSBtaW5pbXVtIHZlcnNpb24gKi8KICAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfUkVMQVhfTUlOT1JfVkVSU0lPTl9TSUQsIDMpOwogCi0gICAvKiBTaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KKyAgIC8qCisgICAgKiBJZiB0aGUgY2FsbGVyIGlzIGluIHRoZSBOU1BFLCBpdCBpcyBJTVBMRU1FTlRBVElPTiBERUZJTkVEIHdoZXRoZXIKKyAgICAqIGEgUFJPR1JBTU1FUiBFUlJPUiB3aWxsIHBhbmljIG9yIHJldHVybiBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VELgorICAgICogRm9yIFNQRSBjYWxsZXIsIGl0IG11c3QgcGFuaWMuCisgICAgKi8KKyAgIGlmIChjYWxsZXIgPT0gTk9OU0VDVVJFICYmIGhhbmRsZSA9PSBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKQorICAgeworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICB9CisKKyAgIC8qIElmIFBST0dSQU1NRVIgRVJST1IgcmVzdWx0cyBpbnRvIHBhbmljIHRoZW4gY29udHJvbCBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsCiAgICAgICAgICAiXHRSRUxBWEVEIHBvbGljeSB3aXRoIGhpZ2hlciBtaW5vciB2ZXJzaW9uIHNob3VsZCBoYXZlIGZhaWxlZCBidXQgc3VjY2VlZGVkXG4iLCAwKTsKIApAQCAtNzIsNiArOTIsNSBAQAogICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwogICAgfQogCi0gICAodm9pZCkoaGFuZGxlKTsKICAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwNy90ZXN0X3N1cHBfaTAwNy5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDcvdGVzdF9zdXBwX2kwMDcuYwppbmRleCBkZDcwM2YyLi5lMjBkNDI1IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwNy90ZXN0X3N1cHBfaTAwNy5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA3L3Rlc3Rfc3VwcF9pMDA3LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDggKzE1LDEzIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CiAKIGludDMyX3Qgc2VydmVyX3Rlc3RfcmVsYXhfcG9saWN5X2hpZ2hlcl9taW5vcl92ZXJzaW9uKHZvaWQpOwogCkBAIC0zMSwxNCArMzYsMjEgQEAKICAgICBpbnQzMl90ICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwogICAgIHBzYV9tc2dfdCAgICAgICBtc2cgPSB7MH07CiAKLSAgICB2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cyk7Ci0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9SRUxBWF9NSU5PUl9WRVJTSU9OX1NJRywgJm1zZyk7CisgICAgdmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKTsKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9SRUxBWF9NSU5PUl9WRVJTSU9OX1NJRywgJm1zZyk7CiAKICAgICAvKiBTaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQorICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQogICAgIHsKICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKICAgICB9Ci0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworCisgICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCisgICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgfQorCisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDgvdGVzdF9pMDA4LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwOC90ZXN0X2kwMDguYwppbmRleCAxODkwNzU0Li43ODUwMjZlIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwOC90ZXN0X2kwMDguYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwOC90ZXN0X2kwMDguYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTAwOC5oIgpAQCAtMzYsMzggKzM2LDU5IEBACiAgICBpbnQzMl90ICAgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwogICAgcHNhX2hhbmRsZV90ICAgICAgIGhhbmRsZSA9IDA7CiAKLSAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazFdIFRlc3Qgc2VjdXJlIGFjY2VzcyBvbmx5IGNvbm5lY3Rpb25cbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDFdIFRlc3Qgc2VjdXJlIGFjY2VzcyBvbmx5IGNvbm5lY3Rpb25cbiIsIDApOwogCi0gICAvKiBUZXN0IGlzIHRhcmdldGluZyBmYXRhbCBlcnJvciBjb25kaXRpb24gYW5kIGl0IHdpbGwgZXhwZWN0IGFuIGVycm9yIHJlY292ZXJ5KHJlYm9vdCkKLSAgICAqIHRvIGhhcHBlbi4gVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCB3YXMgaW50ZW5kZWQgYXMgcGVyIHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCisgICAvKgorICAgICogVGhpcyB0ZXN0IGNoZWNrcyBmb3IgdGhlIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uIGZvciB0aGUgUFNBIEFQSS4gQVBJJ3MgcmVzcG9uZCB0bworICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb3VsZCBiZSBlaXRoZXIgdG8gcmV0dXJuIGFwcHJvcHJpYXRlIHN0YXR1cyBjb2RlIG9yIHBhbmljIHRoZSBjYWxsZXIuCisgICAgKiBXaGVuIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pY3MsIHRoZSBTUEUgY2Fubm90IGNvbnRpbnVlIG5vcm1hbCBleGVjdXRpb24sIGFzIGRlZmluZWQKKyAgICAqIGluIHRoaXMgc3BlY2lmaWNhdGlvbi4gVGhlIGJlaGF2aW9yIG9mIHRoZSBTUE0gZm9sbG93aW5nIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pYyBpcworICAgICogSU1QTEVNRU5UQVRJT04gREVGSU5FRC0gQXJtIHJlY29tbWVuZHMgdGhhdCB0aGUgU1BNIGNhdXNlcyB0aGUgc3lzdGVtIHRvIHJlc3RhcnQgaW4KKyAgICAqIHRoaXMgc2l0dWF0aW9uLiBSZWZlciBQU0EtRkYgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFuaWMuCisgICAgKiBGb3IgdGhlIGNhc2VzIHdoZXJlLCBTUE0gY2Fubm90IGNhcGFibGUgdG8gcmVib290IHRoZSBzeXN0ZW0gKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93biksCisgICAgKiBhIHdhdGNoZG9nIHRpbWVyIHNldCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LiBUaGlzIHdpbGwKKyAgICAqIHRlc3RzIGNvbnRpbnVpdHkgYW5kIGFibGUgdG8ganVtcCB0byBuZXh0IHRlc3RzLiBUaGVyZWZvcmUsIGVhY2ggdGVzdCB3aG8gY2hlY2tzIGZvcgorICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24sIGV4cGVjdHMgc3lzdGVtIHRvIGdldCByZXNldCBlaXRoZXIgYnkgU1BNIG9yIHdhdGNoZG9nIHNldCBieQorICAgICogdGhlIHRlc3QgaGFybmVzcyBmdW5jdGlvbi4KKyAgICAqCisgICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKKyAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KKyAgICAqCisgICAgKiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIGFzIGludGVuZGVkIGJ5IHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCiAgICAgKiBkdWUgdG8gb3RoZXIgcmVhc29ucywgdGVzdCBpcyBzZXR0aW5nIGEgYm9vdCBzaWduYXR1cmUgaW50byBub24tdm9sYXRpbGUgbWVtb3J5IGJlZm9yZSBhbmQKICAgICAqIGFmdGVyIHRhcmdldGVkIHRlc3QgY2hlY2suIEFmdGVyIGEgcmVib290LCB0aGVzZSBib290IHNpZ25hdHVyZXMgYXJlIGJlaW5nIHJlYWQgYnkgdGhlCiAgICAgKiBWQUwgQVBJcyB0byBkZWNpZGUgdGVzdCBzdGF0dXMuCi0gICAgKgotICAgICogTm90ZTogSWYgU1BNIGlzIG5vdCBjYXBhYmxlIG9mIHJlYm9vdGluZyAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSBpbiBmYXRhbCBlcnJvciBjb25kaXRpb24sCi0gICAgKiBhIHdhdGNoZG9nIHRpbWVyIGVuYWJsZWQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4KLSAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZwotICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgogICAgICovCiAKLSAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayBmb3IgTlMqLwotICAgaWYoY2FsbGVyID09IE5PTlNFQ1VSRSkKKyAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayBmb3IgTlMgKi8KKyAgIGlmIChjYWxsZXIgPT0gTk9OU0VDVVJFKQogICAgewogICAgICAgIHN0YXR1cyA9IHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKTsKICAgIH0KLSAgIGlmKFZBTF9FUlJPUihzdGF0dXMpKQorICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQogICAgewogICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CiAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgIH0KLSAgIC8qIEJlbG93IHBzYV9jb25uZWN0IHNob3VsZCBub3QgcmV0dXJuIGZvciBjYWxsIGZyb20gbnNwZSBhbmQKLSAgICAqIHNob3VsZCBzdWNjZWVkIGZvciBjYWxsIGZyb20gc3BlCisKKyAgIC8qCisgICAgKiBJdCBpcyBQUk9HUkFNTUVSIEVSUk9SIHRvIGNvbm5lY3QgdG8gc2VjdXJlIG9ubHkgYWNjZXNzIHNlcnZpY2UgZnJvbSBuc3BlLgorICAgICogV2hlcmVhcyBjYWxsIHNob3VsZCBzdWNjZWVkIGlmIGNhbGxlZCBmcm9tIHNwZS4KICAgICAqLwogICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9TRUNVUkVfQ09OTkVDVF9PTkxZX1NJRCwgMSk7CiAKLSAgIGlmKGNhbGxlciA9PSBOT05TRUNVUkUpCisgICBpZiAoY2FsbGVyID09IE5PTlNFQ1VSRSkKICAgIHsKLSAgICAgICAgLyogU2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlIGZvciBOUyBydW4qLworICAgICAgIC8qCisgICAgICAgICogSWYgdGhlIGNhbGxlciBpcyBpbiB0aGUgTlNQRSwgaXQgaXMgSU1QTEVNRU5UQVRJT04gREVGSU5FRCB3aGV0aGVyCisgICAgICAgICogYSBQUk9HUkFNTUVSIEVSUk9SIHdpbGwgcGFuaWMgb3IgcmV0dXJuIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQuCisgICAgICAgICovCisgICAgICAgIGlmIChoYW5kbGUgPT0gUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorCisgICAgICAgIC8qIElmIFBST0dSQU1NRVIgRVJST1IgcmVzdWx0cyBpbnRvIHBhbmljIHRoZW4gY29udHJvbCBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0U2VjdXJlIGFjY2VzcyBvbmx5IGNvbm5lY3Rpb24gdGVzdCBmYWlsZWQgZm9yIE5TIHJ1blxuIiwgMCk7CiAKICAgICAgICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCkBAIC03NiwxMSArOTcsMTEgQEAKICAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKICAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwogICAgICAgICB9Ci0gICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKKyAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKICAgIH0KIAogICAgLyogU2hvdWxkIHJldHVybiBwb3NpdGl2ZSBoYW5kbGUgZm9yIFNQRSBjb25uZWN0aW9uICovCi0gICBpZihoYW5kbGUgPiAwKQorICAgaWYgKGhhbmRsZSA+IDApCiAgICB7CiAgICAgICBwc2EtPmNsb3NlKGhhbmRsZSk7CiAgICB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwOC90ZXN0X3N1cHBfaTAwOC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDgvdGVzdF9zdXBwX2kwMDguYwppbmRleCA3MTE2MjFlLi4yMjg2OGQzIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwOC90ZXN0X3N1cHBfaTAwOC5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA4L3Rlc3Rfc3VwcF9pMDA4LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDggKzE1LDEzIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CiAKIGludDMyX3Qgc2VydmVyX3Rlc3Rfc2VjdXJlX2FjY2Vzc19vbmx5X2Nvbm5lY3Rpb24odm9pZCk7CiAKQEAgLTMxLDIwICszNiwzOCBAQAogICAgIGludDMyX3QgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CiAgICAgcHNhX21zZ190ICAgICAgIG1zZyA9IHswfTsKIAotICAgIHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKTsKLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1NFQ1VSRV9DT05ORUNUX09OTFlfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQorICAgIHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cyk7CisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfU0VDVVJFX0NPTk5FQ1RfT05MWV9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9TRUNVUkVfQ09OTkVDVF9PTkxZX1NJRywgJm1zZyk7Ci0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKKyAgICBpZiAobXNnLmNsaWVudF9pZCA8IDApCisgICAgeworICAgICAgICAvKgorCQkgKiBDb250cm9sIHNob3VsZG4ndCBjb21lIGhlcmUuIE5TIGNsaWVudCBzaG91bGQgZ2V0IHBhbmljLgorCQkgKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QuCisJCSAqICovCisgICAgICAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgICAgICAgeworICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgIH0KKworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19TUE1fRkFJTEVEOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICB9CisKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9TRUNVUkVfQ09OTkVDVF9PTkxZX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMyksIHN0YXR1cykpCiAgICAgewogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogICAgIHJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwOS90ZXN0X2kwMDkuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA5L3Rlc3RfaTAwOS5jCmluZGV4IGFhMDVhNzkuLjliYjdjNWIgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA5L3Rlc3RfaTAwOS5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA5L3Rlc3RfaTAwOS5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDA5LmgiCkBAIC0zNSwxOCArMzUsMjggQEAKIHsKICAgIHBzYV9oYW5kbGVfdCAgICAgICBoYW5kbGUgPSAwOwogCi0gICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sxXSBUZXN0IHVuZXh0ZXJuIFNJRCBjb25uZWN0aW9uXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAxXSBUZXN0IHVuZXh0ZXJuIFNJRCBjb25uZWN0aW9uXG4iLCAwKTsKIAotICAgLyogVGVzdCBpcyB0YXJnZXRpbmcgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCBpdCB3aWxsIGV4cGVjdCBhbiBlcnJvciByZWNvdmVyeShyZWJvb3QpCi0gICAgKiB0byBoYXBwZW4uIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgd2FzIGludGVuZGVkIGFzIHBlciB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgLyoKKyAgICAqIFRoaXMgdGVzdCBjaGVja3MgZm9yIHRoZSBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiBmb3IgdGhlIFBTQSBBUEkuIEFQSSdzIHJlc3BvbmQgdG8KKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY291bGQgYmUgZWl0aGVyIHRvIHJldHVybiBhcHByb3ByaWF0ZSBzdGF0dXMgY29kZSBvciBwYW5pYyB0aGUgY2FsbGVyLgorICAgICogV2hlbiBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWNzLCB0aGUgU1BFIGNhbm5vdCBjb250aW51ZSBub3JtYWwgZXhlY3V0aW9uLCBhcyBkZWZpbmVkCisgICAgKiBpbiB0aGlzIHNwZWNpZmljYXRpb24uIFRoZSBiZWhhdmlvciBvZiB0aGUgU1BNIGZvbGxvd2luZyBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWMgaXMKKyAgICAqIElNUExFTUVOVEFUSU9OIERFRklORUQtIEFybSByZWNvbW1lbmRzIHRoYXQgdGhlIFNQTSBjYXVzZXMgdGhlIHN5c3RlbSB0byByZXN0YXJ0IGluCisgICAgKiB0aGlzIHNpdHVhdGlvbi4gUmVmZXIgUFNBLUZGIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhbmljLgorICAgICogRm9yIHRoZSBjYXNlcyB3aGVyZSwgU1BNIGNhbm5vdCBjYXBhYmxlIHRvIHJlYm9vdCB0aGUgc3lzdGVtIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBzZXQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4gVGhpcyB3aWxsCisgICAgKiB0ZXN0cyBjb250aW51aXR5IGFuZCBhYmxlIHRvIGp1bXAgdG8gbmV4dCB0ZXN0cy4gVGhlcmVmb3JlLCBlYWNoIHRlc3Qgd2hvIGNoZWNrcyBmb3IKKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uLCBleHBlY3RzIHN5c3RlbSB0byBnZXQgcmVzZXQgZWl0aGVyIGJ5IFNQTSBvciB3YXRjaGRvZyBzZXQgYnkKKyAgICAqIHRoZSB0ZXN0IGhhcm5lc3MgZnVuY3Rpb24uCisgICAgKgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKgorICAgICogVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCBhcyBpbnRlbmRlZCBieSB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAogICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCiAgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQogICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgotICAgICoKLSAgICAqIE5vdGU6IElmIFNQTSBpcyBub3QgY2FwYWJsZSBvZiByZWJvb3RpbmcgKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93bikgaW4gZmF0YWwgZXJyb3IgY29uZGl0aW9uLAotICAgICogYSB3YXRjaGRvZyB0aW1lciBlbmFibGVkIGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuCi0gICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKLSAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KICAgICAqLwogCiAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KQEAgLTU2LDEwICs2NiwxNCBAQAogICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwogICAgfQogCisgICAvKgorCSogSWYgYWNjZXNzIGJldHdlZW4gYSBjbGllbnQgU2VjdXJlIFBhcnRpdGlvbiBhbmQgYW4gUm9UIFNlcnZpY2UgaXMgbm90IHNwZWNpZmllZCBpbgorCSogdGhlIG1hbmlmZXN0LCB0aGVuIHRoZSBjbGllbnQgaXMgbm90IGFsbG93ZWQgdG8gY29ubmVjdCB0byB0aGUgUm9UIFNlcnZpY2UuCisgICAgKi8KICAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfVU5FWFRFUk5fU0lELCAyKTsKIAotICAgLyogU2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCi0gICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHR1bmV4dGVybiBTSUQgY29ubmVjdGlvbiBzaG91bGQgaGF2ZSBmYWlsZWQgYnV0IHN1Y2Nlc3NlZFxuIiwgMCk7CisgICAvKiBJZiBQUk9HUkFNTUVSIEVSUk9SIHJlc3VsdHMgaW50byBwYW5pYyB0aGVuIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHR1bmV4dGVybiBTSUQgY29ubmVjdGlvbiBzaG91bGQgaGF2ZSBmYWlsZWQgYnV0IHN1Y2NlZWRcbiIsIDApOwogCiAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KICAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA5L3Rlc3Rfc3VwcF9pMDA5LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAwOS90ZXN0X3N1cHBfaTAwOS5jCmluZGV4IDg2NGYzOWIuLmEwZjFjY2EgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDA5L3Rlc3Rfc3VwcF9pMDA5LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMDkvdGVzdF9zdXBwX2kwMDkuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsOCArMTUsMTMgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKIAogaW50MzJfdCBzZXJ2ZXJfdGVzdF91bmV4dGVybl9zaWRfY29ubmVjdGlvbih2b2lkKTsKIApAQCAtMzEsMTQgKzM2LDIxIEBACiAgICAgaW50MzJfdCAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKICAgICBwc2FfbXNnX3QgICAgICAgbXNnID0gezB9OwogCi0gICAgdmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpOwotICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5FWFRFUk5fU0lHLCAmbXNnKTsKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpOworICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VORVhURVJOX1NJRywgJm1zZyk7CiAKICAgICAvKiBTaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQorICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQogICAgIHsKICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKICAgICB9Ci0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworCisgICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCisgICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgfQorCisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTAvdGVzdF9pMDEwLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxMC90ZXN0X2kwMTAuYwppbmRleCA5NTk5NDg1Li42NWIwNmMxIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxMC90ZXN0X2kwMTAuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxMC90ZXN0X2kwMTAuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTAxMC5oIgpAQCAtMzcsMTggKzM3LDI4IEBACiAgICBib290X3N0YXRlX3QgICAgICAgYm9vdF9zdGF0ZTsKIAogICAgdmFsLT5wcmludChQUklOVF9URVNULAotICAgICAgICAiW0NoZWNrMV0gVGVzdCB1bi1zcGVjaWZpZWQgbWlub3JfcG9saWN5IHdpdGggaGlnaGVyIG1pbm9yIHZlcnNpb25cbiIsIDApOworICAgICAgICAiW0NoZWNrIDFdIFRlc3QgdW4tc3BlY2lmaWVkIG1pbm9yX3BvbGljeSB3aXRoIGhpZ2hlciBtaW5vciB2ZXJzaW9uXG4iLCAwKTsKIAotICAgLyogVGVzdCBpcyB0YXJnZXRpbmcgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCBpdCB3aWxsIGV4cGVjdCBhbiBlcnJvciByZWNvdmVyeShyZWJvb3QpCi0gICAgKiB0byBoYXBwZW4uIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgd2FzIGludGVuZGVkIGFzIHBlciB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgLyoKKyAgICAqIFRoaXMgdGVzdCBjaGVja3MgZm9yIHRoZSBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiBmb3IgdGhlIFBTQSBBUEkuIEFQSSdzIHJlc3BvbmQgdG8KKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY291bGQgYmUgZWl0aGVyIHRvIHJldHVybiBhcHByb3ByaWF0ZSBzdGF0dXMgY29kZSBvciBwYW5pYyB0aGUgY2FsbGVyLgorICAgICogV2hlbiBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWNzLCB0aGUgU1BFIGNhbm5vdCBjb250aW51ZSBub3JtYWwgZXhlY3V0aW9uLCBhcyBkZWZpbmVkCisgICAgKiBpbiB0aGlzIHNwZWNpZmljYXRpb24uIFRoZSBiZWhhdmlvciBvZiB0aGUgU1BNIGZvbGxvd2luZyBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWMgaXMKKyAgICAqIElNUExFTUVOVEFUSU9OIERFRklORUQtIEFybSByZWNvbW1lbmRzIHRoYXQgdGhlIFNQTSBjYXVzZXMgdGhlIHN5c3RlbSB0byByZXN0YXJ0IGluCisgICAgKiB0aGlzIHNpdHVhdGlvbi4gUmVmZXIgUFNBLUZGIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhbmljLgorICAgICogRm9yIHRoZSBjYXNlcyB3aGVyZSwgU1BNIGNhbm5vdCBjYXBhYmxlIHRvIHJlYm9vdCB0aGUgc3lzdGVtIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBzZXQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4gVGhpcyB3aWxsCisgICAgKiB0ZXN0cyBjb250aW51aXR5IGFuZCBhYmxlIHRvIGp1bXAgdG8gbmV4dCB0ZXN0cy4gVGhlcmVmb3JlLCBlYWNoIHRlc3Qgd2hvIGNoZWNrcyBmb3IKKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uLCBleHBlY3RzIHN5c3RlbSB0byBnZXQgcmVzZXQgZWl0aGVyIGJ5IFNQTSBvciB3YXRjaGRvZyBzZXQgYnkKKyAgICAqIHRoZSB0ZXN0IGhhcm5lc3MgZnVuY3Rpb24uCisgICAgKgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKgorICAgICogVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCBhcyBpbnRlbmRlZCBieSB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAogICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCiAgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQogICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgotICAgICoKLSAgICAqIE5vdGU6IElmIFNQTSBpcyBub3QgY2FwYWJsZSBvZiByZWJvb3RpbmcgKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93bikgaW4gZmF0YWwgZXJyb3IgY29uZGl0aW9uLAotICAgICogYSB3YXRjaGRvZyB0aW1lciBlbmFibGVkIGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuCi0gICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKLSAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KICAgICAqLwogCiAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KQEAgLTU5LDkgKzY5LDI0IEBACiAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CiAgICB9CiAKKyAgIC8qCisgICAgKiBUaGUgbWlub3JfdmVyc2lvbiBhbmQgbWlub3JfcG9saWN5IGF0dHJpYnV0ZXMgZG8gbm90IG5lZWQgdG8gYmUgc3BlY2lmaWVkLgorICAgICogSWYgdGhleSBhcmUgbm90IHNwZWNpZmllZCBpbiB0aGUgbWFuaWZlc3QsIHRoZSBSb1QgU2VydmljZSB3aWxsIGhhdmUKKyAgICAqIGRlZmF1bHQgYXR0cmlidXRlcyBvZiBtaW5vcl92ZXJzaW9uPTEgYW5kIG1pbm9yX3BvbGljeT0iU1RSSUNUIi4KKyAgICAqLwogICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAzKTsKIAotICAgLyogU2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCisgICAvKgorICAgICogSWYgdGhlIGNhbGxlciBpcyBpbiB0aGUgTlNQRSwgaXQgaXMgSU1QTEVNRU5UQVRJT04gREVGSU5FRCB3aGV0aGVyCisgICAgKiBhIFBST0dSQU1NRVIgRVJST1Igd2lsbCBwYW5pYyBvciByZXR1cm4gUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRC4KKyAgICAqIEZvciBTUEUgY2FsbGVyLCBpdCBtdXN0IHBhbmljLgorICAgICovCisgICBpZiAoY2FsbGVyID09IE5PTlNFQ1VSRSAmJiBoYW5kbGUgPT0gUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCkKKyAgIHsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworICAgfQorCisgICAvKiBJZiBQUk9HUkFNTUVSIEVSUk9SIHJlc3VsdHMgaW50byBwYW5pYyB0aGVuIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCiAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLAogICAgICAgICAiXHR1bi1zcGVjaWZpZWQgcG9saWN5IHdpdGggaGlnaGVyIG1pbm9yIHZlcnNpb24gc2hvdWxkIGhhdmUgZmFpbGVkIGJ1dCBzdWNjZWVkZWRcbiIsIDApOwogCkBAIC03Miw2ICs5Nyw1IEBACiAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CiAgICB9CiAKLSAgICh2b2lkKShoYW5kbGUpOwogICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDEwL3Rlc3Rfc3VwcF9pMDEwLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxMC90ZXN0X3N1cHBfaTAxMC5jCmluZGV4IDQwNjc2MGMuLjZmOGZmYjggMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDEwL3Rlc3Rfc3VwcF9pMDEwLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTAvdGVzdF9zdXBwX2kwMTAuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsOCArMTUsMTMgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKIAogaW50MzJfdCBzZXJ2ZXJfdGVzdF91bnNwZWNpZmllZF9wb2xpY3lfd2l0aF9oaWdoZXJfbWlub3JfdmVyKHZvaWQpOwogCkBAIC0zMSwxNCArMzYsMjAgQEAKICAgICBpbnQzMl90ICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwogICAgIHBzYV9tc2dfdCAgICAgICBtc2cgPSB7MH07CiAKLSAgICB2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cyk7Ci0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpOworICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwogCiAgICAgLyogU2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCi0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKICAgICB7CiAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSUQ7CiAgICAgfQotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKworICAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLworICAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgIH0KKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSUQ7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxMS90ZXN0X2kwMTEuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDExL3Rlc3RfaTAxMS5jCmluZGV4IDY5NjVkYWEuLjgyYzVlMDkgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDExL3Rlc3RfaTAxMS5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDExL3Rlc3RfaTAxMS5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDExLmgiCkBAIC0zNywxOCArMzcsMjggQEAKICAgIGJvb3Rfc3RhdGVfdCAgICAgICBib290X3N0YXRlOwogCiAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsCi0gICAgICAgICJbQ2hlY2sxXSBUZXN0IHVuLXNwZWNpZmllZCBtaW5vcl9wb2xpY3kgd2l0aCBoaWdoZXIgbWlub3IgdmVyc2lvblxuIiwgMCk7CisgICAgICAgICJbQ2hlY2sgMV0gVGVzdCB1bi1zcGVjaWZpZWQgbWlub3JfcG9saWN5IHdpdGggaGlnaGVyIG1pbm9yIHZlcnNpb25cbiIsIDApOwogCi0gICAvKiBUZXN0IGlzIHRhcmdldGluZyBmYXRhbCBlcnJvciBjb25kaXRpb24gYW5kIGl0IHdpbGwgZXhwZWN0IGFuIGVycm9yIHJlY292ZXJ5KHJlYm9vdCkKLSAgICAqIHRvIGhhcHBlbi4gVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCB3YXMgaW50ZW5kZWQgYXMgcGVyIHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCisgICAvKgorICAgICogVGhpcyB0ZXN0IGNoZWNrcyBmb3IgdGhlIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uIGZvciB0aGUgUFNBIEFQSS4gQVBJJ3MgcmVzcG9uZCB0bworICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb3VsZCBiZSBlaXRoZXIgdG8gcmV0dXJuIGFwcHJvcHJpYXRlIHN0YXR1cyBjb2RlIG9yIHBhbmljIHRoZSBjYWxsZXIuCisgICAgKiBXaGVuIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pY3MsIHRoZSBTUEUgY2Fubm90IGNvbnRpbnVlIG5vcm1hbCBleGVjdXRpb24sIGFzIGRlZmluZWQKKyAgICAqIGluIHRoaXMgc3BlY2lmaWNhdGlvbi4gVGhlIGJlaGF2aW9yIG9mIHRoZSBTUE0gZm9sbG93aW5nIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pYyBpcworICAgICogSU1QTEVNRU5UQVRJT04gREVGSU5FRC0gQXJtIHJlY29tbWVuZHMgdGhhdCB0aGUgU1BNIGNhdXNlcyB0aGUgc3lzdGVtIHRvIHJlc3RhcnQgaW4KKyAgICAqIHRoaXMgc2l0dWF0aW9uLiBSZWZlciBQU0EtRkYgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFuaWMuCisgICAgKiBGb3IgdGhlIGNhc2VzIHdoZXJlLCBTUE0gY2Fubm90IGNhcGFibGUgdG8gcmVib290IHRoZSBzeXN0ZW0gKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93biksCisgICAgKiBhIHdhdGNoZG9nIHRpbWVyIHNldCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LiBUaGlzIHdpbGwKKyAgICAqIHRlc3RzIGNvbnRpbnVpdHkgYW5kIGFibGUgdG8ganVtcCB0byBuZXh0IHRlc3RzLiBUaGVyZWZvcmUsIGVhY2ggdGVzdCB3aG8gY2hlY2tzIGZvcgorICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24sIGV4cGVjdHMgc3lzdGVtIHRvIGdldCByZXNldCBlaXRoZXIgYnkgU1BNIG9yIHdhdGNoZG9nIHNldCBieQorICAgICogdGhlIHRlc3QgaGFybmVzcyBmdW5jdGlvbi4KKyAgICAqCisgICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKKyAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KKyAgICAqCisgICAgKiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIGFzIGludGVuZGVkIGJ5IHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCiAgICAgKiBkdWUgdG8gb3RoZXIgcmVhc29ucywgdGVzdCBpcyBzZXR0aW5nIGEgYm9vdCBzaWduYXR1cmUgaW50byBub24tdm9sYXRpbGUgbWVtb3J5IGJlZm9yZSBhbmQKICAgICAqIGFmdGVyIHRhcmdldGVkIHRlc3QgY2hlY2suIEFmdGVyIGEgcmVib290LCB0aGVzZSBib290IHNpZ25hdHVyZXMgYXJlIGJlaW5nIHJlYWQgYnkgdGhlCiAgICAgKiBWQUwgQVBJcyB0byBkZWNpZGUgdGVzdCBzdGF0dXMuCi0gICAgKgotICAgICogTm90ZTogSWYgU1BNIGlzIG5vdCBjYXBhYmxlIG9mIHJlYm9vdGluZyAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSBpbiBmYXRhbCBlcnJvciBjb25kaXRpb24sCi0gICAgKiBhIHdhdGNoZG9nIHRpbWVyIGVuYWJsZWQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4KLSAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZwotICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgogICAgICovCiAKICAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLwpAQCAtNTksOSArNjksMjQgQEAKICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKICAgIH0KIAorICAgLyoKKyAgICAqIFRoZSBtaW5vcl92ZXJzaW9uIGFuZCBtaW5vcl9wb2xpY3kgYXR0cmlidXRlcyBkbyBub3QgbmVlZCB0byBiZSBzcGVjaWZpZWQuCisgICAgKiBJZiB0aGV5IGFyZSBub3Qgc3BlY2lmaWVkIGluIHRoZSBtYW5pZmVzdCwgdGhlIFJvVCBTZXJ2aWNlIHdpbGwgaGF2ZQorICAgICogZGVmYXVsdCBhdHRyaWJ1dGVzIG9mIG1pbm9yX3ZlcnNpb249MSBhbmQgbWlub3JfcG9saWN5PSJTVFJJQ1QiLgorICAgICovCiAgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDApOwogCi0gICAvKiBTaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KKyAgIC8qCisgICAgKiBJZiB0aGUgY2FsbGVyIGlzIGluIHRoZSBOU1BFLCBpdCBpcyBJTVBMRU1FTlRBVElPTiBERUZJTkVEIHdoZXRoZXIKKyAgICAqIGEgUFJPR1JBTU1FUiBFUlJPUiB3aWxsIHBhbmljIG9yIHJldHVybiBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VELgorICAgICogRm9yIFNQRSBjYWxsZXIsIGl0IG11c3QgcGFuaWMuCisgICAgKi8KKyAgIGlmIChjYWxsZXIgPT0gTk9OU0VDVVJFICYmIGhhbmRsZSA9PSBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKQorICAgeworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICB9CisKKyAgIC8qIElmIFBST0dSQU1NRVIgRVJST1IgcmVzdWx0cyBpbnRvIHBhbmljIHRoZW4gY29udHJvbCBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsCiAgICAgICAgICJcdHVuLXNwZWNpZmllZCBwb2xpY3kgd2l0aCBsb3dlciBtaW5vciB2ZXJzaW9uIHNob3VsZCBoYXZlIGZhaWxlZCBidXQgc3VjY2VlZGVkXG4iLCAwKTsKIApAQCAtNzIsNiArOTcsNSBAQAogICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwogICAgfQogCi0gICAodm9pZCkoaGFuZGxlKTsKICAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxMS90ZXN0X3N1cHBfaTAxMS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTEvdGVzdF9zdXBwX2kwMTEuYwppbmRleCBhNGE1ZTIxLi44N2Q0YTRkIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxMS90ZXN0X3N1cHBfaTAxMS5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDExL3Rlc3Rfc3VwcF9pMDExLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDggKzE1LDEzIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CiAKIGludDMyX3Qgc2VydmVyX3Rlc3RfdW5zcGVjaWZpZWRfcG9saWN5X3dpdGhfbG93ZXJfbWlub3JfdmVyKHZvaWQpOwogCkBAIC0zMSwxNCArMzYsMjEgQEAKICAgICBpbnQzMl90ICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwogICAgIHBzYV9tc2dfdCAgICAgICBtc2cgPSB7MH07CiAKLSAgICB2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cyk7Ci0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpOworICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwogCiAgICAgLyogU2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCi0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKICAgICB7CiAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSUQ7CiAgICAgfQotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKworICAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLworICAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgIH0KKworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDEyL3Rlc3RfaTAxMi5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTIvdGVzdF9pMDEyLmMKaW5kZXggMTYyM2Q3Ny4uOWRkYjJmYSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTIvdGVzdF9pMDEyLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTIvdGVzdF9pMDEyLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMTIuaCIKQEAgLTM1LDE4ICszNSwyOCBAQAogewogICAgYm9vdF9zdGF0ZV90ICAgICAgIGJvb3Rfc3RhdGU7CiAKLSAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazFdIFRlc3QgcHNhX2Nsb3NlIHdpdGggaW52YWxpZCBoYW5kbGVcbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDFdIFRlc3QgcHNhX2Nsb3NlIHdpdGggaW52YWxpZCBoYW5kbGVcbiIsIDApOwogCi0gICAvKiBUZXN0IGlzIHRhcmdldGluZyBmYXRhbCBlcnJvciBjb25kaXRpb24gYW5kIGl0IHdpbGwgZXhwZWN0IGFuIGVycm9yIHJlY292ZXJ5KHJlYm9vdCkKLSAgICAqIHRvIGhhcHBlbi4gVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCB3YXMgaW50ZW5kZWQgYXMgcGVyIHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCisgICAvKgorICAgICogVGhpcyB0ZXN0IGNoZWNrcyBmb3IgdGhlIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uIGZvciB0aGUgUFNBIEFQSS4gQVBJJ3MgcmVzcG9uZCB0bworICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb3VsZCBiZSBlaXRoZXIgdG8gcmV0dXJuIGFwcHJvcHJpYXRlIHN0YXR1cyBjb2RlIG9yIHBhbmljIHRoZSBjYWxsZXIuCisgICAgKiBXaGVuIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pY3MsIHRoZSBTUEUgY2Fubm90IGNvbnRpbnVlIG5vcm1hbCBleGVjdXRpb24sIGFzIGRlZmluZWQKKyAgICAqIGluIHRoaXMgc3BlY2lmaWNhdGlvbi4gVGhlIGJlaGF2aW9yIG9mIHRoZSBTUE0gZm9sbG93aW5nIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pYyBpcworICAgICogSU1QTEVNRU5UQVRJT04gREVGSU5FRC0gQXJtIHJlY29tbWVuZHMgdGhhdCB0aGUgU1BNIGNhdXNlcyB0aGUgc3lzdGVtIHRvIHJlc3RhcnQgaW4KKyAgICAqIHRoaXMgc2l0dWF0aW9uLiBSZWZlciBQU0EtRkYgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFuaWMuCisgICAgKiBGb3IgdGhlIGNhc2VzIHdoZXJlLCBTUE0gY2Fubm90IGNhcGFibGUgdG8gcmVib290IHRoZSBzeXN0ZW0gKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93biksCisgICAgKiBhIHdhdGNoZG9nIHRpbWVyIHNldCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LiBUaGlzIHdpbGwKKyAgICAqIHRlc3RzIGNvbnRpbnVpdHkgYW5kIGFibGUgdG8ganVtcCB0byBuZXh0IHRlc3RzLiBUaGVyZWZvcmUsIGVhY2ggdGVzdCB3aG8gY2hlY2tzIGZvcgorICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24sIGV4cGVjdHMgc3lzdGVtIHRvIGdldCByZXNldCBlaXRoZXIgYnkgU1BNIG9yIHdhdGNoZG9nIHNldCBieQorICAgICogdGhlIHRlc3QgaGFybmVzcyBmdW5jdGlvbi4KKyAgICAqCisgICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKKyAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KKyAgICAqCisgICAgKiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIGFzIGludGVuZGVkIGJ5IHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCiAgICAgKiBkdWUgdG8gb3RoZXIgcmVhc29ucywgdGVzdCBpcyBzZXR0aW5nIGEgYm9vdCBzaWduYXR1cmUgaW50byBub24tdm9sYXRpbGUgbWVtb3J5IGJlZm9yZSBhbmQKICAgICAqIGFmdGVyIHRhcmdldGVkIHRlc3QgY2hlY2suIEFmdGVyIGEgcmVib290LCB0aGVzZSBib290IHNpZ25hdHVyZXMgYXJlIGJlaW5nIHJlYWQgYnkgdGhlCiAgICAgKiBWQUwgQVBJcyB0byBkZWNpZGUgdGVzdCBzdGF0dXMuCi0gICAgKgotICAgICogTm90ZTogSWYgU1BNIGlzIG5vdCBjYXBhYmxlIG9mIHJlYm9vdGluZyAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSBpbiBmYXRhbCBlcnJvciBjb25kaXRpb24sCi0gICAgKiBhIHdhdGNoZG9nIHRpbWVyIGVuYWJsZWQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4KLSAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZwotICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgogICAgICovCiAKICAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLwpAQCAtNjAsNyArNzAsMTcgQEAKICAgIC8qIHBzYV9jbG9zZSgpIHdpdGggaW52YWxpZCBoYW5kbGUgKi8KICAgIHBzYS0+Y2xvc2UoSU5WQUxJRF9IQU5ETEUpOwogCi0gICAvKiBTaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KKyAgIC8qCisgICAgKiBJZiB0aGUgY2FsbGVyIGlzIGluIHRoZSBOU1BFLCBpdCBpcyBJTVBMRU1FTlRBVElPTiBERUZJTkVEIHdoZXRoZXIKKyAgICAqIGEgUFJPR1JBTU1FUiBFUlJPUiB3aWxsIHBhbmljIG9yIHJldHVybiB3aXRoIG5vIGVmZmVjdC4KKyAgICAqIEZvciBTUEUgY2FsbGVyLCBpdCBtdXN0IHBhbmljLgorICAgICovCisgICBpZiAoY2FsbGVyID09IE5PTlNFQ1VSRSkKKyAgIHsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworICAgfQorCisgICAvKiBJZiBQUk9HUkFNTUVSIEVSUk9SIHJlc3VsdHMgaW50byBwYW5pYyB0aGVuIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCiAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRwc2FfY2xvc2UoaW52YWxpZF9oYW5kbGUpIHNob3VsZCBoYXZlIGZhaWxlZCBidXQgc3VjY2VlZGVkXG4iLCAwKTsKIAogICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxMi90ZXN0X3N1cHBfaTAxMi5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTIvdGVzdF9zdXBwX2kwMTIuYwppbmRleCAxMDQ1NTJjLi5mNmQzOWI2IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxMi90ZXN0X3N1cHBfaTAxMi5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDEyL3Rlc3Rfc3VwcF9pMDEyLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDggKzE1LDEzIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CiAKIGludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX2Nsb3NlX3dpdGhfaW52YWxpZF9oYW5kbGUodm9pZCk7CiAKQEAgLTI4LDYgKzMzLDYgQEAKIAogaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfY2xvc2Vfd2l0aF9pbnZhbGlkX2hhbmRsZSh2b2lkKQogewotICAgIHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgVkFMX1NUQVRVU19TVUNDRVNTKTsKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBWQUxfU1RBVFVTX1NVQ0NFU1MpOwogICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxMy90ZXN0X2kwMTMuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDEzL3Rlc3RfaTAxMy5jCmluZGV4IGYwMDg4YTguLjU2NjZjMTYgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDEzL3Rlc3RfaTAxMy5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDEzL3Rlc3RfaTAxMy5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDEzLmgiCkBAIC0zNSwxMiArMzUsMTIgQEAKIHsKICAgIHBzYV9oYW5kbGVfdCAgICAgICBoYW5kbGUgPSAwOwogCi0gICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sxXSBUZXN0IHBzYV9nZXQgd2l0aCBtdWx0aXBsZSBzaWduYWxzXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAxXSBUZXN0IHBzYV9nZXQgd2l0aCBtdWx0aXBsZSBzaWduYWxzXG4iLCAwKTsKIAogICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxKTsKIAogICAgLyogRXhwZWN0YXRpb24gaXMgc2VydmVyIHRlc3Qgc2hvdWxkIGhhbmcgYW5kIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCi0gICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDb25uZWN0aW9uIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2Nlc3NlZFxuIiwgMCk7CisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDb25uZWN0aW9uIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2NlZWRcbiIsIDApOwogCiAgICAodm9pZCkoaGFuZGxlKTsKICAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxMy90ZXN0X3N1cHBfaTAxMy5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTMvdGVzdF9zdXBwX2kwMTMuYwppbmRleCA2ZDNjM2I2Li5mYjU0YzNmIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxMy90ZXN0X3N1cHBfaTAxMy5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDEzL3Rlc3Rfc3VwcF9pMDEzLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDggKzE1LDEzIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CiAKIGludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX2dldF93aXRoX21vcmVfdGhhbl9vbmVfc2lnbmFsKHZvaWQpOwogCkBAIC0yOSw0OSArMzQsNTYgQEAKIGludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX2dldF93aXRoX21vcmVfdGhhbl9vbmVfc2lnbmFsKHZvaWQpCiB7CiAgICAgcHNhX21zZ190ICAgICBtc2cgPSB7MH07Ci0gICAgaW50MzJfdCAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CiAKLSAgIC8qIFRlc3QgaXMgdGFyZ2V0aW5nIGZhdGFsIGVycm9yIGNvbmRpdGlvbiBhbmQgaXQgd2lsbCBleHBlY3QgYW4gZXJyb3IgcmVjb3ZlcnkocmVib290KQotICAgICogdG8gaGFwcGVuLiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIHdhcyBpbnRlbmRlZCBhcyBwZXIgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKKyAgIC8qCisgICAgKiBUaGlzIHRlc3QgY2hlY2tzIGZvciB0aGUgUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24gZm9yIHRoZSBQU0EgQVBJLiBBUEkncyByZXNwb25kIHRvCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvdWxkIGJlIGVpdGhlciB0byByZXR1cm4gYXBwcm9wcmlhdGUgc3RhdHVzIGNvZGUgb3IgcGFuaWMgdGhlIGNhbGxlci4KKyAgICAqIFdoZW4gYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljcywgdGhlIFNQRSBjYW5ub3QgY29udGludWUgbm9ybWFsIGV4ZWN1dGlvbiwgYXMgZGVmaW5lZAorICAgICogaW4gdGhpcyBzcGVjaWZpY2F0aW9uLiBUaGUgYmVoYXZpb3Igb2YgdGhlIFNQTSBmb2xsb3dpbmcgYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljIGlzCisgICAgKiBJTVBMRU1FTlRBVElPTiBERUZJTkVELSBBcm0gcmVjb21tZW5kcyB0aGF0IHRoZSBTUE0gY2F1c2VzIHRoZSBzeXN0ZW0gdG8gcmVzdGFydCBpbgorICAgICogdGhpcyBzaXR1YXRpb24uIFJlZmVyIFBTQS1GRiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYW5pYy4KKyAgICAqIEZvciB0aGUgY2FzZXMgd2hlcmUsIFNQTSBjYW5ub3QgY2FwYWJsZSB0byByZWJvb3QgdGhlIHN5c3RlbSAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSwKKyAgICAqIGEgd2F0Y2hkb2cgdGltZXIgc2V0IGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuIFRoaXMgd2lsbAorICAgICogdGVzdHMgY29udGludWl0eSBhbmQgYWJsZSB0byBqdW1wIHRvIG5leHQgdGVzdHMuIFRoZXJlZm9yZSwgZWFjaCB0ZXN0IHdobyBjaGVja3MgZm9yCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiwgZXhwZWN0cyBzeXN0ZW0gdG8gZ2V0IHJlc2V0IGVpdGhlciBieSBTUE0gb3Igd2F0Y2hkb2cgc2V0IGJ5CisgICAgKiB0aGUgdGVzdCBoYXJuZXNzIGZ1bmN0aW9uLgorICAgICoKKyAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZworICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgorICAgICoKKyAgICAqIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgYXMgaW50ZW5kZWQgYnkgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKICAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAogICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKICAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KLSAgICAqCi0gICAgKiBOb3RlOiBJZiBTUE0gaXMgbm90IGNhcGFibGUgb2YgcmVib290aW5nIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbiwKLSAgICAqIGEgd2F0Y2hkb2cgdGltZXIgZW5hYmxlZCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LgotICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCi0gICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCiAgICAgKi8KIAotICAgIGlmICgocHNhX3dhaXQoUFNBX1dBSVRfQU5ZLCBQU0FfQkxPQ0spKSAmIFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHKQorICAgIGlmICgocHNhLT53YWl0KFBTQV9XQUlUX0FOWSwgUFNBX0JMT0NLKSkgJiBTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRykKICAgICB7CiAgICAgICAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLwotICAgICAgICBpZiAodmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUykpCisgICAgICAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUykpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CiAgICAgICAgICAgICAvKiBVbmJsb2NrIGNsaWVudCAqLwotICAgICAgICAgICAgaWYgKHBzYV9nZXQoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpICE9IFBTQV9TVUNDRVNTKQorICAgICAgICAgICAgaWYgKHBzYS0+Z2V0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSAhPSBQU0FfU1VDQ0VTUykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YWxfcHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgICAgICAgICAgICAgIHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwogICAgICAgICB9CiAKICAgICAgICAgLyogbXVsdGlwbGUgc2lnbmFscyBjaGVjayAqLwotICAgICAgICBwc2FfZ2V0KChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRyB8IFNFUlZFUl9SRUxBWF9NSU5PUl9WRVJTSU9OX1NJRCksICZtc2cpOworICAgICAgICBwc2EtPmdldCgoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcgfCBTRVJWRVJfUkVMQVhfTUlOT1JfVkVSU0lPTl9TSUcpLCAmbXNnKTsKIAotICAgICAgICAvKiBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KKyAgICAgICAgLyogSWYgUFJPR1JBTU1FUiBFUlJPUiByZXN1bHRzIGludG8gcGFuaWMgdGhlbiBjb250cm9sIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZSAqLwogICAgICAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KLSAgICAgICAgaWYgKHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCisgICAgICAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKICAgICAgICAgewotICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CiAgICAgICAgIH0KLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgIH0KIAotICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKLSAgICB2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMyksIHN0YXR1cyk7Ci0KLSAgICByZXR1cm4gc3RhdHVzOworICAgIHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMyksIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRCk7CisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE0L3Rlc3RfaTAxNC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTQvdGVzdF9pMDE0LmMKaW5kZXggMmZkZTNlMi4uMTU5MGRkNCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTQvdGVzdF9pMDE0LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTQvdGVzdF9pMDE0LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMTQuaCIKQEAgLTM1LDEyICszNSwxMiBAQAogewogICAgcHNhX2hhbmRsZV90ICAgICAgIGhhbmRsZSA9IDA7CiAKLSAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazFdIFRlc3QgcHNhX2dldCBjYWxsZWQgdHdpY2VcbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDFdIFRlc3QgcHNhX2dldCBjYWxsZWQgdHdpY2VcbiIsIDApOwogCiAgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpOwogCiAgICAvKiBFeHBlY3RhdGlvbiBpcyBzZXJ2ZXIgdGVzdCBzaG91bGQgaGFuZyBhbmQgY29udHJvbCBzaG91bGRuJ3QgaGF2ZSBjb21lIGhlcmUgKi8KLSAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENvbm5lY3Rpb24gc2hvdWxkIGZhaWxlZCBidXQgc3VjY2Vzc2VkXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENvbm5lY3Rpb24gc2hvdWxkIGZhaWxlZCBidXQgc3VjY2VlZFxuIiwgMCk7CiAKICAgICh2b2lkKShoYW5kbGUpOwogICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE0L3Rlc3Rfc3VwcF9pMDE0LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxNC90ZXN0X3N1cHBfaTAxNC5jCmluZGV4IDYxZWQwZTAuLmZlMDYyZjQgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE0L3Rlc3Rfc3VwcF9pMDE0LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTQvdGVzdF9zdXBwX2kwMTQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsOCArMTUsMTMgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKIAogaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfZ2V0X2NhbGxlZF90d2ljZSh2b2lkKTsKIApAQCAtMzEsNTEgKzM2LDYyIEBACiAgICAgcHNhX21zZ190ICAgbXNnID0gezB9OwogICAgIGludDMyX3QgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKIAotICAgLyogVGVzdCBpcyB0YXJnZXRpbmcgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCBpdCB3aWxsIGV4cGVjdCBhbiBlcnJvciByZWNvdmVyeShyZWJvb3QpCi0gICAgKiB0byBoYXBwZW4uIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgd2FzIGludGVuZGVkIGFzIHBlciB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgLyoKKyAgICAqIFRoaXMgdGVzdCBjaGVja3MgZm9yIHRoZSBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiBmb3IgdGhlIFBTQSBBUEkuIEFQSSdzIHJlc3BvbmQgdG8KKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY291bGQgYmUgZWl0aGVyIHRvIHJldHVybiBhcHByb3ByaWF0ZSBzdGF0dXMgY29kZSBvciBwYW5pYyB0aGUgY2FsbGVyLgorICAgICogV2hlbiBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWNzLCB0aGUgU1BFIGNhbm5vdCBjb250aW51ZSBub3JtYWwgZXhlY3V0aW9uLCBhcyBkZWZpbmVkCisgICAgKiBpbiB0aGlzIHNwZWNpZmljYXRpb24uIFRoZSBiZWhhdmlvciBvZiB0aGUgU1BNIGZvbGxvd2luZyBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWMgaXMKKyAgICAqIElNUExFTUVOVEFUSU9OIERFRklORUQtIEFybSByZWNvbW1lbmRzIHRoYXQgdGhlIFNQTSBjYXVzZXMgdGhlIHN5c3RlbSB0byByZXN0YXJ0IGluCisgICAgKiB0aGlzIHNpdHVhdGlvbi4gUmVmZXIgUFNBLUZGIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhbmljLgorICAgICogRm9yIHRoZSBjYXNlcyB3aGVyZSwgU1BNIGNhbm5vdCBjYXBhYmxlIHRvIHJlYm9vdCB0aGUgc3lzdGVtIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBzZXQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4gVGhpcyB3aWxsCisgICAgKiB0ZXN0cyBjb250aW51aXR5IGFuZCBhYmxlIHRvIGp1bXAgdG8gbmV4dCB0ZXN0cy4gVGhlcmVmb3JlLCBlYWNoIHRlc3Qgd2hvIGNoZWNrcyBmb3IKKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uLCBleHBlY3RzIHN5c3RlbSB0byBnZXQgcmVzZXQgZWl0aGVyIGJ5IFNQTSBvciB3YXRjaGRvZyBzZXQgYnkKKyAgICAqIHRoZSB0ZXN0IGhhcm5lc3MgZnVuY3Rpb24uCisgICAgKgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKgorICAgICogVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCBhcyBpbnRlbmRlZCBieSB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAogICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCiAgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQogICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgotICAgICoKLSAgICAqIE5vdGU6IElmIFNQTSBpcyBub3QgY2FwYWJsZSBvZiByZWJvb3RpbmcgKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93bikgaW4gZmF0YWwgZXJyb3IgY29uZGl0aW9uLAotICAgICogYSB3YXRjaGRvZyB0aW1lciBlbmFibGVkIGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuCi0gICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKLSAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KICAgICAqLwogCiB3YWl0OgotICAgIGlmICgocHNhX3dhaXQoUFNBX1dBSVRfQU5ZLCBQU0FfQkxPQ0spKSAmIFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHKQorICAgIGlmICgocHNhLT53YWl0KFBTQV9XQUlUX0FOWSwgUFNBX0JMT0NLKSkgJiBTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRykKICAgICB7CiAgICAgICAgIC8qIEZpcnN0IHBzYV9nZXQgY2FsbCAqLwotICAgICAgICBpZiAocHNhX2dldChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZykgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIGlmIChwc2EtPmdldChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZykgIT0gUFNBX1NVQ0NFU1MpCiAgICAgICAgIHsKICAgICAgICAgICAgIGdvdG8gd2FpdDsKICAgICAgICAgfQorCiAgICAgICAgIC8qIERlYnVnIHByaW50ICovCi0gICAgICAgIHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKTsKKyAgICAgICAgdmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKTsKIAogICAgICAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KLSAgICAgICAgaWYgKHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpKQorICAgICAgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpKQogICAgICAgICB7Ci0gICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CisgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOwogICAgICAgICAgICAgLyogVW5ibG9jayBjbGllbnQgKi8KLSAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKICAgICAgICAgfQogCi0gICAgICAgIC8qIFNlY29uZCBwc2FfZ2V0IGNhbGwuIFRoaXMgc2hvdWxkIG5vdCByZXR1cm4gKi8KLSAgICAgICAgcHNhX2dldChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgICAgIC8qIFNlY29uZCBwc2FfZ2V0IGNhbGwuIFRoaXMgc2hvdWxkIHBhbmljICovCisgICAgICAgIHBzYS0+Z2V0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKIAotICAgICAgICAvKiBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KKyAgICAgICAgLyogSWYgUFJPR1JBTU1FUiBFUlJPUiByZXN1bHRzIGludG8gcGFuaWMgdGhlbiBjb250cm9sIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZSAqLwogICAgICAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KLSAgICAgICAgaWYgKHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCisgICAgICAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKICAgICAgICAgewotICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CiAgICAgICAgIH0KLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgIH0KIAogICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKLSAgICB2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cyk7CisgICAgdmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKTsKICAgICByZXR1cm4gc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTUvdGVzdF9pMDE1LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxNS90ZXN0X2kwMTUuYwppbmRleCA0NGEwODg3Li5mNDg2ODY1IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxNS90ZXN0X2kwMTUuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxNS90ZXN0X2kwMTUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTAxNS5oIgpAQCAtMzUsMTIgKzM1LDEyIEBACiB7CiAgICBwc2FfaGFuZGxlX3QgICAgICAgaGFuZGxlID0gMDsKIAotICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrMV0gVGVzdCBwc2FfZ2V0IHdpdGggbm9uLVJvVCBzaWduYWxcbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDFdIFRlc3QgcHNhX2dldCB3aXRoIG5vbi1Sb1Qgc2lnbmFsXG4iLCAwKTsKIAogICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxKTsKIAogICAgLyogRXhwZWN0YXRpb24gaXMgc2VydmVyIHRlc3Qgc2hvdWxkIGhhbmcgYW5kIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCi0gICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDb25uZWN0aW9uIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2Nlc3NlZFxuIiwgMCk7CisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDb25uZWN0aW9uIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2NlZWRcbiIsIDApOwogCiAgICAodm9pZCkoaGFuZGxlKTsKICAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxNS90ZXN0X3N1cHBfaTAxNS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTUvdGVzdF9zdXBwX2kwMTUuYwppbmRleCA2ZDQ5ZjhmLi5hMDQ0Nzk2IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxNS90ZXN0X3N1cHBfaTAxNS5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE1L3Rlc3Rfc3VwcF9pMDE1LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDggKzE1LDEzIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CiAKIGludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX2dldF93aXRoX25vbl9yb3Rfc2lnbmFsKHZvaWQpOwogCkBAIC0zMSw0NCArMzYsNTQgQEAKICAgICBwc2FfbXNnX3QgICBtc2cgPSB7MH07CiAgICAgaW50MzJfdCAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwogCi0gICAvKiBUZXN0IGlzIHRhcmdldGluZyBmYXRhbCBlcnJvciBjb25kaXRpb24gYW5kIGl0IHdpbGwgZXhwZWN0IGFuIGVycm9yIHJlY292ZXJ5KHJlYm9vdCkKLSAgICAqIHRvIGhhcHBlbi4gVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCB3YXMgaW50ZW5kZWQgYXMgcGVyIHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCisgICAvKgorICAgICogVGhpcyB0ZXN0IGNoZWNrcyBmb3IgdGhlIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uIGZvciB0aGUgUFNBIEFQSS4gQVBJJ3MgcmVzcG9uZCB0bworICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb3VsZCBiZSBlaXRoZXIgdG8gcmV0dXJuIGFwcHJvcHJpYXRlIHN0YXR1cyBjb2RlIG9yIHBhbmljIHRoZSBjYWxsZXIuCisgICAgKiBXaGVuIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pY3MsIHRoZSBTUEUgY2Fubm90IGNvbnRpbnVlIG5vcm1hbCBleGVjdXRpb24sIGFzIGRlZmluZWQKKyAgICAqIGluIHRoaXMgc3BlY2lmaWNhdGlvbi4gVGhlIGJlaGF2aW9yIG9mIHRoZSBTUE0gZm9sbG93aW5nIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pYyBpcworICAgICogSU1QTEVNRU5UQVRJT04gREVGSU5FRC0gQXJtIHJlY29tbWVuZHMgdGhhdCB0aGUgU1BNIGNhdXNlcyB0aGUgc3lzdGVtIHRvIHJlc3RhcnQgaW4KKyAgICAqIHRoaXMgc2l0dWF0aW9uLiBSZWZlciBQU0EtRkYgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFuaWMuCisgICAgKiBGb3IgdGhlIGNhc2VzIHdoZXJlLCBTUE0gY2Fubm90IGNhcGFibGUgdG8gcmVib290IHRoZSBzeXN0ZW0gKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93biksCisgICAgKiBhIHdhdGNoZG9nIHRpbWVyIHNldCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LiBUaGlzIHdpbGwKKyAgICAqIHRlc3RzIGNvbnRpbnVpdHkgYW5kIGFibGUgdG8ganVtcCB0byBuZXh0IHRlc3RzLiBUaGVyZWZvcmUsIGVhY2ggdGVzdCB3aG8gY2hlY2tzIGZvcgorICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24sIGV4cGVjdHMgc3lzdGVtIHRvIGdldCByZXNldCBlaXRoZXIgYnkgU1BNIG9yIHdhdGNoZG9nIHNldCBieQorICAgICogdGhlIHRlc3QgaGFybmVzcyBmdW5jdGlvbi4KKyAgICAqCisgICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKKyAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KKyAgICAqCisgICAgKiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIGFzIGludGVuZGVkIGJ5IHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCiAgICAgKiBkdWUgdG8gb3RoZXIgcmVhc29ucywgdGVzdCBpcyBzZXR0aW5nIGEgYm9vdCBzaWduYXR1cmUgaW50byBub24tdm9sYXRpbGUgbWVtb3J5IGJlZm9yZSBhbmQKICAgICAqIGFmdGVyIHRhcmdldGVkIHRlc3QgY2hlY2suIEFmdGVyIGEgcmVib290LCB0aGVzZSBib290IHNpZ25hdHVyZXMgYXJlIGJlaW5nIHJlYWQgYnkgdGhlCiAgICAgKiBWQUwgQVBJcyB0byBkZWNpZGUgdGVzdCBzdGF0dXMuCi0gICAgKgotICAgICogTm90ZTogSWYgU1BNIGlzIG5vdCBjYXBhYmxlIG9mIHJlYm9vdGluZyAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSBpbiBmYXRhbCBlcnJvciBjb25kaXRpb24sCi0gICAgKiBhIHdhdGNoZG9nIHRpbWVyIGVuYWJsZWQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4KLSAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZwotICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgogICAgICovCiAKLSAgICBpZiAoKHBzYV93YWl0KFBTQV9XQUlUX0FOWSwgUFNBX0JMT0NLKSkgJiBTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRykKKyAgICBpZiAoKHBzYS0+d2FpdChQU0FfV0FJVF9BTlksIFBTQV9CTE9DSykpICYgU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcpCiAgICAgewogICAgICAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KLSAgICAgICAgc3RhdHVzID0gdmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUyk7Ci0gICAgICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCisgICAgICAgIHN0YXR1cyA9IHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKTsKKyAgICAgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKLSAgICAgICAgICAgIHBzYV9nZXQoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgICAgIHBzYS0+Z2V0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICAgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgICAgICB9CiAKLSAgICAgICAgLyogQ2FsbCB0byBwc2FfZ2V0IHNob3VsZCBub3QgcmV0dXJuICovCi0gICAgICAgIHBzYV9nZXQoUFNBX0RPT1JCRUxMLCAmbXNnKTsKKyAgICAgICAgLyogQ2FsbCB0byBwc2FfZ2V0IHNob3VsZCBwYW5pYyAqLworICAgICAgICBwc2EtPmdldChQU0FfRE9PUkJFTEwsICZtc2cpOwogCi0gICAgICAgIC8qIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZSAqLworICAgICAgICAvKiBJZiBQUk9HUkFNTUVSIEVSUk9SIHJlc3VsdHMgaW50byBwYW5pYyB0aGVuIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCiAgICAgICAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLwotICAgICAgICBzdGF0dXMgPSB2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpOwotICAgICAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQorICAgICAgICBzdGF0dXMgPSB2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKTsKKyAgICAgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOwogICAgICAgICB9Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICB9CiAKICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7Ci0gICAgdmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDMpLCBzdGF0dXMpOworICAgIHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMyksIHN0YXR1cyk7CiAgICAgcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE2L3Rlc3RfaTAxNi5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTYvdGVzdF9pMDE2LmMKaW5kZXggYTk5ZmEzZi4uNWNjN2EzNiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTYvdGVzdF9pMDE2LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTYvdGVzdF9pMDE2LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMTYuaCIKQEAgLTM1LDEyICszNSwxMiBAQAogewogICAgcHNhX2hhbmRsZV90ICAgICAgIGhhbmRsZSA9IDA7CiAKLSAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazFdIFRlc3QgcHNhX2dldCB3aXRoIHVuYXNzZXJ0ZWQgc2lnbmFsXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAxXSBUZXN0IHBzYV9nZXQgd2l0aCB1bmFzc2VydGVkIHNpZ25hbFxuIiwgMCk7CiAKICAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSk7CiAKICAgIC8qIEV4cGVjdGF0aW9uIGlzIHNlcnZlciB0ZXN0IHNob3VsZCBoYW5nIGFuZCBjb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLwotICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q29ubmVjdGlvbiBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q29ubmVjdGlvbiBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZWVkXG4iLCAwKTsKIAogICAgKHZvaWQpKGhhbmRsZSk7CiAgICByZXR1cm4gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTYvdGVzdF9zdXBwX2kwMTYuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE2L3Rlc3Rfc3VwcF9pMDE2LmMKaW5kZXggODNhZmUzOC4uN2I0ZDVlMSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTYvdGVzdF9zdXBwX2kwMTYuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxNi90ZXN0X3N1cHBfaTAxNi5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSw4ICsxNSwxMyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KIAotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKworI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfc2VydmVyX3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfc2VydmVyX3NwKQorZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOwogCiBpbnQzMl90IHNlcnZlcl90ZXN0X3BzYV9nZXRfd2l0aF91bmFzc2VydGVkX3NpZ25hbCh2b2lkKTsKIApAQCAtMzEsNDQgKzM2LDU0IEBACiAgICAgcHNhX21zZ190ICAgbXNnID0gezB9OwogICAgIGludDMyX3QgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKIAotICAgLyogVGVzdCBpcyB0YXJnZXRpbmcgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCBpdCB3aWxsIGV4cGVjdCBhbiBlcnJvciByZWNvdmVyeShyZWJvb3QpCi0gICAgKiB0byBoYXBwZW4uIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgd2FzIGludGVuZGVkIGFzIHBlciB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgLyoKKyAgICAqIFRoaXMgdGVzdCBjaGVja3MgZm9yIHRoZSBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiBmb3IgdGhlIFBTQSBBUEkuIEFQSSdzIHJlc3BvbmQgdG8KKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY291bGQgYmUgZWl0aGVyIHRvIHJldHVybiBhcHByb3ByaWF0ZSBzdGF0dXMgY29kZSBvciBwYW5pYyB0aGUgY2FsbGVyLgorICAgICogV2hlbiBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWNzLCB0aGUgU1BFIGNhbm5vdCBjb250aW51ZSBub3JtYWwgZXhlY3V0aW9uLCBhcyBkZWZpbmVkCisgICAgKiBpbiB0aGlzIHNwZWNpZmljYXRpb24uIFRoZSBiZWhhdmlvciBvZiB0aGUgU1BNIGZvbGxvd2luZyBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWMgaXMKKyAgICAqIElNUExFTUVOVEFUSU9OIERFRklORUQtIEFybSByZWNvbW1lbmRzIHRoYXQgdGhlIFNQTSBjYXVzZXMgdGhlIHN5c3RlbSB0byByZXN0YXJ0IGluCisgICAgKiB0aGlzIHNpdHVhdGlvbi4gUmVmZXIgUFNBLUZGIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhbmljLgorICAgICogRm9yIHRoZSBjYXNlcyB3aGVyZSwgU1BNIGNhbm5vdCBjYXBhYmxlIHRvIHJlYm9vdCB0aGUgc3lzdGVtIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBzZXQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4gVGhpcyB3aWxsCisgICAgKiB0ZXN0cyBjb250aW51aXR5IGFuZCBhYmxlIHRvIGp1bXAgdG8gbmV4dCB0ZXN0cy4gVGhlcmVmb3JlLCBlYWNoIHRlc3Qgd2hvIGNoZWNrcyBmb3IKKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uLCBleHBlY3RzIHN5c3RlbSB0byBnZXQgcmVzZXQgZWl0aGVyIGJ5IFNQTSBvciB3YXRjaGRvZyBzZXQgYnkKKyAgICAqIHRoZSB0ZXN0IGhhcm5lc3MgZnVuY3Rpb24uCisgICAgKgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKgorICAgICogVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCBhcyBpbnRlbmRlZCBieSB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAogICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCiAgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQogICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgotICAgICoKLSAgICAqIE5vdGU6IElmIFNQTSBpcyBub3QgY2FwYWJsZSBvZiByZWJvb3RpbmcgKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93bikgaW4gZmF0YWwgZXJyb3IgY29uZGl0aW9uLAotICAgICogYSB3YXRjaGRvZyB0aW1lciBlbmFibGVkIGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuCi0gICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKLSAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KICAgICAqLwogCi0gICAgaWYgKChwc2Ffd2FpdChQU0FfV0FJVF9BTlksIFBTQV9CTE9DSykpICYgU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcpCisgICAgaWYgKChwc2EtPndhaXQoUFNBX1dBSVRfQU5ZLCBQU0FfQkxPQ0spKSAmIFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHKQogICAgIHsKICAgICAgICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCi0gICAgICAgIHN0YXR1cyA9IHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpOwotICAgICAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgICAgICBzdGF0dXMgPSB2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUyk7CisgICAgICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQogICAgICAgICB7Ci0gICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7Ci0gICAgICAgICAgICBwc2FfZ2V0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CisgICAgICAgICAgICBwc2EtPmdldChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICAgICAgfQogCi0gICAgICAgIC8qIFVuYXNzZXJ0ZWQgc2lnbmFsIGNoZWNrLCBjYWxsIHRvIHBzYV9nZXQgc2hvdWxkIG5vdCByZXR1cm4gKi8KLSAgICAgICAgcHNhX2dldChTRVJWRVJfUkVMQVhfTUlOT1JfVkVSU0lPTl9TSUQsICZtc2cpOworICAgICAgICAvKiBVbmFzc2VydGVkIHNpZ25hbCBjaGVjaywgY2FsbCB0byBwc2FfZ2V0IHNob3VsZCBwYW5pYyAqLworICAgICAgICBwc2EtPmdldChTRVJWRVJfUkVMQVhfTUlOT1JfVkVSU0lPTl9TSUcsICZtc2cpOwogCiAgICAgICAgIC8qIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZSAqLwogICAgICAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KLSAgICAgICAgc3RhdHVzID0gdmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKTsKLSAgICAgICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKKyAgICAgICAgc3RhdHVzID0gdmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCk7CisgICAgICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQogICAgICAgICB7Ci0gICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKICAgICAgICAgfQotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgfQogCiAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwotICAgIHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKTsKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDMpLCBzdGF0dXMpOwogICAgIHJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxNy90ZXN0X2kwMTcuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE3L3Rlc3RfaTAxNy5jCmluZGV4IDVhMDU5MGQuLjIyNTNkNTYgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE3L3Rlc3RfaTAxNy5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE3L3Rlc3RfaTAxNy5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDE3LmgiCkBAIC0zNSwxMiArMzUsMTIgQEAKIHsKICAgIHBzYV9oYW5kbGVfdCAgICAgICBoYW5kbGUgPSAwOwogCi0gICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sxXSBUZXN0IHBhcnRpdGlvbiBjYWxsaW5nIGl0cyBvd24gUm9UIHNlcnZpY2VcbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDFdIFRlc3QgcGFydGl0aW9uIGNhbGxpbmcgaXRzIG93biBSb1Qgc2VydmljZVxuIiwgMCk7CiAKICAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSk7CiAKICAgIC8qIEV4cGVjdGF0aW9uIGlzIHNlcnZlciB0ZXN0IHNob3VsZCBoYW5nIGFuZCBjb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLwotICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q29ubmVjdGlvbiBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q29ubmVjdGlvbiBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZWVkXG4iLCAwKTsKIAogICAgKHZvaWQpKGhhbmRsZSk7CiAgICByZXR1cm4gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTcvdGVzdF9zdXBwX2kwMTcuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE3L3Rlc3Rfc3VwcF9pMDE3LmMKaW5kZXggNTAwODI2MC4uNmM3Mjk3NyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTcvdGVzdF9zdXBwX2kwMTcuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxNy90ZXN0X3N1cHBfaTAxNy5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSw4ICsxNSwxMyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KIAotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKworI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfc2VydmVyX3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfc2VydmVyX3NwKQorZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOwogCiBpbnQzMl90IHNlcnZlcl90ZXN0X3BhcnRpdGlvbl9jYWxsaW5nX2l0c19vd25fcm90X3NlcnZpY2Uodm9pZCk7CiAKQEAgLTMyLDUxICszNyw2MSBAQAogICAgIGludDMyX3QgICAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKICAgICBwc2FfaGFuZGxlX3QgICAgICBoYW5kbGUgPSAwOwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAotICAgLyogVGVzdCBpcyB0YXJnZXRpbmcgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCBpdCB3aWxsIGV4cGVjdCBhbiBlcnJvciByZWNvdmVyeShyZWJvb3QpCi0gICAgKiB0byBoYXBwZW4uIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgd2FzIGludGVuZGVkIGFzIHBlciB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgLyoKKyAgICAqIFRoaXMgdGVzdCBjaGVja3MgZm9yIHRoZSBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiBmb3IgdGhlIFBTQSBBUEkuIEFQSSdzIHJlc3BvbmQgdG8KKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY291bGQgYmUgZWl0aGVyIHRvIHJldHVybiBhcHByb3ByaWF0ZSBzdGF0dXMgY29kZSBvciBwYW5pYyB0aGUgY2FsbGVyLgorICAgICogV2hlbiBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWNzLCB0aGUgU1BFIGNhbm5vdCBjb250aW51ZSBub3JtYWwgZXhlY3V0aW9uLCBhcyBkZWZpbmVkCisgICAgKiBpbiB0aGlzIHNwZWNpZmljYXRpb24uIFRoZSBiZWhhdmlvciBvZiB0aGUgU1BNIGZvbGxvd2luZyBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWMgaXMKKyAgICAqIElNUExFTUVOVEFUSU9OIERFRklORUQtIEFybSByZWNvbW1lbmRzIHRoYXQgdGhlIFNQTSBjYXVzZXMgdGhlIHN5c3RlbSB0byByZXN0YXJ0IGluCisgICAgKiB0aGlzIHNpdHVhdGlvbi4gUmVmZXIgUFNBLUZGIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhbmljLgorICAgICogRm9yIHRoZSBjYXNlcyB3aGVyZSwgU1BNIGNhbm5vdCBjYXBhYmxlIHRvIHJlYm9vdCB0aGUgc3lzdGVtIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBzZXQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4gVGhpcyB3aWxsCisgICAgKiB0ZXN0cyBjb250aW51aXR5IGFuZCBhYmxlIHRvIGp1bXAgdG8gbmV4dCB0ZXN0cy4gVGhlcmVmb3JlLCBlYWNoIHRlc3Qgd2hvIGNoZWNrcyBmb3IKKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uLCBleHBlY3RzIHN5c3RlbSB0byBnZXQgcmVzZXQgZWl0aGVyIGJ5IFNQTSBvciB3YXRjaGRvZyBzZXQgYnkKKyAgICAqIHRoZSB0ZXN0IGhhcm5lc3MgZnVuY3Rpb24uCisgICAgKgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKgorICAgICogVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCBhcyBpbnRlbmRlZCBieSB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAogICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCiAgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQogICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgotICAgICoKLSAgICAqIE5vdGU6IElmIFNQTSBpcyBub3QgY2FwYWJsZSBvZiByZWJvb3RpbmcgKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93bikgaW4gZmF0YWwgZXJyb3IgY29uZGl0aW9uLAotICAgICogYSB3YXRjaGRvZyB0aW1lciBlbmFibGVkIGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuCi0gICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKLSAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KICAgICAqLwogCiAgICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCi0gICAgc3RhdHVzID0gdmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUyk7Ci0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKKyAgICBzdGF0dXMgPSB2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCiAgICAgewotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCi0gICAgLyogQ2FsbGluZyBzZXJ2ZXIgcGFydGl0aW9uIFJvVCBzZXJ2aWNlIHVzaW5nIElQQyBhbmQgY2FsbCBzaG91bGQgbm90IHJldHVybiAqLwotICAgIGhhbmRsZSA9IHBzYV9jb25uZWN0KFNFUlZFUl9SRUxBWF9NSU5PUl9WRVJTSU9OX1NJRCwgMSk7CisgICAgLyogQ2FsbGluZyBzZXJ2ZXIgcGFydGl0aW9uIFJvVCBzZXJ2aWNlIHVzaW5nIElQQyBhbmQgY2FsbCBzaG91bGQgcGFuaWMgKi8KKyAgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1JFTEFYX01JTk9SX1ZFUlNJT05fU0lELCAxKTsKIAogICAgIC8qIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZSAqLwotICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0Q29ubmVjdGlvbiBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENvbm5lY3Rpb24gc2hvdWxkIGZhaWxlZCBidXQgc3VjY2VlZFxuIiwgMCk7CiAKICAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KLSAgICBzdGF0dXMgPSB2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMyksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMyksIHN0YXR1cykpCiAgICAgewotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCiAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwotICAgIHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjA0KSwgc3RhdHVzKTsKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpOwogCiAgICAgKHZvaWQpKGhhbmRsZSk7Ci0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE4L3Rlc3RfaTAxOC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTgvdGVzdF9pMDE4LmMKaW5kZXggZDIzYmNjOS4uNDM1MjE0OSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTgvdGVzdF9pMDE4LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTgvdGVzdF9pMDE4LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMTguaCIKQEAgLTM1LDEyICszNSwxMiBAQAogewogICAgcHNhX2hhbmRsZV90ICAgICAgIGhhbmRsZSA9IDA7CiAKLSAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazFdIFRlc3QgcHNhX3NldF9yaGFuZGxlIHdpdGggaW52YWxpZCBtc2cgaGFuZGxlXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAxXSBUZXN0IHBzYV9zZXRfcmhhbmRsZSB3aXRoIGludmFsaWQgbXNnIGhhbmRsZVxuIiwgMCk7CiAKICAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSk7CiAKICAgIC8qIEV4cGVjdGF0aW9uIGlzIHNlcnZlciB0ZXN0IHNob3VsZCBoYW5nIGFuZCBjb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLwotICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q29ubmVjdGlvbiBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q29ubmVjdGlvbiBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZWVkXG4iLCAwKTsKIAogICAgKHZvaWQpKGhhbmRsZSk7CiAgICByZXR1cm4gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTgvdGVzdF9zdXBwX2kwMTguYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE4L3Rlc3Rfc3VwcF9pMDE4LmMKaW5kZXggZTk1MTQ1NS4uNWE2N2FiYSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTgvdGVzdF9zdXBwX2kwMTguYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxOC90ZXN0X3N1cHBfaTAxOC5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSw4ICsxNSwxMyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KIAotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKworI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfc2VydmVyX3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfc2VydmVyX3NwKQorZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOwogCiBpbnQzMl90IHNlcnZlcl90ZXN0X3BzYV9zZXRfcmhhbmRsZV93aXRoX2ludmFsaWRfaGFuZGxlKHZvaWQpOwogCkBAIC0zMCw1NCArMzUsNjQgQEAKIHsKICAgICBwc2FfbXNnX3QgICBtc2cgPSB7MH07CiAgICAgaW50MzJfdCAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwotICAgIGludCAgICAgICAgICpudW0gPSBOVUxMOworICAgIGludCAgICAgICAgIG51bTsKIAotICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7Ci0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKSkKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKSkKICAgICB7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKLSAgIC8qIFRlc3QgaXMgdGFyZ2V0aW5nIGZhdGFsIGVycm9yIGNvbmRpdGlvbiBhbmQgaXQgd2lsbCBleHBlY3QgYW4gZXJyb3IgcmVjb3ZlcnkocmVib290KQotICAgICogdG8gaGFwcGVuLiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIHdhcyBpbnRlbmRlZCBhcyBwZXIgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKKyAgIC8qCisgICAgKiBUaGlzIHRlc3QgY2hlY2tzIGZvciB0aGUgUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24gZm9yIHRoZSBQU0EgQVBJLiBBUEkncyByZXNwb25kIHRvCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvdWxkIGJlIGVpdGhlciB0byByZXR1cm4gYXBwcm9wcmlhdGUgc3RhdHVzIGNvZGUgb3IgcGFuaWMgdGhlIGNhbGxlci4KKyAgICAqIFdoZW4gYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljcywgdGhlIFNQRSBjYW5ub3QgY29udGludWUgbm9ybWFsIGV4ZWN1dGlvbiwgYXMgZGVmaW5lZAorICAgICogaW4gdGhpcyBzcGVjaWZpY2F0aW9uLiBUaGUgYmVoYXZpb3Igb2YgdGhlIFNQTSBmb2xsb3dpbmcgYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljIGlzCisgICAgKiBJTVBMRU1FTlRBVElPTiBERUZJTkVELSBBcm0gcmVjb21tZW5kcyB0aGF0IHRoZSBTUE0gY2F1c2VzIHRoZSBzeXN0ZW0gdG8gcmVzdGFydCBpbgorICAgICogdGhpcyBzaXR1YXRpb24uIFJlZmVyIFBTQS1GRiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYW5pYy4KKyAgICAqIEZvciB0aGUgY2FzZXMgd2hlcmUsIFNQTSBjYW5ub3QgY2FwYWJsZSB0byByZWJvb3QgdGhlIHN5c3RlbSAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSwKKyAgICAqIGEgd2F0Y2hkb2cgdGltZXIgc2V0IGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuIFRoaXMgd2lsbAorICAgICogdGVzdHMgY29udGludWl0eSBhbmQgYWJsZSB0byBqdW1wIHRvIG5leHQgdGVzdHMuIFRoZXJlZm9yZSwgZWFjaCB0ZXN0IHdobyBjaGVja3MgZm9yCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiwgZXhwZWN0cyBzeXN0ZW0gdG8gZ2V0IHJlc2V0IGVpdGhlciBieSBTUE0gb3Igd2F0Y2hkb2cgc2V0IGJ5CisgICAgKiB0aGUgdGVzdCBoYXJuZXNzIGZ1bmN0aW9uLgorICAgICoKKyAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZworICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgorICAgICoKKyAgICAqIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgYXMgaW50ZW5kZWQgYnkgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKICAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAogICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKICAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KLSAgICAqCi0gICAgKiBOb3RlOiBJZiBTUE0gaXMgbm90IGNhcGFibGUgb2YgcmVib290aW5nIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbiwKLSAgICAqIGEgd2F0Y2hkb2cgdGltZXIgZW5hYmxlZCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LgotICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCi0gICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCiAgICAgKi8KIAogICAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLwotICAgIHN0YXR1cyA9IHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOwotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCi0gICAgLyogQ2FsbCBwc2Ffc2V0X3JoYW5kbGUgd2l0aCBJTlZBTElEX0hBTkxERS4gQ2FsbCBzaG91bGRuJ3QgcmV0dXJuICovCi0gICAgKm51bSA9IDU7Ci0gICAgcHNhX3NldF9yaGFuZGxlKElOVkFMSURfSEFORExFLCBudW0pOworICAgIC8qIENhbGwgcHNhX3NldF9yaGFuZGxlIHdpdGggSU5WQUxJRF9IQU5MREUuIENhbGwgc2hvdWxkIHBhbmljICovCisgICAgbnVtID0gNTsKKyAgICBwc2EtPnNldF9yaGFuZGxlKElOVkFMSURfSEFORExFLCAmbnVtKTsKIAogICAgIC8qIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZSAqLwotICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwKLSAgICAgICAgICAgICAgICAiXHRwc2Ffc2V0X3JoYW5kbGUgd2l0aCBpbnZhbGlkIGhhbmRsZSBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsCisgICAgICAgICAgICAgICAgIlx0cHNhX3NldF9yaGFuZGxlIHdpdGggaW52YWxpZCBoYW5kbGUgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2VlZFxuIiwgMCk7CiAKICAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KLSAgICBzdGF0dXMgPSB2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMyksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMyksIHN0YXR1cykpCiAgICAgewotICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAogICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKLSAgICB2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwNCksIHN0YXR1cyk7Ci0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgIHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwNCksIHN0YXR1cyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICByZXR1cm4gc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTkvdGVzdF9pMDE5LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxOS90ZXN0X2kwMTkuYwppbmRleCAzMDUwYmE3Li4zNWJhOGI5IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxOS90ZXN0X2kwMTkuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxOS90ZXN0X2kwMTkuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTAxOS5oIgpAQCAtMzUsMTIgKzM1LDEyIEBACiB7CiAgICBwc2FfaGFuZGxlX3QgICAgICAgaGFuZGxlID0gMDsKIAotICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrMV0gVGVzdCBwc2Ffc2V0X3JoYW5kbGUgd2l0aCBudWxsIG1zZyBoYW5kbGVcbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDFdIFRlc3QgcHNhX3NldF9yaGFuZGxlIHdpdGggbnVsbCBtc2cgaGFuZGxlXG4iLCAwKTsKIAogICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxKTsKIAogICAgLyogRXhwZWN0YXRpb24gaXMgc2VydmVyIHRlc3Qgc2hvdWxkIGhhbmcgYW5kIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCi0gICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDb25uZWN0aW9uIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2Nlc3NlZFxuIiwgMCk7CisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDb25uZWN0aW9uIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2NlZWRcbiIsIDApOwogCiAgICAodm9pZCkoaGFuZGxlKTsKICAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxOS90ZXN0X3N1cHBfaTAxOS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMTkvdGVzdF9zdXBwX2kwMTkuYwppbmRleCBhNDVkODkxLi5hZjA2M2E2IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAxOS90ZXN0X3N1cHBfaTAxOS5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDE5L3Rlc3Rfc3VwcF9pMDE5LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDggKzE1LDEzIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CiAKIGludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX3NldF9yaGFuZGxlX3dpdGhfbnVsbF9oYW5kbGUodm9pZCk7CiAKQEAgLTMwLDQzICszNSw2NCBAQAogewogICAgIHBzYV9tc2dfdCAgIG1zZyA9IHswfTsKICAgICBpbnQzMl90ICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7Ci0gICAgaW50ICAgICAgICAgKm51bSA9IE5VTEw7CisgICAgaW50ICAgICAgICAgbnVtOwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgLyoKKyAgICAqIFRoaXMgdGVzdCBjaGVja3MgZm9yIHRoZSBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiBmb3IgdGhlIFBTQSBBUEkuIEFQSSdzIHJlc3BvbmQgdG8KKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY291bGQgYmUgZWl0aGVyIHRvIHJldHVybiBhcHByb3ByaWF0ZSBzdGF0dXMgY29kZSBvciBwYW5pYyB0aGUgY2FsbGVyLgorICAgICogV2hlbiBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWNzLCB0aGUgU1BFIGNhbm5vdCBjb250aW51ZSBub3JtYWwgZXhlY3V0aW9uLCBhcyBkZWZpbmVkCisgICAgKiBpbiB0aGlzIHNwZWNpZmljYXRpb24uIFRoZSBiZWhhdmlvciBvZiB0aGUgU1BNIGZvbGxvd2luZyBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWMgaXMKKyAgICAqIElNUExFTUVOVEFUSU9OIERFRklORUQtIEFybSByZWNvbW1lbmRzIHRoYXQgdGhlIFNQTSBjYXVzZXMgdGhlIHN5c3RlbSB0byByZXN0YXJ0IGluCisgICAgKiB0aGlzIHNpdHVhdGlvbi4gUmVmZXIgUFNBLUZGIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhbmljLgorICAgICogRm9yIHRoZSBjYXNlcyB3aGVyZSwgU1BNIGNhbm5vdCBjYXBhYmxlIHRvIHJlYm9vdCB0aGUgc3lzdGVtIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBzZXQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4gVGhpcyB3aWxsCisgICAgKiB0ZXN0cyBjb250aW51aXR5IGFuZCBhYmxlIHRvIGp1bXAgdG8gbmV4dCB0ZXN0cy4gVGhlcmVmb3JlLCBlYWNoIHRlc3Qgd2hvIGNoZWNrcyBmb3IKKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uLCBleHBlY3RzIHN5c3RlbSB0byBnZXQgcmVzZXQgZWl0aGVyIGJ5IFNQTSBvciB3YXRjaGRvZyBzZXQgYnkKKyAgICAqIHRoZSB0ZXN0IGhhcm5lc3MgZnVuY3Rpb24uCisgICAgKgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKgorICAgICogVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCBhcyBpbnRlbmRlZCBieSB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCisgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQorICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgorICAgICovCisKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKSkKICAgICB7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKLSAgICAvKiBTZXQgYm9vdCBmbGFnIHRvIEJPT1RfRVhQRUNURURfKiB0byBpbmRpY2F0ZS0gdGVzdCBpcyB0YXJnZXRpbmcKLSAgICBmYXRhbCBlcnJvciBjb25kaXRpb24gYW5kIHRlc3Qgd2lsbCBleHBlY3QgZXJyb3IgcmVjb3ZlcnkgdG8gaGFwcGVuICovCi0gICAgc3RhdHVzID0gdmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUyk7Ci0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKKyAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KKyAgICBzdGF0dXMgPSB2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCiAgICAgewotICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKLSAgICAvKkNhbGwgcHNhX3NldF9yaGFuZGxlIHdpdGggUFNBX05VTExfSEFORExFLiBDYWxsIHNob3VsZG4ndCByZXR1cm4qLwotICAgICpudW0gPSA1OwotICAgIHBzYV9zZXRfcmhhbmRsZShQU0FfTlVMTF9IQU5ETEUsIG51bSk7CisgICAgLyogQ2FsbCBwc2Ffc2V0X3JoYW5kbGUgd2l0aCBQU0FfTlVMTF9IQU5ETEUuIENhbGwgc2hvdWxkIHBhbmljICovCisgICAgbnVtID0gNTsKKyAgICBwc2EtPnNldF9yaGFuZGxlKFBTQV9OVUxMX0hBTkRMRSwgJm51bSk7CiAKICAgICAvKiBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KLSAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsCi0gICAgICAgICAgICAgICAgIlx0cHNhX3NldF9yaGFuZGxlIHdpdGggTlVMTCBoYW5kbGUgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2Vzc2VkXG4iLCAwKTsKKyAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLAorICAgICAgICAgICAgICAgICJcdHBzYV9zZXRfcmhhbmRsZSB3aXRoIE5VTEwgaGFuZGxlIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2NlZWRcbiIsIDApOwogCiAgICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCi0gICAgc3RhdHVzID0gdmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDMpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDMpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7Ci0gICAgdmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDIwL3Rlc3RfaTAyMC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjAvdGVzdF9pMDIwLmMKaW5kZXggMzFmM2I1MC4uYzMxNmUzZCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjAvdGVzdF9pMDIwLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjAvdGVzdF9pMDIwLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMjAuaCIKQEAgLTM3LDEyICszNywxMiBAQAogICAgcHNhX2hhbmRsZV90ICAgICAgIGhhbmRsZSA9IDA7CiAKICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwKLSAgICAgICAgICAgICJbQ2hlY2sxXSBUZXN0IHBzYV9yZXBseSB3aXRoIGludmFsaWQgc3RhdHVzIGNvZGUgZm9yIFBTQV9JUENfQ09OTkVDVFxuIiwgMCk7CisgICAgICAgICAgICAiW0NoZWNrIDFdIFRlc3QgcHNhX3JlcGx5IHdpdGggaW52YWxpZCBzdGF0dXMgY29kZSBmb3IgUFNBX0lQQ19DT05ORUNUXG4iLCAwKTsKIAogICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxKTsKIAogICAgLyogRXhwZWN0YXRpb24gaXMgc2VydmVyIHRlc3Qgc2hvdWxkIGhhbmcgYW5kIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCi0gICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDb25uZWN0aW9uIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2Nlc3NlZFxuIiwgMCk7CisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDb25uZWN0aW9uIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2NlZWRcbiIsIDApOwogCiAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDIwL3Rlc3Rfc3VwcF9pMDIwLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyMC90ZXN0X3N1cHBfaTAyMC5jCmluZGV4IDE3MDE0NTkuLjgxNmZkNjYgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDIwL3Rlc3Rfc3VwcF9pMDIwLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjAvdGVzdF9zdXBwX2kwMjAuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsOCArMTUsMTMgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKIAogaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfcmVwbHlfd2l0aF9pbnZhbGlkX2Nvbm5lY3Rfc3RhdHVzX2NvZGUodm9pZCk7CiAKQEAgLTMwLDUxICszNSw2MSBAQAogewogICAgIGludDMyX3QgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CiAgICAgcHNhX21zZ190ICAgICAgIG1zZyA9IHswfTsKLSAgICBwc2Ffc3RhdHVzX3QgICAgaW52YWxpZF9zdGF0dXNfY29kZSA9IFBTQV9DT05ORUNUSU9OX1JFRlVTRUQgKyAweDEwOworICAgIHBzYV9zdGF0dXNfdCAgICBpbnZhbGlkX3N0YXR1c19jb2RlID0gUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCArIDB4MTA7CiAKLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCiAgICAgewotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCi0gICAvKiBUZXN0IGlzIHRhcmdldGluZyBmYXRhbCBlcnJvciBjb25kaXRpb24gYW5kIGl0IHdpbGwgZXhwZWN0IGFuIGVycm9yIHJlY292ZXJ5KHJlYm9vdCkKLSAgICAqIHRvIGhhcHBlbi4gVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCB3YXMgaW50ZW5kZWQgYXMgcGVyIHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCisgICAvKgorICAgICogVGhpcyB0ZXN0IGNoZWNrcyBmb3IgdGhlIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uIGZvciB0aGUgUFNBIEFQSS4gQVBJJ3MgcmVzcG9uZCB0bworICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb3VsZCBiZSBlaXRoZXIgdG8gcmV0dXJuIGFwcHJvcHJpYXRlIHN0YXR1cyBjb2RlIG9yIHBhbmljIHRoZSBjYWxsZXIuCisgICAgKiBXaGVuIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pY3MsIHRoZSBTUEUgY2Fubm90IGNvbnRpbnVlIG5vcm1hbCBleGVjdXRpb24sIGFzIGRlZmluZWQKKyAgICAqIGluIHRoaXMgc3BlY2lmaWNhdGlvbi4gVGhlIGJlaGF2aW9yIG9mIHRoZSBTUE0gZm9sbG93aW5nIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pYyBpcworICAgICogSU1QTEVNRU5UQVRJT04gREVGSU5FRC0gQXJtIHJlY29tbWVuZHMgdGhhdCB0aGUgU1BNIGNhdXNlcyB0aGUgc3lzdGVtIHRvIHJlc3RhcnQgaW4KKyAgICAqIHRoaXMgc2l0dWF0aW9uLiBSZWZlciBQU0EtRkYgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFuaWMuCisgICAgKiBGb3IgdGhlIGNhc2VzIHdoZXJlLCBTUE0gY2Fubm90IGNhcGFibGUgdG8gcmVib290IHRoZSBzeXN0ZW0gKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93biksCisgICAgKiBhIHdhdGNoZG9nIHRpbWVyIHNldCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LiBUaGlzIHdpbGwKKyAgICAqIHRlc3RzIGNvbnRpbnVpdHkgYW5kIGFibGUgdG8ganVtcCB0byBuZXh0IHRlc3RzLiBUaGVyZWZvcmUsIGVhY2ggdGVzdCB3aG8gY2hlY2tzIGZvcgorICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24sIGV4cGVjdHMgc3lzdGVtIHRvIGdldCByZXNldCBlaXRoZXIgYnkgU1BNIG9yIHdhdGNoZG9nIHNldCBieQorICAgICogdGhlIHRlc3QgaGFybmVzcyBmdW5jdGlvbi4KKyAgICAqCisgICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKKyAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KKyAgICAqCisgICAgKiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIGFzIGludGVuZGVkIGJ5IHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCiAgICAgKiBkdWUgdG8gb3RoZXIgcmVhc29ucywgdGVzdCBpcyBzZXR0aW5nIGEgYm9vdCBzaWduYXR1cmUgaW50byBub24tdm9sYXRpbGUgbWVtb3J5IGJlZm9yZSBhbmQKICAgICAqIGFmdGVyIHRhcmdldGVkIHRlc3QgY2hlY2suIEFmdGVyIGEgcmVib290LCB0aGVzZSBib290IHNpZ25hdHVyZXMgYXJlIGJlaW5nIHJlYWQgYnkgdGhlCiAgICAgKiBWQUwgQVBJcyB0byBkZWNpZGUgdGVzdCBzdGF0dXMuCi0gICAgKgotICAgICogTm90ZTogSWYgU1BNIGlzIG5vdCBjYXBhYmxlIG9mIHJlYm9vdGluZyAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSBpbiBmYXRhbCBlcnJvciBjb25kaXRpb24sCi0gICAgKiBhIHdhdGNoZG9nIHRpbWVyIGVuYWJsZWQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4KLSAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZwotICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgogICAgICovCiAKICAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KLSAgICBzdGF0dXMgPSB2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKICAgICB7Ci0gICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAotICAgIC8qQ2FsbCBwc2FfcmVwbHkgd2l0aCBpbnZhbGlkIHN0YXR1cyBjb2RlIGZvciBQU0FfSVBDX0NPTk5FQ1QuIENhbGwgc2hvdWxkbid0IHJldHVybiovCi0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIGludmFsaWRfc3RhdHVzX2NvZGUpOworICAgIC8qIENhbGwgcHNhX3JlcGx5IHdpdGggaW52YWxpZCBzdGF0dXMgY29kZSBmb3IgUFNBX0lQQ19DT05ORUNULiBDYWxsIHNob3VsZCBwYW5pYyAqLworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgaW52YWxpZF9zdGF0dXNfY29kZSk7CiAKICAgICAvKiBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KLSAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsCi0gICAgICAgICAgICAgICJcdHBzYV9yZXBseSB3aXRoIGludmFsaWQgc3RhdHVzIGNvZGUgZm9yIGNvbm5lY3Qgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2Vzc2VkXG4iLCAwKTsKKyAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLAorICAgICAgICAgICAgICAiXHRwc2FfcmVwbHkgd2l0aCBpbnZhbGlkIHN0YXR1cyBjb2RlIGZvciBjb25uZWN0IHNob3VsZCBmYWlsZWQgYnV0IHN1Y2NlZWRcbiIsIDApOwogCiAgICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCi0gICAgc3RhdHVzID0gdmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDMpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDMpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwotICAgIHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjA0KSwgc3RhdHVzKTsKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpOwogICAgIHJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyMS90ZXN0X2VudHJ5LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyMS90ZXN0X2VudHJ5LmMKaW5kZXggNDVkZTYwNS4uZDg2NTA4MiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjEvdGVzdF9lbnRyeS5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDIxL3Rlc3RfZW50cnkuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgInRlc3RfaTAyMS5oIgogCiAjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0ZGX0JBU0UsIDIxKQotI2RlZmluZSBURVNUX0RFU0MgIlRlc3RpbmcgcHNhX3JlcGx5IHdpdGggaW52YWxpZCBzdGF0dXMgY29kZSBmb3IgUFNBX0lQQ19DQUxMXG4iCisjZGVmaW5lIFRFU1RfREVTQyAiVGVzdGluZyBpcnEgcm91dGluZ1xuIgogVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKIHZhbF9hcGlfdCAqdmFsID0gTlVMTDsKIHBzYV9hcGlfdCAqcHNhID0gTlVMTDsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDIxL3Rlc3RfaTAyMS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjEvdGVzdF9pMDIxLmMKaW5kZXggNDJiNjExZS4uODkyN2IxNCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjEvdGVzdF9pMDIxLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjEvdGVzdF9pMDIxLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTIwLDQyICsyMCw0OCBAQAogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTAyMS5oIgogCiBjbGllbnRfdGVzdF90IHRlc3RfaTAyMV9jbGllbnRfdGVzdHNfbGlzdFtdID0gewogICAgIE5VTEwsCi0gICAgY2xpZW50X3Rlc3RfcHNhX3JlcGx5X3dpdGhfaW52YWxpZF9jYWxsX3N0YXR1c19jb2RlLAorICAgIGNsaWVudF90ZXN0X2lycV9yb3V0aW5nLAogICAgIE5VTEwsCiB9OwogCi1pbnQzMl90IGNsaWVudF90ZXN0X3BzYV9yZXBseV93aXRoX2ludmFsaWRfY2FsbF9zdGF0dXNfY29kZShzZWN1cml0eV90IGNhbGxlcikKK2ludDMyX3QgY2xpZW50X3Rlc3RfaXJxX3JvdXRpbmcoc2VjdXJpdHlfdCBjYWxsZXIpCiB7Ci0gICBpbnQzMl90ICAgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwotICAgcHNhX2hhbmRsZV90ICAgICAgIGhhbmRsZSA9IDA7Ci0gICBwc2Ffc3RhdHVzX3QgICAgICAgc3RhdHVzX29mX2NhbGw7CisgICBwc2FfaGFuZGxlX3QgICAgICAgICAgIGhhbmRsZTsKKyAgIGRyaXZlcl90ZXN0X2ZuX2lkX3QgICAgZHJpdmVyX3Rlc3RfZm5faWQgPSBURVNUX0lOVFJfU0VSVklDRTsKIAotICAgdmFsLT5wcmludChQUklOVF9URVNULAotICAgICAgICAgICAgIltDaGVjazFdIFRlc3QgcHNhX3JlcGx5IHdpdGggaW52YWxpZCBzdGF0dXMgY29kZSBmb3IgUFNBX0lQQ19DQUxMXG4iLCAwKTsKKyAgIC8qCisgICAgKiBUaGUgaW50ZXJydXB0IHJlbGF0ZWQgdGVzdCBjaGVjayBpcyBjYXB0dXJlZCBpbiBkcml2ZXJfcGFydGl0aW9uLmMgYXMgdGhpcyBpcyB0aGUKKyAgICAqIG9ubHkgcGFydGl0aW9uIGluIHRlc3Qgc3VpdGUgdGhhdCBob2xkcyB0aGUgaW50ZXJydXB0IGxpbmUuIFRoZSBpbnRlcnJ1cHQgdGVzdCBjaGVjaworICAgICogaXMgaW52b2tlZCBieSBjbGllbnQgYnkgY2FsbGluZyB0byBEUklWRVJfVEVTVF9TSUQgUm9UIHNlcnZpY2Ugb2YgZHJpdmVyIHBhcnRpdGlvbiB0aGF0CisgICAgKiBob2xkIHRoZSB0ZXN0IGNoZWNrLgorICAgICovCiAKLSAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSk7CisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMV0gVGVzdCBpcnEgcm91dGluZ1xuIiwgMCk7CiAKKyAgIC8qIENvbm5lY3QgdG8gRFJJVkVSX1RFU1RfU0lEICovCisgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoRFJJVkVSX1RFU1RfU0lELCAxKTsKICAgIGlmIChoYW5kbGUgPCAwKQogICAgewotICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENvbm5lY3Rpb24gZmFpbGVkXG4iLCAwKTsKLSAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHQgcHNhX2Nvbm5lY3QgZmFpbGVkLiBoYW5kbGU9MHgleFxuIiwgaGFuZGxlKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwogICAgfQogCi0gICBzdGF0dXNfb2ZfY2FsbCA9ICBwc2EtPmNhbGwoaGFuZGxlLCBOVUxMLCAwLCBOVUxMLCAwKTsKKyAgIC8qIEV4ZWN1dGUgZHJpdmVyIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gVEVTVF9JTlRSX1NFUlZJQ0UgKi8KKyAgIHBzYV9pbnZlYyBpbnZlYyA9IHsmZHJpdmVyX3Rlc3RfZm5faWQsIHNpemVvZihkcml2ZXJfdGVzdF9mbl9pZCl9OwogCi0gICAvKiBFeHBlY3RhdGlvbiBpcyBzZXJ2ZXIgdGVzdCBzaG91bGQgaGFuZyBhbmQgY29udHJvbCBzaG91bGRuJ3QgaGF2ZSBjb21lIGhlcmUgKi8KLSAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENhbGwgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2Vzc2VkXG4iLCAwKTsKLQotICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOworICAgaWYgKHBzYS0+Y2FsbChoYW5kbGUsICZpbnZlYywgMSwgTlVMTCwgMCkgIT0gUFNBX1NVQ0NFU1MpCisgICB7CisgICAgICAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKKyAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKKyAgIH0KIAogICAgcHNhLT5jbG9zZShoYW5kbGUpOwotICAgKHZvaWQpKHN0YXR1c19vZl9jYWxsKTsKLSAgIHJldHVybiBzdGF0dXM7CisgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjEvdGVzdF9pMDIxLmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyMS90ZXN0X2kwMjEuaAppbmRleCA0MDAyNTYzLi5jYzc2Y2FmIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyMS90ZXN0X2kwMjEuaAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyMS90ZXN0X2kwMjEuaApAQCAtMzMsNSArMzMsNSBAQAogCiBleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2kwMjFfY2xpZW50X3Rlc3RzX2xpc3RbXTsKIAotaW50MzJfdCBjbGllbnRfdGVzdF9wc2FfcmVwbHlfd2l0aF9pbnZhbGlkX2NhbGxfc3RhdHVzX2NvZGUoc2VjdXJpdHlfdCk7CitpbnQzMl90IGNsaWVudF90ZXN0X2lycV9yb3V0aW5nKHNlY3VyaXR5X3QpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyMS90ZXN0X3N1cHBfaTAyMS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjEvdGVzdF9zdXBwX2kwMjEuYwppbmRleCA5ZTJlYzE2Li42NzJmMzQwIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyMS90ZXN0X3N1cHBfaTAyMS5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDIxL3Rlc3Rfc3VwcF9pMDIxLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDc4ICsxNSwyMyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KIAotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKIAotaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfcmVwbHlfd2l0aF9pbnZhbGlkX2NhbGxfc3RhdHVzX2NvZGUodm9pZCk7CisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfaXJxX3JvdXRpbmcodm9pZCk7CiAKIHNlcnZlcl90ZXN0X3QgdGVzdF9pMDIxX3NlcnZlcl90ZXN0c19saXN0W10gPSB7CiAgICAgTlVMTCwKLSAgICBzZXJ2ZXJfdGVzdF9wc2FfcmVwbHlfd2l0aF9pbnZhbGlkX2NhbGxfc3RhdHVzX2NvZGUsCisgICAgc2VydmVyX3Rlc3RfaXJxX3JvdXRpbmcsCiAgICAgTlVMTCwKIH07CiAKLWludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX3JlcGx5X3dpdGhfaW52YWxpZF9jYWxsX3N0YXR1c19jb2RlKHZvaWQpCitpbnQzMl90IHNlcnZlcl90ZXN0X2lycV9yb3V0aW5nKHZvaWQpCiB7Ci0gICAgaW50MzJfdCAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKLSAgICBwc2FfbXNnX3QgICAgICAgbXNnID0gezB9OwotICAgIHBzYV9zdGF0dXNfdCAgICBpbnZhbGlkX3N0YXR1c19jb2RlID0gSU5UMzJfTUlOKzE7Ci0KLSAgIC8qIFRlc3QgaXMgdGFyZ2V0aW5nIGZhdGFsIGVycm9yIGNvbmRpdGlvbiBhbmQgaXQgd2lsbCBleHBlY3QgYW4gZXJyb3IgcmVjb3ZlcnkocmVib290KQotICAgICogdG8gaGFwcGVuLiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIHdhcyBpbnRlbmRlZCBhcyBwZXIgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKLSAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAotICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKLSAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KLSAgICAqCi0gICAgKiBOb3RlOiBJZiBTUE0gaXMgbm90IGNhcGFibGUgb2YgcmVib290aW5nIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbiwKLSAgICAqIGEgd2F0Y2hkb2cgdGltZXIgZW5hYmxlZCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LgotICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCi0gICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCi0gICAgKi8KLQotICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7Ci0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKSkKLSAgICB7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICB9Ci0KLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwotCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQotICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIChQU0FfU1VDQ0VTUyAtIDIpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCi0gICAgICAgIHN0YXR1cyA9IHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpOwotICAgICAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDMpLCBzdGF0dXMpKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7Ci0gICAgICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgKFBTQV9TVUNDRVNTIC0gMykpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgLyogQ2FsbCBwc2FfcmVwbHkgd2l0aCBpbnZhbGlkIHN0YXR1cyBjb2RlIGZvciBQU0FfSVBDX0NBTEwuIENhbGwgc2hvdWxkbid0IHJldHVybiAqLwotICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIGludmFsaWRfc3RhdHVzX2NvZGUpOwotCi0gICAgICAgICAgICAvKiBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KLSAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwKLSAgICAgICAgICAgICAgICAiXHRwc2FfcmVwbHkgd2l0aCBpbnZhbGlkIHN0YXR1cyBjb2RlIGZvciBDQUxMIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2Nlc3NlZFxuIiwgMCk7Ci0KLSAgICAgICAgICAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLwotICAgICAgICAgICAgaWYgKHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwNCksIHN0YXR1cyk7Ci0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwotICAgIHJldHVybiBzdGF0dXM7CisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDIyL3Rlc3RfaTAyMi5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjIvdGVzdF9pMDIyLmMKaW5kZXggNmZjNWFjNS4uMDk1NDgzNiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjIvdGVzdF9pMDIyLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjIvdGVzdF9pMDIyLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMjIuaCIKQEAgLTM1LDEyICszNSwxMiBAQAogewogICAgcHNhX2hhbmRsZV90ICAgICAgIGhhbmRsZSA9IDA7CiAKLSAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazFdIFRlc3RpbmcgcHNhX3JlcGx5IHdpdGggaW52YWxpZCBoYW5kbGVcbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDFdIFRlc3RpbmcgcHNhX3JlcGx5IHdpdGggaW52YWxpZCBoYW5kbGVcbiIsIDApOwogCiAgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpOwogCiAgICAvKiBFeHBlY3RhdGlvbiBpcyBzZXJ2ZXIgdGVzdCBzaG91bGQgaGFuZyBhbmQgY29udHJvbCBzaG91bGRuJ3QgaGF2ZSBjb21lIGhlcmUgKi8KLSAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENvbm5lY3Rpb24gc2hvdWxkIGZhaWxlZCBidXQgc3VjY2Vzc2VkXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENvbm5lY3Rpb24gc2hvdWxkIGZhaWxlZCBidXQgc3VjY2VlZFxuIiwgMCk7CiAKICAgICh2b2lkKShoYW5kbGUpOwogICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDIyL3Rlc3Rfc3VwcF9pMDIyLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyMi90ZXN0X3N1cHBfaTAyMi5jCmluZGV4IDZlNGY0M2EuLmUyYmEzOTEgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDIyL3Rlc3Rfc3VwcF9pMDIyLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjIvdGVzdF9zdXBwX2kwMjIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsOCArMTUsMTMgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKIAogaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfcmVwbHlfd2l0aF9pbnZhbGlkX2hhbmRsZSh2b2lkKTsKIApAQCAtMzEsNTAgKzM2LDYwIEBACiAgICAgcHNhX21zZ190ICAgbXNnID0gezB9OwogICAgIGludDMyX3QgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKIAotICAgLyogVGVzdCBpcyB0YXJnZXRpbmcgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCBpdCB3aWxsIGV4cGVjdCBhbiBlcnJvciByZWNvdmVyeShyZWJvb3QpCi0gICAgKiB0byBoYXBwZW4uIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgd2FzIGludGVuZGVkIGFzIHBlciB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgLyoKKyAgICAqIFRoaXMgdGVzdCBjaGVja3MgZm9yIHRoZSBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiBmb3IgdGhlIFBTQSBBUEkuIEFQSSdzIHJlc3BvbmQgdG8KKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY291bGQgYmUgZWl0aGVyIHRvIHJldHVybiBhcHByb3ByaWF0ZSBzdGF0dXMgY29kZSBvciBwYW5pYyB0aGUgY2FsbGVyLgorICAgICogV2hlbiBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWNzLCB0aGUgU1BFIGNhbm5vdCBjb250aW51ZSBub3JtYWwgZXhlY3V0aW9uLCBhcyBkZWZpbmVkCisgICAgKiBpbiB0aGlzIHNwZWNpZmljYXRpb24uIFRoZSBiZWhhdmlvciBvZiB0aGUgU1BNIGZvbGxvd2luZyBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWMgaXMKKyAgICAqIElNUExFTUVOVEFUSU9OIERFRklORUQtIEFybSByZWNvbW1lbmRzIHRoYXQgdGhlIFNQTSBjYXVzZXMgdGhlIHN5c3RlbSB0byByZXN0YXJ0IGluCisgICAgKiB0aGlzIHNpdHVhdGlvbi4gUmVmZXIgUFNBLUZGIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhbmljLgorICAgICogRm9yIHRoZSBjYXNlcyB3aGVyZSwgU1BNIGNhbm5vdCBjYXBhYmxlIHRvIHJlYm9vdCB0aGUgc3lzdGVtIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBzZXQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4gVGhpcyB3aWxsCisgICAgKiB0ZXN0cyBjb250aW51aXR5IGFuZCBhYmxlIHRvIGp1bXAgdG8gbmV4dCB0ZXN0cy4gVGhlcmVmb3JlLCBlYWNoIHRlc3Qgd2hvIGNoZWNrcyBmb3IKKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uLCBleHBlY3RzIHN5c3RlbSB0byBnZXQgcmVzZXQgZWl0aGVyIGJ5IFNQTSBvciB3YXRjaGRvZyBzZXQgYnkKKyAgICAqIHRoZSB0ZXN0IGhhcm5lc3MgZnVuY3Rpb24uCisgICAgKgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKgorICAgICogVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCBhcyBpbnRlbmRlZCBieSB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAogICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCiAgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQogICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgotICAgICoKLSAgICAqIE5vdGU6IElmIFNQTSBpcyBub3QgY2FwYWJsZSBvZiByZWJvb3RpbmcgKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93bikgaW4gZmF0YWwgZXJyb3IgY29uZGl0aW9uLAotICAgICogYSB3YXRjaGRvZyB0aW1lciBlbmFibGVkIGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuCi0gICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKLSAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KICAgICAqLwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAogICAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLwotICAgIHN0YXR1cyA9IHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOwotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCi0gICAgLypDYWxsIHBzYV9yZXBseSB3aXRoIElOVkFMSURfSEFOTERFLiBDYWxsIHNob3VsZG4ndCByZXR1cm4qLwotICAgIHBzYV9yZXBseShJTlZBTElEX0hBTkRMRSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgLyogQ2FsbCBwc2FfcmVwbHkgd2l0aCBJTlZBTElEX0hBTkxERS4gQ2FsbCBzaG91bGQgcGFuaWMgKi8KKyAgICBwc2EtPnJlcGx5KElOVkFMSURfSEFORExFLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKIAogICAgIC8qIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZSAqLwotICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwKLSAgICAgICAgICAgICAgICAiXHRwc2FfcmVwbHkgd2l0aCBpbnZhbGlkIGhhbmRsZSBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsCisgICAgICAgICAgICAgICAgIlx0cHNhX3JlcGx5IHdpdGggaW52YWxpZCBoYW5kbGUgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2VlZFxuIiwgMCk7CiAKICAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KLSAgICBzdGF0dXMgPSB2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMyksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMyksIHN0YXR1cykpCiAgICAgewotICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAogICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKLSAgICB2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwNCksIHN0YXR1cyk7CisgICAgdmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjA0KSwgc3RhdHVzKTsKICAgICByZXR1cm4gc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjMvdGVzdF9pMDIzLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyMy90ZXN0X2kwMjMuYwppbmRleCAxNjQ1NTJhLi42Yzg1ZGIyIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyMy90ZXN0X2kwMjMuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyMy90ZXN0X2kwMjMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTAyMy5oIgpAQCAtMzUsMTIgKzM1LDEyIEBACiB7CiAgICBwc2FfaGFuZGxlX3QgICAgICAgaGFuZGxlID0gMDsKIAotICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrMV0gVGVzdGluZyBwc2FfcmVwbHkgd2l0aCBpbnZhbGlkIGhhbmRsZVxuIiwgMCk7CisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMV0gVGVzdGluZyBwc2FfcmVwbHkgd2l0aCBpbnZhbGlkIGhhbmRsZVxuIiwgMCk7CiAKICAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSk7CiAKICAgIC8qIEV4cGVjdGF0aW9uIGlzIHNlcnZlciB0ZXN0IHNob3VsZCBoYW5nIGFuZCBjb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLwotICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q29ubmVjdGlvbiBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q29ubmVjdGlvbiBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZWVkXG4iLCAwKTsKIAogICAgKHZvaWQpKGhhbmRsZSk7CiAgICByZXR1cm4gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjMvdGVzdF9zdXBwX2kwMjMuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDIzL3Rlc3Rfc3VwcF9pMDIzLmMKaW5kZXggZDI4YWE0NC4uNDQzNmU0YSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjMvdGVzdF9zdXBwX2kwMjMuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyMy90ZXN0X3N1cHBfaTAyMy5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSw4ICsxNSwxMyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KIAotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKworI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfc2VydmVyX3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfc2VydmVyX3NwKQorZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOwogCiBpbnQzMl90IHNlcnZlcl90ZXN0X3BzYV9yZXBseV93aXRoX251bGxfaGFuZGxlKHZvaWQpOwogCkBAIC0zMSw1MiArMzYsNjIgQEAKICAgICBwc2FfbXNnX3QgICBtc2cgPSB7MH07CiAgICAgaW50MzJfdCAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwogCi0gICAvKiBUZXN0IGlzIHRhcmdldGluZyBmYXRhbCBlcnJvciBjb25kaXRpb24gYW5kIGl0IHdpbGwgZXhwZWN0IGFuIGVycm9yIHJlY292ZXJ5KHJlYm9vdCkKLSAgICAqIHRvIGhhcHBlbi4gVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCB3YXMgaW50ZW5kZWQgYXMgcGVyIHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCisgICAvKgorICAgICogVGhpcyB0ZXN0IGNoZWNrcyBmb3IgdGhlIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uIGZvciB0aGUgUFNBIEFQSS4gQVBJJ3MgcmVzcG9uZCB0bworICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb3VsZCBiZSBlaXRoZXIgdG8gcmV0dXJuIGFwcHJvcHJpYXRlIHN0YXR1cyBjb2RlIG9yIHBhbmljIHRoZSBjYWxsZXIuCisgICAgKiBXaGVuIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pY3MsIHRoZSBTUEUgY2Fubm90IGNvbnRpbnVlIG5vcm1hbCBleGVjdXRpb24sIGFzIGRlZmluZWQKKyAgICAqIGluIHRoaXMgc3BlY2lmaWNhdGlvbi4gVGhlIGJlaGF2aW9yIG9mIHRoZSBTUE0gZm9sbG93aW5nIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pYyBpcworICAgICogSU1QTEVNRU5UQVRJT04gREVGSU5FRC0gQXJtIHJlY29tbWVuZHMgdGhhdCB0aGUgU1BNIGNhdXNlcyB0aGUgc3lzdGVtIHRvIHJlc3RhcnQgaW4KKyAgICAqIHRoaXMgc2l0dWF0aW9uLiBSZWZlciBQU0EtRkYgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFuaWMuCisgICAgKiBGb3IgdGhlIGNhc2VzIHdoZXJlLCBTUE0gY2Fubm90IGNhcGFibGUgdG8gcmVib290IHRoZSBzeXN0ZW0gKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93biksCisgICAgKiBhIHdhdGNoZG9nIHRpbWVyIHNldCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LiBUaGlzIHdpbGwKKyAgICAqIHRlc3RzIGNvbnRpbnVpdHkgYW5kIGFibGUgdG8ganVtcCB0byBuZXh0IHRlc3RzLiBUaGVyZWZvcmUsIGVhY2ggdGVzdCB3aG8gY2hlY2tzIGZvcgorICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24sIGV4cGVjdHMgc3lzdGVtIHRvIGdldCByZXNldCBlaXRoZXIgYnkgU1BNIG9yIHdhdGNoZG9nIHNldCBieQorICAgICogdGhlIHRlc3QgaGFybmVzcyBmdW5jdGlvbi4KKyAgICAqCisgICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKKyAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KKyAgICAqCisgICAgKiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIGFzIGludGVuZGVkIGJ5IHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCiAgICAgKiBkdWUgdG8gb3RoZXIgcmVhc29ucywgdGVzdCBpcyBzZXR0aW5nIGEgYm9vdCBzaWduYXR1cmUgaW50byBub24tdm9sYXRpbGUgbWVtb3J5IGJlZm9yZSBhbmQKICAgICAqIGFmdGVyIHRhcmdldGVkIHRlc3QgY2hlY2suIEFmdGVyIGEgcmVib290LCB0aGVzZSBib290IHNpZ25hdHVyZXMgYXJlIGJlaW5nIHJlYWQgYnkgdGhlCiAgICAgKiBWQUwgQVBJcyB0byBkZWNpZGUgdGVzdCBzdGF0dXMuCi0gICAgKgotICAgICogTm90ZTogSWYgU1BNIGlzIG5vdCBjYXBhYmxlIG9mIHJlYm9vdGluZyAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSBpbiBmYXRhbCBlcnJvciBjb25kaXRpb24sCi0gICAgKiBhIHdhdGNoZG9nIHRpbWVyIGVuYWJsZWQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4KLSAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZwotICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgogICAgICovCiAKLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCiAgICAgewotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCiAgICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCi0gICAgc3RhdHVzID0gdmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUyk7Ci0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKKyAgICBzdGF0dXMgPSB2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCiAgICAgewotICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKLSAgICAvKiBUZXN0IGNoZWNrIC0gQ2FsbCBwc2FfcmVwbHkgd2l0aCBQU0FfTlVMTF9IQU5ETEUuIENhbGwgc2hvdWxkbid0IHJldHVybiAqLwotICAgIHBzYV9yZXBseShQU0FfTlVMTF9IQU5ETEUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgIC8qIFRlc3QgY2hlY2sgLSBDYWxsIHBzYV9yZXBseSB3aXRoIFBTQV9OVUxMX0hBTkRMRS4gQ2FsbCBzaG91bGQgcGFuaWMgKi8KKyAgICBwc2EtPnJlcGx5KFBTQV9OVUxMX0hBTkRMRSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAKICAgICAvKiBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KLSAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsCi0gICAgICAgICAgICAgICAgIlx0cHNhX3JlcGx5IHdpdGggTlVMTCBoYW5kbGUgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2Vzc2VkXG4iLCAwKTsKKyAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLAorICAgICAgICAgICAgICAgICJcdHBzYV9yZXBseSB3aXRoIE5VTEwgaGFuZGxlIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2NlZWRcbiIsIDApOwogCiAgICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCi0gICAgc3RhdHVzID0gdmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDMpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDMpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKIAogICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKLSAgICB2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwNCksIHN0YXR1cyk7CisgICAgdmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjA0KSwgc3RhdHVzKTsKICAgICByZXR1cm4gc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjQvdGVzdF9pMDI0LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNC90ZXN0X2kwMjQuYwppbmRleCBiOGZmYWFiLi5kNTg5Yzg5IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNC90ZXN0X2kwMjQuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNC90ZXN0X2kwMjQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTAyNC5oIgpAQCAtMzMsMzQgKzMzLDM0IEBACiAKIGludDMyX3QgY2xpZW50X3Rlc3RfcHNhX2NhbGxfd2l0aF9pbnZhbGlkX2hhbmRsZShzZWN1cml0eV90IGNhbGxlcikKIHsKLSAgIGludDMyX3QgICAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7Ci0gICBwc2FfaGFuZGxlX3QgICAgICAgaGFuZGxlID0gMDsKICAgIHBzYV9zdGF0dXNfdCAgICAgICBzdGF0dXNfb2ZfY2FsbDsKICAgIGJvb3Rfc3RhdGVfdCAgICAgICBib290X3N0YXRlOwogCiAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsCi0gICAgICAgICAgICAiW0NoZWNrMV0gVGVzdCBwc2FfY2FsbCB3aXRoIGludmFsaWQgaGFuZGxlXG4iLCAwKTsKKyAgICAgICAgICAgICJbQ2hlY2sgMV0gVGVzdCBwc2FfY2FsbCB3aXRoIGludmFsaWQgaGFuZGxlXG4iLCAwKTsKIAotICAgLyogVGVzdCBpcyB0YXJnZXRpbmcgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCBpdCB3aWxsIGV4cGVjdCBhbiBlcnJvciByZWNvdmVyeShyZWJvb3QpCi0gICAgKiB0byBoYXBwZW4uIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgd2FzIGludGVuZGVkIGFzIHBlciB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgLyoKKyAgICAqIFRoaXMgdGVzdCBjaGVja3MgZm9yIHRoZSBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiBmb3IgdGhlIFBTQSBBUEkuIEFQSSdzIHJlc3BvbmQgdG8KKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY291bGQgYmUgZWl0aGVyIHRvIHJldHVybiBhcHByb3ByaWF0ZSBzdGF0dXMgY29kZSBvciBwYW5pYyB0aGUgY2FsbGVyLgorICAgICogV2hlbiBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWNzLCB0aGUgU1BFIGNhbm5vdCBjb250aW51ZSBub3JtYWwgZXhlY3V0aW9uLCBhcyBkZWZpbmVkCisgICAgKiBpbiB0aGlzIHNwZWNpZmljYXRpb24uIFRoZSBiZWhhdmlvciBvZiB0aGUgU1BNIGZvbGxvd2luZyBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWMgaXMKKyAgICAqIElNUExFTUVOVEFUSU9OIERFRklORUQtIEFybSByZWNvbW1lbmRzIHRoYXQgdGhlIFNQTSBjYXVzZXMgdGhlIHN5c3RlbSB0byByZXN0YXJ0IGluCisgICAgKiB0aGlzIHNpdHVhdGlvbi4gUmVmZXIgUFNBLUZGIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhbmljLgorICAgICogRm9yIHRoZSBjYXNlcyB3aGVyZSwgU1BNIGNhbm5vdCBjYXBhYmxlIHRvIHJlYm9vdCB0aGUgc3lzdGVtIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBzZXQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4gVGhpcyB3aWxsCisgICAgKiB0ZXN0cyBjb250aW51aXR5IGFuZCBhYmxlIHRvIGp1bXAgdG8gbmV4dCB0ZXN0cy4gVGhlcmVmb3JlLCBlYWNoIHRlc3Qgd2hvIGNoZWNrcyBmb3IKKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uLCBleHBlY3RzIHN5c3RlbSB0byBnZXQgcmVzZXQgZWl0aGVyIGJ5IFNQTSBvciB3YXRjaGRvZyBzZXQgYnkKKyAgICAqIHRoZSB0ZXN0IGhhcm5lc3MgZnVuY3Rpb24uCisgICAgKgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKgorICAgICogVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCBhcyBpbnRlbmRlZCBieSB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAogICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCiAgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQogICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgotICAgICoKLSAgICAqIE5vdGU6IElmIFNQTSBpcyBub3QgY2FwYWJsZSBvZiByZWJvb3RpbmcgKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93bikgaW4gZmF0YWwgZXJyb3IgY29uZGl0aW9uLAotICAgICogYSB3YXRjaGRvZyB0aW1lciBlbmFibGVkIGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuCi0gICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKLSAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KICAgICAqLwogCi0gICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpOwotCi0gICBpZiAoaGFuZGxlIDwgMCkKLSAgIHsKLSAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDb25uZWN0aW9uIGZhaWxlZFxuIiwgMCk7Ci0gICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRF9IQU5ETEU7Ci0gICB9Ci0KICAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLwogICAgYm9vdF9zdGF0ZSA9IChjYWxsZXIgPT0gTk9OU0VDVVJFKSA/IEJPT1RfRVhQRUNURURfTlMgOiBCT09UX0VYUEVDVEVEX1M7CiAgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKGJvb3Rfc3RhdGUpKQpAQCAtNzIsOCArNzIsMTggQEAKICAgIC8qIFRlc3QgY2hlY2stIHBzYV9jYWxsIHdpdGggSU5WQUxJRF9IQU5ETEUgKi8KICAgIHN0YXR1c19vZl9jYWxsID0gIHBzYS0+Y2FsbChJTlZBTElEX0hBTkRMRSwgTlVMTCwgMCwgTlVMTCwgMCk7CiAKLSAgIC8qIEV4cGVjdGF0aW9uIGlzIHBzYV9jYWxsIHNob3VsZCBoYW5nIGFuZCBjb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLwotICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0cHNhX2NhbGwgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2Vzc2VkXG4iLCAwKTsKKyAgIC8qCisgICAgKiBJZiB0aGUgY2FsbGVyIGlzIGluIHRoZSBOU1BFLCBpdCBpcyBJTVBMRU1FTlRBVElPTiBERUZJTkVEIHdoZXRoZXIKKyAgICAqIGEgUFJPR1JBTU1FUiBFUlJPUiB3aWxsIHBhbmljIG9yIHJldHVybiBQU0FfRVJST1JfUFJPR1JBTU1FUl9FUlJPUi4KKyAgICAqIEZvciBTUEUgY2FsbGVyLCBpdCBtdXN0IHBhbmljLgorICAgICovCisgICBpZiAoY2FsbGVyID09IE5PTlNFQ1VSRSAmJiBzdGF0dXNfb2ZfY2FsbCA9PSBQU0FfRVJST1JfUFJPR1JBTU1FUl9FUlJPUikKKyAgIHsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworICAgfQorCisgICAvKiBJZiBQUk9HUkFNTUVSIEVSUk9SIHJlc3VsdHMgaW50byBwYW5pYyB0aGVuIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRwc2FfY2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZWVkXG4iLCAwKTsKIAogICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCiAgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCkBAIC04Miw4ICs5Miw1IEBACiAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CiAgICB9CiAKLSAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKLSAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKLSAgICh2b2lkKShzdGF0dXNfb2ZfY2FsbCk7Ci0gICByZXR1cm4gc3RhdHVzOworICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI0L3Rlc3Rfc3VwcF9pMDI0LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNC90ZXN0X3N1cHBfaTAyNC5jCmluZGV4IGQzYmJiZjEuLjYwZDk4OTUgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI0L3Rlc3Rfc3VwcF9pMDI0LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjQvdGVzdF9zdXBwX2kwMjQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsOCArMTUsMTMgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKIAogaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfaGFuZGxlKHZvaWQpOwogCkBAIC0yOCwyNSArMzMsNyBAQAogCiBpbnQzMl90IHNlcnZlcl90ZXN0X3BzYV9jYWxsX3dpdGhfaW52YWxpZF9oYW5kbGUodm9pZCkKIHsKLSAgICBpbnQzMl90ICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwotICAgIHBzYV9tc2dfdCAgICAgICBtc2cgPSB7MH07CiAKLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCi0gICAgewotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7Ci0gICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgfQotCi0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKLQotICAgIHZhbF9wcm9jZXNzX2NhbGxfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7Ci0KLSAgICAvKiBDb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLwotICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0Q29udHJvbCBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmVcbiIsIDApOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCAtMik7Ci0KLSAgICB2YWxfcHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7Ci0gICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBWQUxfU1RBVFVTX1NVQ0NFU1MpOworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNS90ZXN0X2kwMjUuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI1L3Rlc3RfaTAyNS5jCmluZGV4IDQ5NTI0N2YuLjY2ZDY5ZGQgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI1L3Rlc3RfaTAyNS5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI1L3Rlc3RfaTAyNS5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDI1LmgiCkBAIC0zMywzNCArMzMsMzQgQEAKIAogaW50MzJfdCBjbGllbnRfdGVzdF9wc2FfY2FsbF93aXRoX251bGxfaGFuZGxlKHNlY3VyaXR5X3QgY2FsbGVyKQogewotICAgaW50MzJfdCAgICAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKLSAgIHBzYV9oYW5kbGVfdCAgICAgICBoYW5kbGUgPSAwOwogICAgcHNhX3N0YXR1c190ICAgICAgIHN0YXR1c19vZl9jYWxsOwogICAgYm9vdF9zdGF0ZV90ICAgICAgIGJvb3Rfc3RhdGU7CiAKICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwKLSAgICAgICAgICAgICJbQ2hlY2sxXSBUZXN0IHBzYV9jYWxsIHdpdGggTlVMTCBoYW5kbGVcbiIsIDApOworICAgICAgICAgICAgIltDaGVjayAxXSBUZXN0IHBzYV9jYWxsIHdpdGggTlVMTCBoYW5kbGVcbiIsIDApOwogCi0gICAvKiBUZXN0IGlzIHRhcmdldGluZyBmYXRhbCBlcnJvciBjb25kaXRpb24gYW5kIGl0IHdpbGwgZXhwZWN0IGFuIGVycm9yIHJlY292ZXJ5KHJlYm9vdCkKLSAgICAqIHRvIGhhcHBlbi4gVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCB3YXMgaW50ZW5kZWQgYXMgcGVyIHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCisgICAvKgorICAgICogVGhpcyB0ZXN0IGNoZWNrcyBmb3IgdGhlIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uIGZvciB0aGUgUFNBIEFQSS4gQVBJJ3MgcmVzcG9uZCB0bworICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb3VsZCBiZSBlaXRoZXIgdG8gcmV0dXJuIGFwcHJvcHJpYXRlIHN0YXR1cyBjb2RlIG9yIHBhbmljIHRoZSBjYWxsZXIuCisgICAgKiBXaGVuIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pY3MsIHRoZSBTUEUgY2Fubm90IGNvbnRpbnVlIG5vcm1hbCBleGVjdXRpb24sIGFzIGRlZmluZWQKKyAgICAqIGluIHRoaXMgc3BlY2lmaWNhdGlvbi4gVGhlIGJlaGF2aW9yIG9mIHRoZSBTUE0gZm9sbG93aW5nIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pYyBpcworICAgICogSU1QTEVNRU5UQVRJT04gREVGSU5FRC0gQXJtIHJlY29tbWVuZHMgdGhhdCB0aGUgU1BNIGNhdXNlcyB0aGUgc3lzdGVtIHRvIHJlc3RhcnQgaW4KKyAgICAqIHRoaXMgc2l0dWF0aW9uLiBSZWZlciBQU0EtRkYgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFuaWMuCisgICAgKiBGb3IgdGhlIGNhc2VzIHdoZXJlLCBTUE0gY2Fubm90IGNhcGFibGUgdG8gcmVib290IHRoZSBzeXN0ZW0gKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93biksCisgICAgKiBhIHdhdGNoZG9nIHRpbWVyIHNldCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LiBUaGlzIHdpbGwKKyAgICAqIHRlc3RzIGNvbnRpbnVpdHkgYW5kIGFibGUgdG8ganVtcCB0byBuZXh0IHRlc3RzLiBUaGVyZWZvcmUsIGVhY2ggdGVzdCB3aG8gY2hlY2tzIGZvcgorICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24sIGV4cGVjdHMgc3lzdGVtIHRvIGdldCByZXNldCBlaXRoZXIgYnkgU1BNIG9yIHdhdGNoZG9nIHNldCBieQorICAgICogdGhlIHRlc3QgaGFybmVzcyBmdW5jdGlvbi4KKyAgICAqCisgICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKKyAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KKyAgICAqCisgICAgKiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIGFzIGludGVuZGVkIGJ5IHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCiAgICAgKiBkdWUgdG8gb3RoZXIgcmVhc29ucywgdGVzdCBpcyBzZXR0aW5nIGEgYm9vdCBzaWduYXR1cmUgaW50byBub24tdm9sYXRpbGUgbWVtb3J5IGJlZm9yZSBhbmQKICAgICAqIGFmdGVyIHRhcmdldGVkIHRlc3QgY2hlY2suIEFmdGVyIGEgcmVib290LCB0aGVzZSBib290IHNpZ25hdHVyZXMgYXJlIGJlaW5nIHJlYWQgYnkgdGhlCiAgICAgKiBWQUwgQVBJcyB0byBkZWNpZGUgdGVzdCBzdGF0dXMuCi0gICAgKgotICAgICogTm90ZTogSWYgU1BNIGlzIG5vdCBjYXBhYmxlIG9mIHJlYm9vdGluZyAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSBpbiBmYXRhbCBlcnJvciBjb25kaXRpb24sCi0gICAgKiBhIHdhdGNoZG9nIHRpbWVyIGVuYWJsZWQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4KLSAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZwotICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgogICAgICovCiAKLSAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSk7Ci0KLSAgIGlmIChoYW5kbGUgPCAwKQotICAgewotICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENvbm5lY3Rpb24gZmFpbGVkXG4iLCAwKTsKLSAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKLSAgIH0KLQogICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCiAgICBib290X3N0YXRlID0gKGNhbGxlciA9PSBOT05TRUNVUkUpID8gQk9PVF9FWFBFQ1RFRF9OUyA6IEJPT1RfRVhQRUNURURfUzsKICAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoYm9vdF9zdGF0ZSkpCkBAIC03Miw4ICs3MiwxOCBAQAogICAgLyogVGVzdCBjaGVjay0gcHNhX2NhbGwgd2l0aCBOVUxMIEhBTkRMRSAqLwogICAgc3RhdHVzX29mX2NhbGwgPSAgcHNhLT5jYWxsKFBTQV9OVUxMX0hBTkRMRSwgTlVMTCwgMCwgTlVMTCwgMCk7CiAKLSAgIC8qIEV4cGVjdGF0aW9uIGlzIHBzYV9jYWxsIHNob3VsZCBoYW5nIGFuZCBjb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLwotICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgLyoKKyAgICAqIElmIHRoZSBjYWxsZXIgaXMgaW4gdGhlIE5TUEUsIGl0IGlzIElNUExFTUVOVEFUSU9OIERFRklORUQgd2hldGhlcgorICAgICogYSBQUk9HUkFNTUVSIEVSUk9SIHdpbGwgcGFuaWMgb3IgcmV0dXJuIFBTQV9FUlJPUl9QUk9HUkFNTUVSX0VSUk9SLgorICAgICogRm9yIFNQRSBjYWxsZXIsIGl0IG11c3QgcGFuaWMuCisgICAgKi8KKyAgIGlmIChjYWxsZXIgPT0gTk9OU0VDVVJFICYmIHN0YXR1c19vZl9jYWxsID09IFBTQV9FUlJPUl9QUk9HUkFNTUVSX0VSUk9SKQorICAgeworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICB9CisKKyAgIC8qIElmIFBST0dSQU1NRVIgRVJST1IgcmVzdWx0cyBpbnRvIHBhbmljIHRoZW4gY29udHJvbCBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KKyAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENhbGwgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2VlZFxuIiwgMCk7CiAKICAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLwogICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQpAQCAtODIsOCArOTIsNSBAQAogICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwogICAgfQogCi0gICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7Ci0gICBwc2EtPmNsb3NlKGhhbmRsZSk7Ci0gICAodm9pZCkoc3RhdHVzX29mX2NhbGwpOwotICAgcmV0dXJuIHN0YXR1czsKKyAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNS90ZXN0X3N1cHBfaTAyNS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjUvdGVzdF9zdXBwX2kwMjUuYwppbmRleCAwMzZhMmM5Li4yMGYxNTU3IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNS90ZXN0X3N1cHBfaTAyNS5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI1L3Rlc3Rfc3VwcF9pMDI1LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDggKzE1LDEzIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CiAKIGludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX2NhbGxfd2l0aF9udWxsX2hhbmRsZSh2b2lkKTsKIApAQCAtMjgsMjUgKzMzLDYgQEAKIAogaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfY2FsbF93aXRoX251bGxfaGFuZGxlKHZvaWQpCiB7Ci0gICAgaW50MzJfdCAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKLSAgICBwc2FfbXNnX3QgICAgICAgbXNnID0gezB9OwotCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQotICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOwotICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgIH0KLQotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7Ci0KLSAgICB2YWxfcHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotCi0gICAgLyogQ29udHJvbCBzaG91bGRuJ3QgaGF2ZSBjb21lIGhlcmUgKi8KLSAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdENvbnRyb2wgc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlXG4iLCAwKTsKLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgLTIpOwotCi0gICAgdmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwotICAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CisgICAgdmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgVkFMX1NUQVRVU19TVUNDRVNTKTsKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjYvdGVzdF9pMDI2LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNi90ZXN0X2kwMjYuYwppbmRleCBjZWRjNGQ2Li5iYWZkOGE5IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNi90ZXN0X2kwMjYuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNi90ZXN0X2kwMjYuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTAyNi5oIgpAQCAtNDYsMTggKzQ2LDI4IEBACiAgICBwc2Ffb3V0dmVjICAgICAgICAgb3V0dmVjWzFdID0ge3smZGF0YSwgc2l6ZW9mKGRhdGEpfX07CiAKICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwKLSAgICAgICAgICAgICJbQ2hlY2sxXSBUZXN0IHBzYV9jYWxsIHdpdGggSU9WRUMgPiBQU0FfTUFYX0lPVkVDXG4iLCAwKTsKKyAgICAgICAgICAgICJbQ2hlY2sgMV0gVGVzdCBwc2FfY2FsbCB3aXRoIElPVkVDID4gUFNBX01BWF9JT1ZFQ1xuIiwgMCk7CiAKLSAgIC8qIFRlc3QgaXMgdGFyZ2V0aW5nIGZhdGFsIGVycm9yIGNvbmRpdGlvbiBhbmQgaXQgd2lsbCBleHBlY3QgYW4gZXJyb3IgcmVjb3ZlcnkocmVib290KQotICAgICogdG8gaGFwcGVuLiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIHdhcyBpbnRlbmRlZCBhcyBwZXIgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKKyAgIC8qCisgICAgKiBUaGlzIHRlc3QgY2hlY2tzIGZvciB0aGUgUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24gZm9yIHRoZSBQU0EgQVBJLiBBUEkncyByZXNwb25kIHRvCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvdWxkIGJlIGVpdGhlciB0byByZXR1cm4gYXBwcm9wcmlhdGUgc3RhdHVzIGNvZGUgb3IgcGFuaWMgdGhlIGNhbGxlci4KKyAgICAqIFdoZW4gYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljcywgdGhlIFNQRSBjYW5ub3QgY29udGludWUgbm9ybWFsIGV4ZWN1dGlvbiwgYXMgZGVmaW5lZAorICAgICogaW4gdGhpcyBzcGVjaWZpY2F0aW9uLiBUaGUgYmVoYXZpb3Igb2YgdGhlIFNQTSBmb2xsb3dpbmcgYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljIGlzCisgICAgKiBJTVBMRU1FTlRBVElPTiBERUZJTkVELSBBcm0gcmVjb21tZW5kcyB0aGF0IHRoZSBTUE0gY2F1c2VzIHRoZSBzeXN0ZW0gdG8gcmVzdGFydCBpbgorICAgICogdGhpcyBzaXR1YXRpb24uIFJlZmVyIFBTQS1GRiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYW5pYy4KKyAgICAqIEZvciB0aGUgY2FzZXMgd2hlcmUsIFNQTSBjYW5ub3QgY2FwYWJsZSB0byByZWJvb3QgdGhlIHN5c3RlbSAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSwKKyAgICAqIGEgd2F0Y2hkb2cgdGltZXIgc2V0IGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuIFRoaXMgd2lsbAorICAgICogdGVzdHMgY29udGludWl0eSBhbmQgYWJsZSB0byBqdW1wIHRvIG5leHQgdGVzdHMuIFRoZXJlZm9yZSwgZWFjaCB0ZXN0IHdobyBjaGVja3MgZm9yCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiwgZXhwZWN0cyBzeXN0ZW0gdG8gZ2V0IHJlc2V0IGVpdGhlciBieSBTUE0gb3Igd2F0Y2hkb2cgc2V0IGJ5CisgICAgKiB0aGUgdGVzdCBoYXJuZXNzIGZ1bmN0aW9uLgorICAgICoKKyAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZworICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgorICAgICoKKyAgICAqIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgYXMgaW50ZW5kZWQgYnkgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKICAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAogICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKICAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KLSAgICAqCi0gICAgKiBOb3RlOiBJZiBTUE0gaXMgbm90IGNhcGFibGUgb2YgcmVib290aW5nIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbiwKLSAgICAqIGEgd2F0Y2hkb2cgdGltZXIgZW5hYmxlZCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LgotICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCi0gICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCiAgICAgKi8KIAogICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxKTsKQEAgLTc5LDggKzg5LDE5IEBACiAgICAvKiBUZXN0IGNoZWNrLSBwc2FfY2FsbCB3aXRoIElPVkVDID4gUFNBX01BWF9JT1ZFQyAqLwogICAgc3RhdHVzX29mX2NhbGwgPSAgcHNhLT5jYWxsKGhhbmRsZSwgaW52ZWMsIFBTQV9NQVhfSU9WRUMsIG91dHZlYywgMSk7CiAKLSAgIC8qIEV4cGVjdGF0aW9uIGlzIHNlcnZlciB0ZXN0IHNob3VsZCBoYW5nIGFuZCBjb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLwotICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgLyoKKyAgICAqIElmIHRoZSBjYWxsZXIgaXMgaW4gdGhlIE5TUEUsIGl0IGlzIElNUExFTUVOVEFUSU9OIERFRklORUQgd2hldGhlcgorICAgICogYSBQUk9HUkFNTUVSIEVSUk9SIHdpbGwgcGFuaWMgb3IgcmV0dXJuIFBTQV9FUlJPUl9QUk9HUkFNTUVSX0VSUk9SLgorICAgICogRm9yIFNQRSBjYWxsZXIsIGl0IG11c3QgcGFuaWMuCisgICAgKi8KKyAgIGlmIChjYWxsZXIgPT0gTk9OU0VDVVJFICYmIHN0YXR1c19vZl9jYWxsID09IFBTQV9FUlJPUl9QUk9HUkFNTUVSX0VSUk9SKQorICAgeworICAgICAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworICAgfQorCisgICAvKiBJZiBQUk9HUkFNTUVSIEVSUk9SIHJlc3VsdHMgaW50byBwYW5pYyB0aGVuIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDYWxsIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2NlZWRcbiIsIDApOwogCiAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KICAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKQEAgLTkxLDYgKzExMiw1IEBACiAKICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKICAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKLSAgICh2b2lkKShzdGF0dXNfb2ZfY2FsbCk7CiAgICByZXR1cm4gc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjYvdGVzdF9pMDI2LmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNi90ZXN0X2kwMjYuaAppbmRleCA0MWQxNGRiLi4xODNhMDYwIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNi90ZXN0X2kwMjYuaAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNi90ZXN0X2kwMjYuaApAQCAtMjgsMTEgKzI4LDYgQEAKICNkZWZpbmUgcHNhIENPTkNBVChwc2EsX2NsaWVudF9zcCkKICNlbmRpZgogCi0vKiBSZWRlZmluaW5nIFBTQV9NQVhfSU9WRUMgYXMgaXQgaXMgdW5kZWZpbmVkIGZvciBjbGllbnQgKi8KLSNpZm5kZWYgUFNBX01BWF9JT1ZFQwotI2RlZmluZSBQU0FfTUFYX0lPVkVDIDQKLSNlbmRpZgotCiBleHRlcm4gdmFsX2FwaV90ICp2YWw7CiBleHRlcm4gcHNhX2FwaV90ICpwc2E7CiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI2L3Rlc3Rfc3VwcF9pMDI2LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNi90ZXN0X3N1cHBfaTAyNi5jCmluZGV4IDBlNWJlOGYuLjRiMTc5NGIgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI2L3Rlc3Rfc3VwcF9pMDI2LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjYvdGVzdF9zdXBwX2kwMjYuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsOCArMTUsMTMgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKIAogaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfY2FsbF93aXRoX2lvdmVjX21vcmVfdGhhbl9tYXhfbGltaXQoKTsKIApAQCAtMzAsMjMgKzM1LDQ1IEBACiB7CiAgICAgaW50MzJfdCAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKICAgICBwc2FfbXNnX3QgICAgICAgbXNnID0gezB9OworICAgIHBzYV9zaWduYWxfdCAgICBzaWduYWxzOwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAKLSAgICB2YWxfcHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOword2FpdDoKKyAgICBzaWduYWxzID0gcHNhLT53YWl0KFBTQV9XQUlUX0FOWSwgUFNBX0JMT0NLKTsKKyAgICBpZiAoc2lnbmFscyAmIFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHKQorICAgIHsKKyAgICAgICAgaWYgKHBzYS0+Z2V0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSAhPSBQU0FfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgZ290byB3YWl0OworICAgICAgICB9CiAKLSAgICAvKiBDb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLwotICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0Q29udHJvbCBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmVcbiIsIDApOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCAtMik7CisgICAgICAgIGlmIChtc2cudHlwZSA9PSBQU0FfSVBDX0NBTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCisgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDb250cm9sIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZVxuIiwgMCk7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIC0yKTsKKyAgICAgICAgICAgIHZhbC0+cHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgICAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobXNnLnR5cGUgPT0gUFNBX0lQQ19ESVNDT05ORUNUKQorICAgICAgICB7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0cHNhX3dhaXQgcmV0dXJuZWQgd2l0aCBpbnZhbGlkIHNpZ25hbCB2YWx1ZSA9IDB4JXhcbiIsIHNpZ25hbHMpOworICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgICB9CiAKLSAgICB2YWxfcHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7Ci0gICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKKyAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI3L3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI3L3Rlc3RfZW50cnkuYwppbmRleCAzZjA5ZjBiLi5lZDkyMTI5IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNy90ZXN0X2VudHJ5LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjcvdGVzdF9lbnRyeS5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAidGVzdF9pMDI3LmgiCiAKICNkZWZpbmUgVEVTVF9OVU0gIFZBTF9DUkVBVEVfVEVTVF9JRChWQUxfRkZfQkFTRSwgMjcpCi0jZGVmaW5lIFRFU1RfREVTQyAiVGVzdGluZyBQU0FfRFJPUF9DT05ORUNUSU9OXG4iCisjZGVmaW5lIFRFU1RfREVTQyAiVGVzdGluZyBjb25uZWN0aW9uIHRlcm1pbmF0aW9uIGF0IFBTQV9JUENfQ0FMTFxuIgogVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKIHZhbF9hcGlfdCAqdmFsID0gTlVMTDsKIHBzYV9hcGlfdCAqcHNhID0gTlVMTDsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI3L3Rlc3RfaTAyNy5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjcvdGVzdF9pMDI3LmMKaW5kZXggMmM2OWY3OS4uMWYyMGFkYyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjcvdGVzdF9pMDI3LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjcvdGVzdF9pMDI3LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMjcuaCIKQEAgLTM5LDMxICszOSwyOSBAQAogICAgYm9vdF9zdGF0ZV90ICAgICAgIGJvb3Rfc3RhdGU7CiAKICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwKLSAgICAgICAgICAgICJbQ2hlY2sxXSBUZXN0IFBTQV9EUk9QX0NPTk5FQ1RJT05cbiIsIDApOworICAgICAgICAgICAgIltDaGVjayAxXSBUZXN0IGNvbm5lY3Rpb24gdGVybWluYXRpb24gYXQgUFNBX0lQQ19DQUxMXG4iLCAwKTsKIAotICAgLyogVGVzdCBhbGdvcml0aG06CisgICAvKgorICAgICogVGhpcyB0ZXN0IGNoZWNrcyBmb3IgdGhlIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uIGZvciB0aGUgUFNBIEFQSS4gQVBJJ3MgcmVzcG9uZCB0bworICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb3VsZCBiZSBlaXRoZXIgdG8gcmV0dXJuIGFwcHJvcHJpYXRlIHN0YXR1cyBjb2RlIG9yIHBhbmljIHRoZSBjYWxsZXIuCisgICAgKiBXaGVuIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pY3MsIHRoZSBTUEUgY2Fubm90IGNvbnRpbnVlIG5vcm1hbCBleGVjdXRpb24sIGFzIGRlZmluZWQKKyAgICAqIGluIHRoaXMgc3BlY2lmaWNhdGlvbi4gVGhlIGJlaGF2aW9yIG9mIHRoZSBTUE0gZm9sbG93aW5nIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pYyBpcworICAgICogSU1QTEVNRU5UQVRJT04gREVGSU5FRC0gQXJtIHJlY29tbWVuZHMgdGhhdCB0aGUgU1BNIGNhdXNlcyB0aGUgc3lzdGVtIHRvIHJlc3RhcnQgaW4KKyAgICAqIHRoaXMgc2l0dWF0aW9uLiBSZWZlciBQU0EtRkYgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFuaWMuCisgICAgKiBGb3IgdGhlIGNhc2VzIHdoZXJlLCBTUE0gY2Fubm90IGNhcGFibGUgdG8gcmVib290IHRoZSBzeXN0ZW0gKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93biksCisgICAgKiBhIHdhdGNoZG9nIHRpbWVyIHNldCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LiBUaGlzIHdpbGwKKyAgICAqIHRlc3RzIGNvbnRpbnVpdHkgYW5kIGFibGUgdG8ganVtcCB0byBuZXh0IHRlc3RzLiBUaGVyZWZvcmUsIGVhY2ggdGVzdCB3aG8gY2hlY2tzIGZvcgorICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24sIGV4cGVjdHMgc3lzdGVtIHRvIGdldCByZXNldCBlaXRoZXIgYnkgU1BNIG9yIHdhdGNoZG9nIHNldCBieQorICAgICogdGhlIHRlc3QgaGFybmVzcyBmdW5jdGlvbi4KICAgICAqCi0gICAgKiBSb1Qgc2VydmljZSB3aWxsIHRlcm1pbmF0ZSB0aGUgY29ubmVjdGlvbiBieSBjb21wbGV0aW5nIHRoZSBtZXNzYWdlIHdpdGggYSBjYWxsCi0gICAgKiB0byBwc2FfcmVwbHkoKSB1c2luZyB0aGUgc3RhdHVzIGNvZGUgUFNBX0RST1BfQ09OTkVDVElPTi4KKyAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZworICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgogICAgICoKLSAgICAqIFRoZSBTUE0gY2FuIGltcGxlbWVudCB0aGUgcmVxdWlyZWQgUFNBX0RST1BfQ09OTkVDVElPTiBiZWhhdmlvciBpbiBkaWZmZXJlbnQgd2F5czoKLSAgICAqCi0gICAgKiAxLiBSZXR1cm4gUFNBX0RST1BfQ09OTkVDVElPTiB0byB0aGUgY2xpZW50IGZyb20gdGhlIGZhdWx0eSBwc2FfY2FsbCgpIGFuZCBtYXJrIHRoZQotICAgICogICAgU1BNIGNvbm5lY3Rpb24gb2JqZWN0IHNvIHRoYXQgYWxsIGZ1dHVyZSBjYWxscyB0byBwc2FfY2FsbCgpIG9uIHRoaXMgY29ubmVjdGlvbiBhcmUKLSAgICAqICAgIGltbWVkaWF0ZWx5IGZhaWxlZCB3aXRoIFBTQV9EUk9QX0NPTk5FQ1RJT04uIEFuZCBTUE0gbXVzdCBkZWxpdmVyIGEgUFNBX0lQQ19ESVNDT05ORUNUCi0gICAgKiAgICBtZXNzYWdlIGZvciB0aGUgY29ubmVjdGlvbiB0byB0aGUgUm9UIFNlcnZpY2UgZGlyZWN0bHkgYWZ0ZXIgcmVjZWlwdCBvZiB0aGUKLSAgICAqICAgIFBTQV9EUk9QX0NPTk5FQ1RJT04gY29tcGxldGlvbiB0byBhbGxvdyBjb25uZWN0aW9uIHJlc291cmNlcyB3aXRoaW4gdGhlIFJvVCBTZXJ2aWNlCi0gICAgKiAgICB0byBiZSByZWxlYXNlZC4KLSAgICAqCi0gICAgKiAyLiBUZXJtaW5hdGUgdGhlIGNsaWVudCB0YXNrIGFuZCByZXN0YXJ0IGlmIGFwcHJvcHJpYXRlIGZvciB0aGUgc3lzdGVtCi0gICAgKgotICAgICoKLSAgICAqIElmIFNQTSBpbXBsZW1lbnRhdGlvbiBoYXBwZW5zIHRvIGJlIHRvIGZpcnN0IGNhc2UsIHRoZSB0ZXN0IHdpbGwgZXhwZWN0IHBzYV9jYWxsIHRvIHJldHVybgotICAgICogUFNBX0RST1BfQ09OTkVDVElPTiBmb3IgZXZlcnkgZnV0dXJlIGNhbGwgdG8gcHNhX2NhbGwgb24gdGhlIGNvbm5lY3Rpb24KLSAgICAqCi0gICAgKiBJZiBTUE0gaW1wbGVtZW50YXRpb24gaGFwcGVucyB0byBiZSBzZWNvbmQgY2FzZSwgdGVzdCB3aWxsIGV4cGVjdCBkb2VzIG5vdCByZXR1cm4gYmVoYXZpb3VyCi0gICAgKiBmb3IgZXhlY3V0ZWQgcHNhX2NhbGwgQVBJCi0gICAqLworICAgICogVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCBhcyBpbnRlbmRlZCBieSB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCisgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQorICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgorICAgICovCiAKICAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfQ09OTkVDVElPTl9EUk9QX1NJRCwgMSk7CiAgICBpZiAoaGFuZGxlIDwgMCkKQEAgLTcyLDkgKzcwLDcgQEAKICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKICAgIH0KIAotICAgLyogU2V0dGluZyBib290IGZsYWcgdG8gQk9PVF9FWFBFQ1RFRF8qIHRvIGhlbHAgZXJyb3IgcmVjb3ZlcnkgaWYgU1BNIGJlaGF2aW91cgotICAgICogbWF0Y2hlcyB3aXRoIDJuZCBjYXNlCi0gICAgKi8KKyAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLwogICAgYm9vdF9zdGF0ZSA9IChjYWxsZXIgPT0gTk9OU0VDVVJFKSA/IEJPT1RfRVhQRUNURURfTlMgOiBCT09UX0VYUEVDVEVEX1M7CiAgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKGJvb3Rfc3RhdGUpKQogICAgewpAQCAtODQsMzYgKzgwLDQ5IEBACiAKICAgIHN0YXR1c19vZl9jYWxsID0gIHBzYS0+Y2FsbChoYW5kbGUsIE5VTEwsIDAsIE5VTEwsIDApOwogCisgICAvKgorICAgICogSWYgdGhlIGNhbGxlciBpcyBpbiB0aGUgTlNQRSwgaXQgaXMgSU1QTEVNRU5UQVRJT04gREVGSU5FRCB3aGV0aGVyCisgICAgKiBhIFBST0dSQU1NRVIgRVJST1Igd2lsbCBwYW5pYyBvciByZXR1cm4gUFNBX0VSUk9SX1BST0dSQU1NRVJfRVJST1IuCisgICAgKiBGb3IgU1BFIGNhbGxlciwgaXQgbXVzdCBwYW5pYy4KKyAgICAqLworICAgaWYgKGNhbGxlciA9PSBOT05TRUNVUkUgJiYgc3RhdHVzX29mX2NhbGwgPT0gUFNBX0VSUk9SX1BST0dSQU1NRVJfRVJST1IpCisgICB7CisgICAgICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCisgICAgICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX05PVF9FWFBFQ1RFRCkpCisgICAgICAgeworICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgICAgIH0KKworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfREVCVUcsICJcdFJlY2lldmVkIFBTQV9FUlJPUl9QUk9HUkFNTUVSX0VSUk9SXG4iLCAwKTsKKworICAgICAgIC8qIElmIHRoaXMgY2FsbCByZXR1cm5zIFBTQV9FUlJPUl9QUk9HUkFNTUVSX0VSUk9SLAorICAgICAgICAqIHdoZW4gYSB2YWxpZCBjb25uZWN0aW9uIGhhbmRsZSB3YXMgcHJvdmlkZWQsIHRoZW4KKyAgICAgICAgKiBhbGwgc3Vic2VxdWVudCBjYWxscyB0byBwc2FfY2FsbCgpIHdpdGggdGhlIHNhbWUgY29ubmVjdGlvbgorICAgICAgICAqIGhhbmRsZSB3aWxsIGltbWVkaWF0ZWx5IHJldHVybiBQU0FfRVJST1JfUFJPR1JBTU1FUl9FUlJPUi4KKyAgICAgICAgKi8KKyAgICAgICBzdGF0dXNfb2ZfY2FsbCA9ICBwc2EtPmNhbGwoaGFuZGxlLCBOVUxMLCAwLCBOVUxMLCAwKTsKKyAgICAgICBpZiAoc3RhdHVzX29mX2NhbGwgIT0gUFNBX0VSUk9SX1BST0dSQU1NRVJfRVJST1IpCisgICAgICAgeworICAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CisgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsCisgICAgICAgICAgICJcdENhbGwgc2hvdWxkIGhhdmUgcmV0dXJuZWQgUFNBX0VSUk9SX1BST0dSQU1NRVJfRVJST1IuIFN0YXR1cyA9IDB4JXhcbiIsCisgICAgICAgICAgIHN0YXR1c19vZl9jYWxsKTsKKyAgICAgICB9CisgICAgICAgcHNhLT5jbG9zZShoYW5kbGUpOworICAgICAgIHJldHVybiBzdGF0dXM7CisgICB9CisKKyAgIC8qIElmIFBST0dSQU1NRVIgRVJST1IgcmVzdWx0cyBpbnRvIHBhbmljIHRoZW4gY29udHJvbCBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KKyAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENhbGwgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2VlZFxuIiwgMCk7CisKICAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLwotICAgc3RhdHVzID0gdmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfTk9UX0VYUEVDVEVEKTsKLSAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKICAgIHsKICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7Ci0gICAgICAgZ290byBleGl0OworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwogICAgfQogCi0gICAvKiBDYXNlIDEgaW1wbGVtZW50YXRpb24gKi8KLSAgIGlmIChzdGF0dXNfb2ZfY2FsbCA9PSBQU0FfRFJPUF9DT05ORUNUSU9OKQotICAgewotICAgICAgICB2YWwtPnByaW50KFBSSU5UX0RFQlVHLCAiXHRSZWNpZXZlZCBQU0FfRFJPUF9DT05ORUNUSU9OXG4iLCAwKTsKLQotICAgICAgICBzdGF0dXNfb2ZfY2FsbCA9ICBwc2EtPmNhbGwoaGFuZGxlLCBOVUxMLCAwLCBOVUxMLCAwKTsKLSAgICAgICAgaWYgKHN0YXR1c19vZl9jYWxsICE9IFBTQV9EUk9QX0NPTk5FQ1RJT04pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKLSAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsCi0gICAgICAgICAgICAgICAgIlx0Q2FsbCBzaG91bGQgaGF2ZSByZXR1cm5lZCBQU0FfRFJPUF9DT05ORUNUSU9OLiBTdGF0dXMgPSAweCV4XG4iLCBzdGF0dXNfb2ZfY2FsbCk7Ci0gICAgICAgIH0KLSAgIH0KLSAgIC8qIElmIGltcGxlbWVudGF0aW9uIGlzIGNhc2UgMiwgY29udHJvbCBzaG91bGRuJ3QgaGF2ZSBjb21lIGhlcmUqLwotICAgZWxzZQotICAgewotICAgICAgICAvKiBwc2FfY2FsbCBzaG91bGQgaGFuZyBhbmQgY29udHJvbCBzaG91bGRuJ3QgaGF2ZSBjb21lIGhlcmUgKi8KLSAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwotICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDYWxsIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2Nlc3NlZFxuIiwgMCk7Ci0gICB9Ci0KLWV4aXQ6CiAgICBwc2EtPmNsb3NlKGhhbmRsZSk7Ci0gICByZXR1cm4gc3RhdHVzOworICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI3L3Rlc3Rfc3VwcF9pMDI3LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyNy90ZXN0X3N1cHBfaTAyNy5jCmluZGV4IDRjMWFjMjEuLmMyZWI0ZDMgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI3L3Rlc3Rfc3VwcF9pMDI3LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjcvdGVzdF9zdXBwX2kwMjcuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsOCArMTUsMTMgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKIAogaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfZHJvcF9jb25uZWN0aW9uKHZvaWQpOwogCkBAIC0zMSwzNSArMzYsMzcgQEAKICAgICBpbnQzMl90ICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwogICAgIHBzYV9tc2dfdCAgICAgICBtc2cgPSB7MH07CiAKLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX0NPTk5FQ1RJT05fRFJPUF9TSUcsICZtc2cpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfQ09OTkVDVElPTl9EUk9QX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCiAgICAgewotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCi0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKIAotICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2NhbGxfcmVxdWVzdChTRVJWRVJfQ09OTkVDVElPTl9EUk9QX1NJRywgJm1zZyk7Ci0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9DT05ORUNUSU9OX0RST1BfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKICAgICB7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCAtMik7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTIpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfRFJPUF9DT05ORUNUSU9OKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfUFJPR1JBTU1FUl9FUlJPUik7CiAgICAgfQogCiBleGl0OgotICAgIC8qIFNQTSBtdXN0IGRlbGl2ZXIgYSBQU0FfSVBDX0RJU0NPTk5FQ1QgbWVzc2FnZSBmb3IgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIFJvVCBTZXJ2aWNlCi0gICAgICAgZGlyZWN0bHkgYWZ0ZXIgcmVjZWlwdCBvZiB0aGUgUFNBX0RST1BfQ09OTkVDVElPTiBjb21wbGV0aW9uIHRvIGFsbG93IGNvbm5lY3Rpb24gcmVzb3VyY2VzCi0gICAgICAgd2l0aGluIHRoZSBSb1QgU2VydmljZSB0byBiZSByZWxlYXNlZCAqLwotICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfQ09OTkVDVElPTl9EUk9QX1NJRywgJm1zZyk7Ci0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKKyAgICAvKgorICAgICAqIFNQTSBtdXN0IGRlbGl2ZXIgYSBQU0FfSVBDX0RJU0NPTk5FQ1QgbWVzc2FnZSBmb3IgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIFJvVCBTZXJ2aWNlCisgICAgICogZGlyZWN0bHkgYWZ0ZXIgcmVjZWlwdCBvZiB0aGUgUFNBX0VSUk9SX1BST0dSQU1NRVJfRVJST1IgY29tcGxldGlvbiB0byBhbGxvdworICAgICAqIGNvbm5lY3Rpb24gcmVzb3VyY2VzIHdpdGhpbiB0aGUgUm9UIFNlcnZpY2UgdG8gYmUgcmVsZWFzZWQKKyAgICAgKi8KKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9DT05ORUNUSU9OX0RST1BfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKICAgICB7Ci0gICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RGlzY29ubmVjdCByZXF1ZXN0IGZhaWxlZFxuIiwgMCk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdERpc2Nvbm5lY3QgcmVxdWVzdCBmYWlsZWRcbiIsIDApOwogICAgIH0KLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogICAgIHJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyOC90ZXN0X2VudHJ5LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyOC90ZXN0X2VudHJ5LmMKaW5kZXggNjEyNmY0Ny4uYzI1OWVmYiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjgvdGVzdF9lbnRyeS5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI4L3Rlc3RfZW50cnkuYwpAQCAtMzQsNyArMzQsNyBAQAogCiAgICAgLyogdGVzdCBpbml0ICovCiAgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfTE9XX1RJTUVPVVQpKTsKLSAgICBpZighSVNfVEVTVF9TVEFSVCh2YWwtPmdldF9zdGF0dXMoKSkpCisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKICAgICB7CiAgICAgICAgIGdvdG8gdGVzdF9leGl0OwogICAgIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI4L3Rlc3RfaTAyOC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjgvdGVzdF9pMDI4LmMKaW5kZXggMGUzNTM5Zi4uYTViZTlkMyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjgvdGVzdF9pMDI4LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjgvdGVzdF9pMDI4LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMjguaCIKQEAgLTM1LDcgKzM1LDcgQEAKIHsKICAgIHBzYV9oYW5kbGVfdCAgICAgICBoYW5kbGUgPSAwOwogCi0gICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sxXSBUZXN0IHBzYV9yZWFkIGF0IFBTQV9JUENfQ09OTkVDVFxuIiwgMCk7CisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMV0gVGVzdCBwc2FfcmVhZCBhdCBQU0FfSVBDX0NPTk5FQ1RcbiIsIDApOwogCiAgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1JFTEFYX01JTk9SX1ZFUlNJT05fU0lELCAxKTsKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjgvdGVzdF9zdXBwX2kwMjguYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI4L3Rlc3Rfc3VwcF9pMDI4LmMKaW5kZXggODhkZjNjNS4uM2M1NzFlMyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjgvdGVzdF9zdXBwX2kwMjguYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyOC90ZXN0X3N1cHBfaTAyOC5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSw4ICsxNSwxMyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KIAotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKworI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfc2VydmVyX3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfc2VydmVyX3NwKQorZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOwogCiAjZGVmaW5lIE5VTV9PRl9CWVRFUyA0CiAKQEAgLTM0LDQ1ICszOSw1NSBAQAogICAgIHBzYV9tc2dfdCAgICAgICBtc2cgPSB7MH07CiAgICAgdWludDhfdCAgICAgICAgIGRhdGFbTlVNX09GX0JZVEVTXSA9IHswfTsKIAotICAgLyogVGVzdCBpcyB0YXJnZXRpbmcgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCBpdCB3aWxsIGV4cGVjdCBhbiBlcnJvciByZWNvdmVyeShyZWJvb3QpCi0gICAgKiB0byBoYXBwZW4uIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgd2FzIGludGVuZGVkIGFzIHBlciB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgLyoKKyAgICAqIFRoaXMgdGVzdCBjaGVja3MgZm9yIHRoZSBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiBmb3IgdGhlIFBTQSBBUEkuIEFQSSdzIHJlc3BvbmQgdG8KKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY291bGQgYmUgZWl0aGVyIHRvIHJldHVybiBhcHByb3ByaWF0ZSBzdGF0dXMgY29kZSBvciBwYW5pYyB0aGUgY2FsbGVyLgorICAgICogV2hlbiBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWNzLCB0aGUgU1BFIGNhbm5vdCBjb250aW51ZSBub3JtYWwgZXhlY3V0aW9uLCBhcyBkZWZpbmVkCisgICAgKiBpbiB0aGlzIHNwZWNpZmljYXRpb24uIFRoZSBiZWhhdmlvciBvZiB0aGUgU1BNIGZvbGxvd2luZyBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWMgaXMKKyAgICAqIElNUExFTUVOVEFUSU9OIERFRklORUQtIEFybSByZWNvbW1lbmRzIHRoYXQgdGhlIFNQTSBjYXVzZXMgdGhlIHN5c3RlbSB0byByZXN0YXJ0IGluCisgICAgKiB0aGlzIHNpdHVhdGlvbi4gUmVmZXIgUFNBLUZGIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhbmljLgorICAgICogRm9yIHRoZSBjYXNlcyB3aGVyZSwgU1BNIGNhbm5vdCBjYXBhYmxlIHRvIHJlYm9vdCB0aGUgc3lzdGVtIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBzZXQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4gVGhpcyB3aWxsCisgICAgKiB0ZXN0cyBjb250aW51aXR5IGFuZCBhYmxlIHRvIGp1bXAgdG8gbmV4dCB0ZXN0cy4gVGhlcmVmb3JlLCBlYWNoIHRlc3Qgd2hvIGNoZWNrcyBmb3IKKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uLCBleHBlY3RzIHN5c3RlbSB0byBnZXQgcmVzZXQgZWl0aGVyIGJ5IFNQTSBvciB3YXRjaGRvZyBzZXQgYnkKKyAgICAqIHRoZSB0ZXN0IGhhcm5lc3MgZnVuY3Rpb24uCisgICAgKgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKgorICAgICogVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCBhcyBpbnRlbmRlZCBieSB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAogICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCiAgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQogICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgotICAgICoKLSAgICAqIE5vdGU6IElmIFNQTSBpcyBub3QgY2FwYWJsZSBvZiByZWJvb3RpbmcgKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93bikgaW4gZmF0YWwgZXJyb3IgY29uZGl0aW9uLAotICAgICogYSB3YXRjaGRvZyB0aW1lciBlbmFibGVkIGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuCi0gICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKLSAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KICAgICAqLwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9SRUxBWF9NSU5PUl9WRVJTSU9OX1NJRywgJm1zZyk7Ci0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKSkKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9SRUxBWF9NSU5PUl9WRVJTSU9OX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCiAgICAgewotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCiAgICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCi0gICAgc3RhdHVzID0gdmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUyk7Ci0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKKyAgICBzdGF0dXMgPSB2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCiAgICAgewotICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKLSAgICAvKnBzYV9yZWFkIGF0IFBTQV9JUENfQ09OTkVDVCAqLwotICAgIHBzYV9yZWFkKG1zZy5oYW5kbGUsIDAsICh2b2lkICopZGF0YSwgMCk7CisgICAgLyogcHNhX3JlYWQgYXQgUFNBX0lQQ19DT05ORUNULCBjYWxsIHNob3VsZCBwYW5pYyAqLworICAgIHBzYS0+cmVhZChtc2cuaGFuZGxlLCAwLCAodm9pZCAqKWRhdGEsIDApOwogCiAgICAgLyogU2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCi0gICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRDb250cm9sIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZVxuIiwgMCk7CisgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q29udHJvbCBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmVcbiIsIDApOwogCiAgICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCi0gICAgaWYgKHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCisgICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQogICAgIHsKLSAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKICAgICB9Ci0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI5L3Rlc3RfaTAyOS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjkvdGVzdF9pMDI5LmMKaW5kZXggNjlmM2M1MS4uNTFkMTk5YiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjkvdGVzdF9pMDI5LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjkvdGVzdF9pMDI5LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMjkuaCIKQEAgLTM1LDE3ICszNSwxNiBAQAogewogICAgcHNhX2hhbmRsZV90ICAgICAgIGhhbmRsZSA9IDA7CiAKLSAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazFdIFRlc3QgcHNhX3JlYWQgYXQgUFNBX0lQQ19ESVNDT05ORUNUXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAxXSBUZXN0IHBzYV9yZWFkIGF0IFBTQV9JUENfRElTQ09OTkVDVFxuIiwgMCk7CiAKICAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfUkVMQVhfTUlOT1JfVkVSU0lPTl9TSUQsIDEpOwotCi0gICAvKiBTaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KLSAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENoZWNrIGZvciBwc2FfcmVhZCBhdCBQU0FfSVBDX0RJU0NPTk5FQ1QgZmFpbGVkXG4iLCAwKTsKLQogICAgaWYgKGhhbmRsZSA+IDApCiAgICB7CiAgICAgICAgcHNhLT5jbG9zZShoYW5kbGUpOwogICAgfQogCisgICAvKiBTaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KKyAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENoZWNrIGZvciBwc2FfcmVhZCBhdCBQU0FfSVBDX0RJU0NPTk5FQ1QgZmFpbGVkXG4iLCAwKTsKKwogICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI5L3Rlc3Rfc3VwcF9pMDI5LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAyOS90ZXN0X3N1cHBfaTAyOS5jCmluZGV4IDE3MzhiMTAuLjBlN2FhYzYgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDI5L3Rlc3Rfc3VwcF9pMDI5LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMjkvdGVzdF9zdXBwX2kwMjkuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsOCArMTUsMTMgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKIAogI2RlZmluZSBOVU1fT0ZfQllURVMgNAogCkBAIC0zNCw1MiArMzksNjMgQEAKICAgICBwc2FfbXNnX3QgICAgICAgbXNnID0gezB9OwogICAgIHVpbnQ4X3QgICAgICAgICBkYXRhW05VTV9PRl9CWVRFU10gPSB7MH07CiAKLSAgIC8qIFRlc3QgaXMgdGFyZ2V0aW5nIGZhdGFsIGVycm9yIGNvbmRpdGlvbiBhbmQgaXQgd2lsbCBleHBlY3QgYW4gZXJyb3IgcmVjb3ZlcnkocmVib290KQotICAgICogdG8gaGFwcGVuLiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIHdhcyBpbnRlbmRlZCBhcyBwZXIgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKKyAgIC8qCisgICAgKiBUaGlzIHRlc3QgY2hlY2tzIGZvciB0aGUgUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24gZm9yIHRoZSBQU0EgQVBJLiBBUEkncyByZXNwb25kIHRvCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvdWxkIGJlIGVpdGhlciB0byByZXR1cm4gYXBwcm9wcmlhdGUgc3RhdHVzIGNvZGUgb3IgcGFuaWMgdGhlIGNhbGxlci4KKyAgICAqIFdoZW4gYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljcywgdGhlIFNQRSBjYW5ub3QgY29udGludWUgbm9ybWFsIGV4ZWN1dGlvbiwgYXMgZGVmaW5lZAorICAgICogaW4gdGhpcyBzcGVjaWZpY2F0aW9uLiBUaGUgYmVoYXZpb3Igb2YgdGhlIFNQTSBmb2xsb3dpbmcgYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljIGlzCisgICAgKiBJTVBMRU1FTlRBVElPTiBERUZJTkVELSBBcm0gcmVjb21tZW5kcyB0aGF0IHRoZSBTUE0gY2F1c2VzIHRoZSBzeXN0ZW0gdG8gcmVzdGFydCBpbgorICAgICogdGhpcyBzaXR1YXRpb24uIFJlZmVyIFBTQS1GRiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYW5pYy4KKyAgICAqIEZvciB0aGUgY2FzZXMgd2hlcmUsIFNQTSBjYW5ub3QgY2FwYWJsZSB0byByZWJvb3QgdGhlIHN5c3RlbSAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSwKKyAgICAqIGEgd2F0Y2hkb2cgdGltZXIgc2V0IGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuIFRoaXMgd2lsbAorICAgICogdGVzdHMgY29udGludWl0eSBhbmQgYWJsZSB0byBqdW1wIHRvIG5leHQgdGVzdHMuIFRoZXJlZm9yZSwgZWFjaCB0ZXN0IHdobyBjaGVja3MgZm9yCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiwgZXhwZWN0cyBzeXN0ZW0gdG8gZ2V0IHJlc2V0IGVpdGhlciBieSBTUE0gb3Igd2F0Y2hkb2cgc2V0IGJ5CisgICAgKiB0aGUgdGVzdCBoYXJuZXNzIGZ1bmN0aW9uLgorICAgICoKKyAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZworICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgorICAgICoKKyAgICAqIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgYXMgaW50ZW5kZWQgYnkgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKICAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAogICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKICAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KLSAgICAqCi0gICAgKiBOb3RlOiBJZiBTUE0gaXMgbm90IGNhcGFibGUgb2YgcmVib290aW5nIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbiwKLSAgICAqIGEgd2F0Y2hkb2cgdGltZXIgZW5hYmxlZCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LgotICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCi0gICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCiAgICAgKi8KIAotICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfUkVMQVhfTUlOT1JfVkVSU0lPTl9TSUcsICZtc2cpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfUkVMQVhfTUlOT1JfVkVSU0lPTl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9SRUxBWF9NSU5PUl9WRVJTSU9OX1NJRywgJm1zZyk7Ci0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9SRUxBWF9NSU5PUl9WRVJTSU9OX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCiAgICAgewotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKICAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KLSAgICBzdGF0dXMgPSB2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDMpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKICAgICB7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAotICAgIC8qIFRlc3QgY2hlY2sgLSBwc2FfcmVhZCBhdCBQU0FfSVBDX0RJU0NPTk5FQ1QgKi8KLSAgICBwc2FfcmVhZChtc2cuaGFuZGxlLCAwLCAodm9pZCAqKWRhdGEsIDApOworICAgIC8qIFRlc3QgY2hlY2sgLSBwc2FfcmVhZCBhdCBQU0FfSVBDX0RJU0NPTk5FQ1QsIGNhbGwgc2hvdWxkIHBhbmljICovCisgICAgcHNhLT5yZWFkKG1zZy5oYW5kbGUsIDAsICh2b2lkICopZGF0YSwgMCk7CiAKICAgICAvKiBTaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KLSAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdENvbnRyb2wgc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlXG4iLCAwKTsKKyAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDb250cm9sIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZVxuIiwgMCk7CiAKICAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KLSAgICBpZiAodmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCiAgICAgewotICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOwogICAgIH0KLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworCisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRDsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDMwL3Rlc3RfaTAzMC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzAvdGVzdF9pMDMwLmMKaW5kZXggM2E0YTc2Ny4uZjZlZWY5MiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzAvdGVzdF9pMDMwLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzAvdGVzdF9pMDMwLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMzAuaCIKQEAgLTM4LDcgKzM4LDcgQEAKICAgIHBzYV9zdGF0dXNfdCAgICAgICBzdGF0dXNfb2ZfY2FsbDsKIAogICAgdmFsLT5wcmludChQUklOVF9URVNULAotICAgICAgICAgICAgIltDaGVjazFdIFRlc3QgcHNhX3JlYWQgd2l0aCBOVUxMIGhhbmRsZVxuIiwgMCk7CisgICAgICAgICAgICAiW0NoZWNrIDFdIFRlc3QgcHNhX3JlYWQgd2l0aCBOVUxMIGhhbmRsZVxuIiwgMCk7CiAKICAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSk7CiAKQEAgLTUxLDcgKzUxLDcgQEAKICAgIHN0YXR1c19vZl9jYWxsID0gIHBzYS0+Y2FsbChoYW5kbGUsIE5VTEwsIDAsIE5VTEwsIDApOwogCiAgICAvKiBFeHBlY3RhdGlvbiBpcyBzZXJ2ZXIgdGVzdCBzaG91bGQgaGFuZyBhbmQgY29udHJvbCBzaG91bGRuJ3QgaGF2ZSBjb21lIGhlcmUgKi8KLSAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENhbGwgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2Vzc2VkXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENhbGwgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2VlZFxuIiwgMCk7CiAKICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzAvdGVzdF9zdXBwX2kwMzAuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDMwL3Rlc3Rfc3VwcF9pMDMwLmMKaW5kZXggZmIzYWZkNy4uNmM2N2EwMCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzAvdGVzdF9zdXBwX2kwMzAuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzMC90ZXN0X3N1cHBfaTAzMC5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSw4ICsxNSwxMyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KIAotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKworI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfc2VydmVyX3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfc2VydmVyX3NwKQorZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOwogCiAjZGVmaW5lIE5VTV9PRl9CWVRFUyA0CiAKQEAgLTM0LDY0ICszOSw3NCBAQAogICAgIHBzYV9tc2dfdCAgICAgICBtc2cgPSB7MH07CiAgICAgdWludDhfdCAgICAgICAgIGRhdGFbTlVNX09GX0JZVEVTXSA9IHswfTsKIAotICAgLyogVGVzdCBpcyB0YXJnZXRpbmcgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCBpdCB3aWxsIGV4cGVjdCBhbiBlcnJvciByZWNvdmVyeShyZWJvb3QpCi0gICAgKiB0byBoYXBwZW4uIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgd2FzIGludGVuZGVkIGFzIHBlciB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgLyoKKyAgICAqIFRoaXMgdGVzdCBjaGVja3MgZm9yIHRoZSBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiBmb3IgdGhlIFBTQSBBUEkuIEFQSSdzIHJlc3BvbmQgdG8KKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY291bGQgYmUgZWl0aGVyIHRvIHJldHVybiBhcHByb3ByaWF0ZSBzdGF0dXMgY29kZSBvciBwYW5pYyB0aGUgY2FsbGVyLgorICAgICogV2hlbiBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWNzLCB0aGUgU1BFIGNhbm5vdCBjb250aW51ZSBub3JtYWwgZXhlY3V0aW9uLCBhcyBkZWZpbmVkCisgICAgKiBpbiB0aGlzIHNwZWNpZmljYXRpb24uIFRoZSBiZWhhdmlvciBvZiB0aGUgU1BNIGZvbGxvd2luZyBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWMgaXMKKyAgICAqIElNUExFTUVOVEFUSU9OIERFRklORUQtIEFybSByZWNvbW1lbmRzIHRoYXQgdGhlIFNQTSBjYXVzZXMgdGhlIHN5c3RlbSB0byByZXN0YXJ0IGluCisgICAgKiB0aGlzIHNpdHVhdGlvbi4gUmVmZXIgUFNBLUZGIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhbmljLgorICAgICogRm9yIHRoZSBjYXNlcyB3aGVyZSwgU1BNIGNhbm5vdCBjYXBhYmxlIHRvIHJlYm9vdCB0aGUgc3lzdGVtIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBzZXQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4gVGhpcyB3aWxsCisgICAgKiB0ZXN0cyBjb250aW51aXR5IGFuZCBhYmxlIHRvIGp1bXAgdG8gbmV4dCB0ZXN0cy4gVGhlcmVmb3JlLCBlYWNoIHRlc3Qgd2hvIGNoZWNrcyBmb3IKKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uLCBleHBlY3RzIHN5c3RlbSB0byBnZXQgcmVzZXQgZWl0aGVyIGJ5IFNQTSBvciB3YXRjaGRvZyBzZXQgYnkKKyAgICAqIHRoZSB0ZXN0IGhhcm5lc3MgZnVuY3Rpb24uCisgICAgKgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKgorICAgICogVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCBhcyBpbnRlbmRlZCBieSB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAogICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCiAgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQogICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgotICAgICoKLSAgICAqIE5vdGU6IElmIFNQTSBpcyBub3QgY2FwYWJsZSBvZiByZWJvb3RpbmcgKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93bikgaW4gZmF0YWwgZXJyb3IgY29uZGl0aW9uLAotICAgICogYSB3YXRjaGRvZyB0aW1lciBlbmFibGVkIGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuCi0gICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKLSAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KICAgICAqLwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAKLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2NhbGxfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCiAgICAgewotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgLTIpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIC0yKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKICAgICAgICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCi0gICAgICAgIHN0YXR1cyA9IHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpOwotICAgICAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDMpLCBzdGF0dXMpKQorICAgICAgICBzdGF0dXMgPSB2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUyk7CisgICAgICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDMpLCBzdGF0dXMpKQogICAgICAgICB7Ci0gICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7Ci0gICAgICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgLTMpOworICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTMpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgLyogVGVzdCBjaGVjay0gcHNhX3JlYWQgd2l0aCBQU0FfTlVMTF9IQU5ETEUgKi8KLSAgICAgICAgICAgIHBzYV9yZWFkKFBTQV9OVUxMX0hBTkRMRSwgMCwgKHZvaWQgKilkYXRhLCAwKTsKKyAgICAgICAgICAgIC8qIFRlc3QgY2hlY2stIHBzYV9yZWFkIHdpdGggUFNBX05VTExfSEFORExFLCBjYWxsIHNob3VsZCBwYW5pYyAqLworICAgICAgICAgICAgcHNhLT5yZWFkKFBTQV9OVUxMX0hBTkRMRSwgMCwgKHZvaWQgKilkYXRhLCAwKTsKIAogICAgICAgICAgICAgLyogc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCi0gICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsCi0gICAgICAgICAgICAgICAgIlx0cHNhX3JlYWQgd2l0aCBOVUxMIGhhbmRsZSBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwKKyAgICAgICAgICAgICAgICAiXHRwc2FfcmVhZCB3aXRoIE5VTEwgaGFuZGxlIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2NlZWRcbiIsIDApOwogCiAgICAgICAgICAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KLSAgICAgICAgICAgIGlmICh2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgICAgICAgICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgICAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwotICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC00KTsKKyAgICAgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTQpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpOwotICAgIHN0YXR1cyA9ICgodmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSkKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpOworICAgIHN0YXR1cyA9ICgodmFsLT5wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZykpCiAgICAgICAgICAgICAgICA/IFZBTF9TVEFUVVNfRVJST1IgOiBzdGF0dXMpOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAgICAgcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDMxL3Rlc3RfaTAzMS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzEvdGVzdF9pMDMxLmMKaW5kZXggZmZhNWE3Yy4uZGMyMjE1MSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzEvdGVzdF9pMDMxLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzEvdGVzdF9pMDMxLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMzEuaCIKQEAgLTM4LDcgKzM4LDcgQEAKICAgIHBzYV9zdGF0dXNfdCAgICAgICBzdGF0dXNfb2ZfY2FsbDsKIAogICAgdmFsLT5wcmludChQUklOVF9URVNULAotICAgICAgICAgICAgIltDaGVjazFdIFRlc3QgcHNhX3JlYWQgd2l0aCBpbnZhbGlkIGhhbmRsZVxuIiwgMCk7CisgICAgICAgICAgICAiW0NoZWNrIDFdIFRlc3QgcHNhX3JlYWQgd2l0aCBpbnZhbGlkIGhhbmRsZVxuIiwgMCk7CiAKICAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSk7CiAgICBpZiAoaGFuZGxlIDwgMCkKQEAgLTUwLDcgKzUwLDcgQEAKICAgIHN0YXR1c19vZl9jYWxsID0gIHBzYS0+Y2FsbChoYW5kbGUsIE5VTEwsIDAsIE5VTEwsIDApOwogCiAgICAvKiBFeHBlY3RhdGlvbiBpcyBzZXJ2ZXIgdGVzdCBzaG91bGQgaGFuZyBhbmQgY29udHJvbCBzaG91bGRuJ3QgaGF2ZSBjb21lIGhlcmUgKi8KLSAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENhbGwgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2Vzc2VkXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENhbGwgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2VlZFxuIiwgMCk7CiAKICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzEvdGVzdF9zdXBwX2kwMzEuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDMxL3Rlc3Rfc3VwcF9pMDMxLmMKaW5kZXggM2I0MWJhMS4uOWJhYzQ3YSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzEvdGVzdF9zdXBwX2kwMzEuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzMS90ZXN0X3N1cHBfaTAzMS5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSw4ICsxNSwxMyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KIAotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKworI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfc2VydmVyX3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfc2VydmVyX3NwKQorZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOwogCiAjZGVmaW5lIE5VTV9PRl9CWVRFUyA0CiAKQEAgLTM0LDY0ICszOSw3NCBAQAogICAgIHBzYV9tc2dfdCAgICAgICBtc2cgPSB7MH07CiAgICAgdWludDhfdCAgICAgICAgIGRhdGFbTlVNX09GX0JZVEVTXSA9IHswfTsKIAotICAgLyogVGVzdCBpcyB0YXJnZXRpbmcgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCBpdCB3aWxsIGV4cGVjdCBhbiBlcnJvciByZWNvdmVyeShyZWJvb3QpCi0gICAgKiB0byBoYXBwZW4uIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgd2FzIGludGVuZGVkIGFzIHBlciB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgLyoKKyAgICAqIFRoaXMgdGVzdCBjaGVja3MgZm9yIHRoZSBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiBmb3IgdGhlIFBTQSBBUEkuIEFQSSdzIHJlc3BvbmQgdG8KKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY291bGQgYmUgZWl0aGVyIHRvIHJldHVybiBhcHByb3ByaWF0ZSBzdGF0dXMgY29kZSBvciBwYW5pYyB0aGUgY2FsbGVyLgorICAgICogV2hlbiBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWNzLCB0aGUgU1BFIGNhbm5vdCBjb250aW51ZSBub3JtYWwgZXhlY3V0aW9uLCBhcyBkZWZpbmVkCisgICAgKiBpbiB0aGlzIHNwZWNpZmljYXRpb24uIFRoZSBiZWhhdmlvciBvZiB0aGUgU1BNIGZvbGxvd2luZyBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWMgaXMKKyAgICAqIElNUExFTUVOVEFUSU9OIERFRklORUQtIEFybSByZWNvbW1lbmRzIHRoYXQgdGhlIFNQTSBjYXVzZXMgdGhlIHN5c3RlbSB0byByZXN0YXJ0IGluCisgICAgKiB0aGlzIHNpdHVhdGlvbi4gUmVmZXIgUFNBLUZGIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhbmljLgorICAgICogRm9yIHRoZSBjYXNlcyB3aGVyZSwgU1BNIGNhbm5vdCBjYXBhYmxlIHRvIHJlYm9vdCB0aGUgc3lzdGVtIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBzZXQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4gVGhpcyB3aWxsCisgICAgKiB0ZXN0cyBjb250aW51aXR5IGFuZCBhYmxlIHRvIGp1bXAgdG8gbmV4dCB0ZXN0cy4gVGhlcmVmb3JlLCBlYWNoIHRlc3Qgd2hvIGNoZWNrcyBmb3IKKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uLCBleHBlY3RzIHN5c3RlbSB0byBnZXQgcmVzZXQgZWl0aGVyIGJ5IFNQTSBvciB3YXRjaGRvZyBzZXQgYnkKKyAgICAqIHRoZSB0ZXN0IGhhcm5lc3MgZnVuY3Rpb24uCisgICAgKgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKgorICAgICogVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCBhcyBpbnRlbmRlZCBieSB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAogICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCiAgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQogICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgotICAgICoKLSAgICAqIE5vdGU6IElmIFNQTSBpcyBub3QgY2FwYWJsZSBvZiByZWJvb3RpbmcgKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93bikgaW4gZmF0YWwgZXJyb3IgY29uZGl0aW9uLAotICAgICogYSB3YXRjaGRvZyB0aW1lciBlbmFibGVkIGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuCi0gICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKLSAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KICAgICAqLwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAKLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2NhbGxfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCiAgICAgewotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgLTIpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIC0yKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKICAgICAgICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCi0gICAgICAgIHN0YXR1cyA9IHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpOwotICAgICAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDMpLCBzdGF0dXMpKQorICAgICAgICBzdGF0dXMgPSB2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUyk7CisgICAgICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDMpLCBzdGF0dXMpKQogICAgICAgICB7Ci0gICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7Ci0gICAgICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgLTMpOworICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTMpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgLyogVGVzdCBjaGVjay0gcHNhX3JlYWQgd2l0aCBJTlZBTElEX0hBTkRMRSAqLwotICAgICAgICAgICAgcHNhX3JlYWQoSU5WQUxJRF9IQU5ETEUsIDAsICh2b2lkICopZGF0YSwgMCk7CisgICAgICAgICAgICAvKiBUZXN0IGNoZWNrLSBwc2FfcmVhZCB3aXRoIElOVkFMSURfSEFORExFLCBjYWxsIHNob3VsZCBwYW5pYyAqLworICAgICAgICAgICAgcHNhLT5yZWFkKElOVkFMSURfSEFORExFLCAwLCAodm9pZCAqKWRhdGEsIDApOwogCiAgICAgICAgICAgICAvKiBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KLSAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwKLSAgICAgICAgICAgICAgICAiXHRwc2FfcmVhZCB3aXRoIGludmFsaWQgaGFuZGxlIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2Nlc3NlZFxuIiwgMCk7CisgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLAorICAgICAgICAgICAgICAgICJcdHBzYV9yZWFkIHdpdGggaW52YWxpZCBoYW5kbGUgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2VlZFxuIiwgMCk7CiAKICAgICAgICAgICAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLwotICAgICAgICAgICAgaWYgKHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCisgICAgICAgICAgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7Ci0gICAgICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgLTQpOworICAgICAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCAtNCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwNCksIHN0YXR1cyk7Ci0gICAgc3RhdHVzID0gKCh2YWxfcHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpKQorICAgIHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwNCksIHN0YXR1cyk7CisgICAgc3RhdHVzID0gKCh2YWwtPnByb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSkKICAgICAgICAgICAgICAgID8gVkFMX1NUQVRVU19FUlJPUiA6IHN0YXR1cyk7Ci0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKICAgICByZXR1cm4gc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzIvdGVzdF9pMDMyLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzMi90ZXN0X2kwMzIuYwppbmRleCA3MTIyNTRiLi5mMDUyNzgzIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzMi90ZXN0X2kwMzIuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzMi90ZXN0X2kwMzIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTAzMi5oIgpAQCAtMzgsNyArMzgsNyBAQAogICAgcHNhX3N0YXR1c190ICAgICAgIHN0YXR1c19vZl9jYWxsOwogCiAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsCi0gICAgICAgICAgICAiW0NoZWNrMV0gVGVzdCBwc2FfcmVhZCB3aXRoIGludmVjX2lkeD1QU0FfTUFYX0lPVkVDXG4iLCAwKTsKKyAgICAgICAgICAgICJbQ2hlY2sgMV0gVGVzdCBwc2FfcmVhZCB3aXRoIGludmVjX2lkeD1QU0FfTUFYX0lPVkVDXG4iLCAwKTsKIAogICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxKTsKICAgIGlmIChoYW5kbGUgPCAwKQpAQCAtNTAsNyArNTAsNyBAQAogICAgc3RhdHVzX29mX2NhbGwgPSAgcHNhLT5jYWxsKGhhbmRsZSwgTlVMTCwgMCwgTlVMTCwgMCk7CiAKICAgIC8qIEV4cGVjdGF0aW9uIGlzIHNlcnZlciB0ZXN0IHNob3VsZCBoYW5nIGFuZCBjb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLwotICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZWVkXG4iLCAwKTsKIAogICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzMi90ZXN0X3N1cHBfaTAzMi5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzIvdGVzdF9zdXBwX2kwMzIuYwppbmRleCA5NDE2MTVjLi5lNDVkNDdiIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzMi90ZXN0X3N1cHBfaTAzMi5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDMyL3Rlc3Rfc3VwcF9pMDMyLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDggKzE1LDEzIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CiAKICNkZWZpbmUgTlVNX09GX0JZVEVTIDQKIApAQCAtMzQsNjQgKzM5LDc0IEBACiAgICAgcHNhX21zZ190ICAgICAgIG1zZyA9IHswfTsKICAgICB1aW50OF90ICAgICAgICAgZGF0YVtOVU1fT0ZfQllURVNdID0gezB9OwogCi0gICAvKiBUZXN0IGlzIHRhcmdldGluZyBmYXRhbCBlcnJvciBjb25kaXRpb24gYW5kIGl0IHdpbGwgZXhwZWN0IGFuIGVycm9yIHJlY292ZXJ5KHJlYm9vdCkKLSAgICAqIHRvIGhhcHBlbi4gVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCB3YXMgaW50ZW5kZWQgYXMgcGVyIHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCisgICAvKgorICAgICogVGhpcyB0ZXN0IGNoZWNrcyBmb3IgdGhlIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uIGZvciB0aGUgUFNBIEFQSS4gQVBJJ3MgcmVzcG9uZCB0bworICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb3VsZCBiZSBlaXRoZXIgdG8gcmV0dXJuIGFwcHJvcHJpYXRlIHN0YXR1cyBjb2RlIG9yIHBhbmljIHRoZSBjYWxsZXIuCisgICAgKiBXaGVuIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pY3MsIHRoZSBTUEUgY2Fubm90IGNvbnRpbnVlIG5vcm1hbCBleGVjdXRpb24sIGFzIGRlZmluZWQKKyAgICAqIGluIHRoaXMgc3BlY2lmaWNhdGlvbi4gVGhlIGJlaGF2aW9yIG9mIHRoZSBTUE0gZm9sbG93aW5nIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pYyBpcworICAgICogSU1QTEVNRU5UQVRJT04gREVGSU5FRC0gQXJtIHJlY29tbWVuZHMgdGhhdCB0aGUgU1BNIGNhdXNlcyB0aGUgc3lzdGVtIHRvIHJlc3RhcnQgaW4KKyAgICAqIHRoaXMgc2l0dWF0aW9uLiBSZWZlciBQU0EtRkYgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFuaWMuCisgICAgKiBGb3IgdGhlIGNhc2VzIHdoZXJlLCBTUE0gY2Fubm90IGNhcGFibGUgdG8gcmVib290IHRoZSBzeXN0ZW0gKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93biksCisgICAgKiBhIHdhdGNoZG9nIHRpbWVyIHNldCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LiBUaGlzIHdpbGwKKyAgICAqIHRlc3RzIGNvbnRpbnVpdHkgYW5kIGFibGUgdG8ganVtcCB0byBuZXh0IHRlc3RzLiBUaGVyZWZvcmUsIGVhY2ggdGVzdCB3aG8gY2hlY2tzIGZvcgorICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24sIGV4cGVjdHMgc3lzdGVtIHRvIGdldCByZXNldCBlaXRoZXIgYnkgU1BNIG9yIHdhdGNoZG9nIHNldCBieQorICAgICogdGhlIHRlc3QgaGFybmVzcyBmdW5jdGlvbi4KKyAgICAqCisgICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKKyAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KKyAgICAqCisgICAgKiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIGFzIGludGVuZGVkIGJ5IHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCiAgICAgKiBkdWUgdG8gb3RoZXIgcmVhc29ucywgdGVzdCBpcyBzZXR0aW5nIGEgYm9vdCBzaWduYXR1cmUgaW50byBub24tdm9sYXRpbGUgbWVtb3J5IGJlZm9yZSBhbmQKICAgICAqIGFmdGVyIHRhcmdldGVkIHRlc3QgY2hlY2suIEFmdGVyIGEgcmVib290LCB0aGVzZSBib290IHNpZ25hdHVyZXMgYXJlIGJlaW5nIHJlYWQgYnkgdGhlCiAgICAgKiBWQUwgQVBJcyB0byBkZWNpZGUgdGVzdCBzdGF0dXMuCi0gICAgKgotICAgICogTm90ZTogSWYgU1BNIGlzIG5vdCBjYXBhYmxlIG9mIHJlYm9vdGluZyAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSBpbiBmYXRhbCBlcnJvciBjb25kaXRpb24sCi0gICAgKiBhIHdhdGNoZG9nIHRpbWVyIGVuYWJsZWQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4KLSAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZwotICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgogICAgICovCiAKLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCiAgICAgewotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCi0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKIAotICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2NhbGxfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7Ci0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKICAgICB7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCAtMik7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTIpOwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KLSAgICAgICAgc3RhdHVzID0gdmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUyk7Ci0gICAgICAgIGlmKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKKyAgICAgICAgc3RhdHVzID0gdmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpOworICAgICAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKICAgICAgICAgewotICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOwotICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC0zKTsKKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIC0zKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFRlc3QgY2hlY2stIHBzYV9yZWFkIHdpdGggaW52ZWNfaWR4PVBTQV9NQVhfSU9WRUMgKi8KLSAgICAgICAgICAgIHBzYV9yZWFkKG1zZy5oYW5kbGUsIFBTQV9NQVhfSU9WRUMsICh2b2lkICopZGF0YSwgMCk7CisgICAgICAgICAgICAvKiBUZXN0IGNoZWNrLSBwc2FfcmVhZCB3aXRoIGludmVjX2lkeD1QU0FfTUFYX0lPVkVDLCBjYWxsIHNob3VsZCBwYW5pYyAqLworICAgICAgICAgICAgcHNhLT5yZWFkKG1zZy5oYW5kbGUsIFBTQV9NQVhfSU9WRUMsICh2b2lkICopZGF0YSwgMCk7CiAKICAgICAgICAgICAgIC8qIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZSAqLwotICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLAotICAgICAgICAgICAgICAgICJcdHBzYV9yZWFkIHdpdGggaW52ZWNfaWR4PVBTQV9NQVhfSU9WRUMgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2Vzc2VkXG4iLCAwKTsKKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsCisgICAgICAgICAgICAgICAgIlx0cHNhX3JlYWQgd2l0aCBpbnZlY19pZHg9UFNBX01BWF9JT1ZFQyBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZWVkXG4iLCAwKTsKIAogICAgICAgICAgICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCi0gICAgICAgICAgICBpZiAodmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgICAgICAgICAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7Ci0gICAgICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgLTQpOworICAgICAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCAtNCk7CiAKICAgICAgICAgfQogICAgIH0KIAotICAgIHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjA0KSwgc3RhdHVzKTsKLSAgICBzdGF0dXMgPSAoKHZhbF9wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZykpCisgICAgdmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjA0KSwgc3RhdHVzKTsKKyAgICBzdGF0dXMgPSAoKHZhbC0+cHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpKQogICAgICAgICAgICAgICAgPyBWQUxfU1RBVFVTX0VSUk9SIDogc3RhdHVzKTsKLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogICAgIHJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzMy90ZXN0X2kwMzMuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDMzL3Rlc3RfaTAzMy5jCmluZGV4IDY4ZTM1YmMuLjE3OTJkZmEgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDMzL3Rlc3RfaTAzMy5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDMzL3Rlc3RfaTAzMy5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDMzLmgiCkBAIC0zOCw3ICszOCw3IEBACiAgICBwc2Ffc3RhdHVzX3QgICAgICAgc3RhdHVzX29mX2NhbGw7CiAKICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwKLSAgICAgICAgICAgICJbQ2hlY2sxXSBUZXN0IHBzYV9yZWFkIHdpdGggaW52ZWNfaWR4ID4gUFNBX01BWF9JT1ZFQ1xuIiwgMCk7CisgICAgICAgICAgICAiW0NoZWNrIDFdIFRlc3QgcHNhX3JlYWQgd2l0aCBpbnZlY19pZHggPiBQU0FfTUFYX0lPVkVDXG4iLCAwKTsKIAogICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxKTsKICAgIGlmIChoYW5kbGUgPCAwKQpAQCAtNTAsNyArNTAsNyBAQAogICAgc3RhdHVzX29mX2NhbGwgPSAgcHNhLT5jYWxsKGhhbmRsZSwgTlVMTCwgMCwgTlVMTCwgMCk7CiAKICAgIC8qIEV4cGVjdGF0aW9uIGlzIHNlcnZlciB0ZXN0IHNob3VsZCBoYW5nIGFuZCBjb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLwotICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZWVkXG4iLCAwKTsKIAogICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzMy90ZXN0X3N1cHBfaTAzMy5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzMvdGVzdF9zdXBwX2kwMzMuYwppbmRleCA3MGY5MzA4Li40MjVjMjU1IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzMy90ZXN0X3N1cHBfaTAzMy5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDMzL3Rlc3Rfc3VwcF9pMDMzLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDggKzE1LDEzIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CiAKICNkZWZpbmUgTlVNX09GX0JZVEVTIDQKIApAQCAtMzQsNjQgKzM5LDc0IEBACiAgICAgcHNhX21zZ190ICAgICAgIG1zZyA9IHswfTsKICAgICB1aW50OF90ICAgICAgICAgZGF0YVtOVU1fT0ZfQllURVNdID0gezB9OwogCi0gICAvKiBUZXN0IGlzIHRhcmdldGluZyBmYXRhbCBlcnJvciBjb25kaXRpb24gYW5kIGl0IHdpbGwgZXhwZWN0IGFuIGVycm9yIHJlY292ZXJ5KHJlYm9vdCkKLSAgICAqIHRvIGhhcHBlbi4gVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCB3YXMgaW50ZW5kZWQgYXMgcGVyIHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCisgICAvKgorICAgICogVGhpcyB0ZXN0IGNoZWNrcyBmb3IgdGhlIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uIGZvciB0aGUgUFNBIEFQSS4gQVBJJ3MgcmVzcG9uZCB0bworICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb3VsZCBiZSBlaXRoZXIgdG8gcmV0dXJuIGFwcHJvcHJpYXRlIHN0YXR1cyBjb2RlIG9yIHBhbmljIHRoZSBjYWxsZXIuCisgICAgKiBXaGVuIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pY3MsIHRoZSBTUEUgY2Fubm90IGNvbnRpbnVlIG5vcm1hbCBleGVjdXRpb24sIGFzIGRlZmluZWQKKyAgICAqIGluIHRoaXMgc3BlY2lmaWNhdGlvbi4gVGhlIGJlaGF2aW9yIG9mIHRoZSBTUE0gZm9sbG93aW5nIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pYyBpcworICAgICogSU1QTEVNRU5UQVRJT04gREVGSU5FRC0gQXJtIHJlY29tbWVuZHMgdGhhdCB0aGUgU1BNIGNhdXNlcyB0aGUgc3lzdGVtIHRvIHJlc3RhcnQgaW4KKyAgICAqIHRoaXMgc2l0dWF0aW9uLiBSZWZlciBQU0EtRkYgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFuaWMuCisgICAgKiBGb3IgdGhlIGNhc2VzIHdoZXJlLCBTUE0gY2Fubm90IGNhcGFibGUgdG8gcmVib290IHRoZSBzeXN0ZW0gKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93biksCisgICAgKiBhIHdhdGNoZG9nIHRpbWVyIHNldCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LiBUaGlzIHdpbGwKKyAgICAqIHRlc3RzIGNvbnRpbnVpdHkgYW5kIGFibGUgdG8ganVtcCB0byBuZXh0IHRlc3RzLiBUaGVyZWZvcmUsIGVhY2ggdGVzdCB3aG8gY2hlY2tzIGZvcgorICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24sIGV4cGVjdHMgc3lzdGVtIHRvIGdldCByZXNldCBlaXRoZXIgYnkgU1BNIG9yIHdhdGNoZG9nIHNldCBieQorICAgICogdGhlIHRlc3QgaGFybmVzcyBmdW5jdGlvbi4KKyAgICAqCisgICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKKyAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KKyAgICAqCisgICAgKiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIGFzIGludGVuZGVkIGJ5IHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCiAgICAgKiBkdWUgdG8gb3RoZXIgcmVhc29ucywgdGVzdCBpcyBzZXR0aW5nIGEgYm9vdCBzaWduYXR1cmUgaW50byBub24tdm9sYXRpbGUgbWVtb3J5IGJlZm9yZSBhbmQKICAgICAqIGFmdGVyIHRhcmdldGVkIHRlc3QgY2hlY2suIEFmdGVyIGEgcmVib290LCB0aGVzZSBib290IHNpZ25hdHVyZXMgYXJlIGJlaW5nIHJlYWQgYnkgdGhlCiAgICAgKiBWQUwgQVBJcyB0byBkZWNpZGUgdGVzdCBzdGF0dXMuCi0gICAgKgotICAgICogTm90ZTogSWYgU1BNIGlzIG5vdCBjYXBhYmxlIG9mIHJlYm9vdGluZyAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSBpbiBmYXRhbCBlcnJvciBjb25kaXRpb24sCi0gICAgKiBhIHdhdGNoZG9nIHRpbWVyIGVuYWJsZWQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4KLSAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZwotICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgogICAgICovCiAKLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCiAgICAgewotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCi0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKIAotICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2NhbGxfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7Ci0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKICAgICB7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCAtMik7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTIpOwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KLSAgICAgICAgc3RhdHVzID0gdmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUyk7Ci0gICAgICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMyksIHN0YXR1cykpCisgICAgICAgIHN0YXR1cyA9IHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKTsKKyAgICAgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMyksIHN0YXR1cykpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKLSAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCAtMyk7CisgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOworICAgICAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCAtMyk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICAvKiBUZXN0IGNoZWNrLSBwc2FfcmVhZCB3aXRoIGludmVjX2lkeCA+IFBTQV9NQVhfSU9WRUMgKi8KLSAgICAgICAgICAgIHBzYV9yZWFkKG1zZy5oYW5kbGUsIFBTQV9NQVhfSU9WRUMgKyAxLCAodm9pZCAqKWRhdGEsIDApOworICAgICAgICAgICAgLyogVGVzdCBjaGVjay0gcHNhX3JlYWQgd2l0aCBpbnZlY19pZHggPiBQU0FfTUFYX0lPVkVDLCBjYWxsIHNob3VsZCBwYW5pYyAqLworICAgICAgICAgICAgcHNhLT5yZWFkKG1zZy5oYW5kbGUsIFBTQV9NQVhfSU9WRUMgKyAxLCAodm9pZCAqKWRhdGEsIDApOwogCiAgICAgICAgICAgICAvKiBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KLSAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwKLSAgICAgICAgICAgICAgICAiXHRwc2FfcmVhZCB3aXRoIGludmVjX2lkeCA+IFBTQV9NQVhfSU9WRUMgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2Vzc2VkXG4iLCAwKTsKKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsCisgICAgICAgICAgICAgICAgIlx0cHNhX3JlYWQgd2l0aCBpbnZlY19pZHggPiBQU0FfTUFYX0lPVkVDIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2NlZWRcbiIsIDApOwogCiAgICAgICAgICAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KLSAgICAgICAgICAgIGlmICh2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgICAgICAgICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgICAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwotICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC00KTsKKyAgICAgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTQpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpOwotICAgIHN0YXR1cyA9ICgodmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSkKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpOworICAgIHN0YXR1cyA9ICgodmFsLT5wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZykpCiAgICAgICAgICAgICAgICA/IFZBTF9TVEFUVVNfRVJST1IgOiBzdGF0dXMpOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAgICAgcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM0L3Rlc3RfaTAzNC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzQvdGVzdF9pMDM0LmMKaW5kZXggZDU3MDU3Yi4uNzQyYzFhYSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzQvdGVzdF9pMDM0LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzQvdGVzdF9pMDM0LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMzQuaCIKQEAgLTM1LDcgKzM1LDcgQEAKIHsKICAgIHBzYV9oYW5kbGVfdCAgICAgICBoYW5kbGUgPSAwOwogCi0gICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sxXSBUZXN0IHBzYV9za2lwIGF0IFBTQV9JUENfQ09OTkVDVFxuIiwgMCk7CisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMV0gVGVzdCBwc2Ffc2tpcCBhdCBQU0FfSVBDX0NPTk5FQ1RcbiIsIDApOwogCiAgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1JFTEFYX01JTk9SX1ZFUlNJT05fU0lELCAxKTsKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzQvdGVzdF9zdXBwX2kwMzQuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM0L3Rlc3Rfc3VwcF9pMDM0LmMKaW5kZXggNmY5OGMxMi4uMjU4MGQ5OSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzQvdGVzdF9zdXBwX2kwMzQuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzNC90ZXN0X3N1cHBfaTAzNC5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSw4ICsxNSwxMyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KIAotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKworI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfc2VydmVyX3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfc2VydmVyX3NwKQorZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOwogCiBpbnQzMl90IHNlcnZlcl90ZXN0X3BzYV9za2lwX2F0X2lwY19jb25uZWN0KHZvaWQpOwogCkBAIC0zMSw0NiArMzYsNTYgQEAKICAgICBpbnQzMl90ICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwogICAgIHBzYV9tc2dfdCAgICAgICBtc2cgPSB7MH07CiAKLSAgIC8qIFRlc3QgaXMgdGFyZ2V0aW5nIGZhdGFsIGVycm9yIGNvbmRpdGlvbiBhbmQgaXQgd2lsbCBleHBlY3QgYW4gZXJyb3IgcmVjb3ZlcnkocmVib290KQotICAgICogdG8gaGFwcGVuLiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIHdhcyBpbnRlbmRlZCBhcyBwZXIgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKKyAgIC8qCisgICAgKiBUaGlzIHRlc3QgY2hlY2tzIGZvciB0aGUgUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24gZm9yIHRoZSBQU0EgQVBJLiBBUEkncyByZXNwb25kIHRvCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvdWxkIGJlIGVpdGhlciB0byByZXR1cm4gYXBwcm9wcmlhdGUgc3RhdHVzIGNvZGUgb3IgcGFuaWMgdGhlIGNhbGxlci4KKyAgICAqIFdoZW4gYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljcywgdGhlIFNQRSBjYW5ub3QgY29udGludWUgbm9ybWFsIGV4ZWN1dGlvbiwgYXMgZGVmaW5lZAorICAgICogaW4gdGhpcyBzcGVjaWZpY2F0aW9uLiBUaGUgYmVoYXZpb3Igb2YgdGhlIFNQTSBmb2xsb3dpbmcgYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljIGlzCisgICAgKiBJTVBMRU1FTlRBVElPTiBERUZJTkVELSBBcm0gcmVjb21tZW5kcyB0aGF0IHRoZSBTUE0gY2F1c2VzIHRoZSBzeXN0ZW0gdG8gcmVzdGFydCBpbgorICAgICogdGhpcyBzaXR1YXRpb24uIFJlZmVyIFBTQS1GRiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYW5pYy4KKyAgICAqIEZvciB0aGUgY2FzZXMgd2hlcmUsIFNQTSBjYW5ub3QgY2FwYWJsZSB0byByZWJvb3QgdGhlIHN5c3RlbSAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSwKKyAgICAqIGEgd2F0Y2hkb2cgdGltZXIgc2V0IGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuIFRoaXMgd2lsbAorICAgICogdGVzdHMgY29udGludWl0eSBhbmQgYWJsZSB0byBqdW1wIHRvIG5leHQgdGVzdHMuIFRoZXJlZm9yZSwgZWFjaCB0ZXN0IHdobyBjaGVja3MgZm9yCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiwgZXhwZWN0cyBzeXN0ZW0gdG8gZ2V0IHJlc2V0IGVpdGhlciBieSBTUE0gb3Igd2F0Y2hkb2cgc2V0IGJ5CisgICAgKiB0aGUgdGVzdCBoYXJuZXNzIGZ1bmN0aW9uLgorICAgICoKKyAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZworICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgorICAgICoKKyAgICAqIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgYXMgaW50ZW5kZWQgYnkgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKICAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAogICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKICAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KLSAgICAqCi0gICAgKiBOb3RlOiBJZiBTUE0gaXMgbm90IGNhcGFibGUgb2YgcmVib290aW5nIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbiwKLSAgICAqIGEgd2F0Y2hkb2cgdGltZXIgZW5hYmxlZCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LgotICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCi0gICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCiAgICAgKi8KIAotICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfUkVMQVhfTUlOT1JfVkVSU0lPTl9TSUcsICZtc2cpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfUkVMQVhfTUlOT1JfVkVSU0lPTl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAogICAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLwotICAgIHN0YXR1cyA9IHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOwotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCi0gICAgLyogVGVzdCBjaGVjay0gcHNhX3NraXAgYXQgUFNBX0lQQ19DT05ORUNUICovCi0gICAgcHNhX3NraXAobXNnLmhhbmRsZSwgMCwgMCk7CisgICAgLyogVGVzdCBjaGVjay0gcHNhX3NraXAgYXQgUFNBX0lQQ19DT05ORUNULCBjYWxsIHNob3VsZCBwYW5pYyAqLworICAgIHBzYS0+c2tpcChtc2cuaGFuZGxlLCAwLCAwKTsKIAogICAgIC8qIFNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZSAqLwotICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwiXHRwc2Ffc2tpcCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsIlx0cHNhX3NraXAgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2VlZFxuIiwgMCk7CiAKICAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KLSAgICBpZiAodmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCiAgICAgewotICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOwogICAgIH0KIAotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSUQ7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzNS90ZXN0X2kwMzUuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM1L3Rlc3RfaTAzNS5jCmluZGV4IDQwMWQyOTIuLmNhODlhYmUgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM1L3Rlc3RfaTAzNS5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM1L3Rlc3RfaTAzNS5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDM1LmgiCkBAIC0zNSw3ICszNSw3IEBACiB7CiAgICBwc2FfaGFuZGxlX3QgICAgICAgaGFuZGxlID0gMDsKIAotICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrMV0gVGVzdCBwc2Ffc2tpcCBhdCBQU0FfSVBDX0RJU0NPTk5FQ1RcbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDFdIFRlc3QgcHNhX3NraXAgYXQgUFNBX0lQQ19ESVNDT05ORUNUXG4iLCAwKTsKIAogICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9SRUxBWF9NSU5PUl9WRVJTSU9OX1NJRCwgMSk7CiAgICBpZiAoaGFuZGxlID4gMCkKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM1L3Rlc3Rfc3VwcF9pMDM1LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzNS90ZXN0X3N1cHBfaTAzNS5jCmluZGV4IDFiZWM4MmIuLmEzNTUxNDggMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM1L3Rlc3Rfc3VwcF9pMDM1LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzUvdGVzdF9zdXBwX2kwMzUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsOCArMTUsMTMgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKIAogaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2Ffc2tpcF9hdF9pcGNfZGlzY29ubmVjdCgpOwogCkBAIC0zMSw1MiArMzYsNjIgQEAKICAgICBpbnQzMl90ICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwogICAgIHBzYV9tc2dfdCAgICAgICBtc2cgPSB7MH07CiAKLSAgIC8qIFRlc3QgaXMgdGFyZ2V0aW5nIGZhdGFsIGVycm9yIGNvbmRpdGlvbiBhbmQgaXQgd2lsbCBleHBlY3QgYW4gZXJyb3IgcmVjb3ZlcnkocmVib290KQotICAgICogdG8gaGFwcGVuLiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIHdhcyBpbnRlbmRlZCBhcyBwZXIgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKKyAgIC8qCisgICAgKiBUaGlzIHRlc3QgY2hlY2tzIGZvciB0aGUgUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24gZm9yIHRoZSBQU0EgQVBJLiBBUEkncyByZXNwb25kIHRvCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvdWxkIGJlIGVpdGhlciB0byByZXR1cm4gYXBwcm9wcmlhdGUgc3RhdHVzIGNvZGUgb3IgcGFuaWMgdGhlIGNhbGxlci4KKyAgICAqIFdoZW4gYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljcywgdGhlIFNQRSBjYW5ub3QgY29udGludWUgbm9ybWFsIGV4ZWN1dGlvbiwgYXMgZGVmaW5lZAorICAgICogaW4gdGhpcyBzcGVjaWZpY2F0aW9uLiBUaGUgYmVoYXZpb3Igb2YgdGhlIFNQTSBmb2xsb3dpbmcgYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljIGlzCisgICAgKiBJTVBMRU1FTlRBVElPTiBERUZJTkVELSBBcm0gcmVjb21tZW5kcyB0aGF0IHRoZSBTUE0gY2F1c2VzIHRoZSBzeXN0ZW0gdG8gcmVzdGFydCBpbgorICAgICogdGhpcyBzaXR1YXRpb24uIFJlZmVyIFBTQS1GRiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYW5pYy4KKyAgICAqIEZvciB0aGUgY2FzZXMgd2hlcmUsIFNQTSBjYW5ub3QgY2FwYWJsZSB0byByZWJvb3QgdGhlIHN5c3RlbSAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSwKKyAgICAqIGEgd2F0Y2hkb2cgdGltZXIgc2V0IGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuIFRoaXMgd2lsbAorICAgICogdGVzdHMgY29udGludWl0eSBhbmQgYWJsZSB0byBqdW1wIHRvIG5leHQgdGVzdHMuIFRoZXJlZm9yZSwgZWFjaCB0ZXN0IHdobyBjaGVja3MgZm9yCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiwgZXhwZWN0cyBzeXN0ZW0gdG8gZ2V0IHJlc2V0IGVpdGhlciBieSBTUE0gb3Igd2F0Y2hkb2cgc2V0IGJ5CisgICAgKiB0aGUgdGVzdCBoYXJuZXNzIGZ1bmN0aW9uLgorICAgICoKKyAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZworICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgorICAgICoKKyAgICAqIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgYXMgaW50ZW5kZWQgYnkgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKICAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAogICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKICAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KLSAgICAqCi0gICAgKiBOb3RlOiBJZiBTUE0gaXMgbm90IGNhcGFibGUgb2YgcmVib290aW5nIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbiwKLSAgICAqIGEgd2F0Y2hkb2cgdGltZXIgZW5hYmxlZCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LgotICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCi0gICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCiAgICAgKi8KIAotICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfUkVMQVhfTUlOT1JfVkVSU0lPTl9TSUcsICZtc2cpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfUkVMQVhfTUlOT1JfVkVSU0lPTl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9SRUxBWF9NSU5PUl9WRVJTSU9OX1NJRywgJm1zZyk7Ci0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9SRUxBWF9NSU5PUl9WRVJTSU9OX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCiAgICAgewotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKLSAgICBzdGF0dXMgPSB2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDMpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKICAgICB7Ci0gICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCi0gICAgLyogVGVzdCBjaGVjay0gcHNhX3NraXAgYXQgUFNBX0lQQ19ESVNDT05ORUNUICovCi0gICAgcHNhX3NraXAobXNnLmhhbmRsZSwgMCwgMCk7CisgICAgLyogVGVzdCBjaGVjay0gcHNhX3NraXAgYXQgUFNBX0lQQ19ESVNDT05ORUNULCBjYWxsIHNob3VsZCBwYW5pYyAqLworICAgIHBzYS0+c2tpcChtc2cuaGFuZGxlLCAwLCAwKTsKIAogICAgIC8qIFNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZSAqLwotICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwiXHRwc2Ffc2tpcCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsIlx0cHNhX3NraXAgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2VlZFxuIiwgMCk7CiAKICAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KLSAgICBpZiAodmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCiAgICAgewotICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOwogICAgIH0KLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSUQ7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzNi90ZXN0X2kwMzYuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM2L3Rlc3RfaTAzNi5jCmluZGV4IDBkYWY2MzUuLjc1ZWVhMjIgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM2L3Rlc3RfaTAzNi5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM2L3Rlc3RfaTAzNi5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDM2LmgiCkBAIC0zOCw3ICszOCw3IEBACiAgICBwc2Ffc3RhdHVzX3QgICAgICAgc3RhdHVzX29mX2NhbGw7CiAKICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwKLSAgICAgICAgICAgICJbQ2hlY2sxXSBUZXN0IHBzYV9za2lwIHdpdGggTlVMTCBoYW5kbGVcbiIsIDApOworICAgICAgICAgICAgIltDaGVjayAxXSBUZXN0IHBzYV9za2lwIHdpdGggTlVMTCBoYW5kbGVcbiIsIDApOwogCiAgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpOwogICAgaWYgKGhhbmRsZSA8IDApCkBAIC01MCw3ICs1MCw3IEBACiAgICBzdGF0dXNfb2ZfY2FsbCA9ICBwc2EtPmNhbGwoaGFuZGxlLCBOVUxMLCAwLCBOVUxMLCAwKTsKIAogICAgLyogRXhwZWN0YXRpb24gaXMgc2VydmVyIHRlc3Qgc2hvdWxkIGhhbmcgYW5kIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCi0gICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDYWxsIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2Nlc3NlZFxuIiwgMCk7CisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDYWxsIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2NlZWRcbiIsIDApOwogCiAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM2L3Rlc3Rfc3VwcF9pMDM2LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzNi90ZXN0X3N1cHBfaTAzNi5jCmluZGV4IGU3MDM5OTUuLmI2MWJiZmUgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM2L3Rlc3Rfc3VwcF9pMDM2LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzYvdGVzdF9zdXBwX2kwMzYuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsOCArMTUsMTMgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKIAogaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2Ffc2tpcF93aXRoX251bGxfaGFuZGxlKHZvaWQpOwogCkBAIC0zMSw2NCArMzYsNzQgQEAKICAgICBpbnQzMl90ICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwogICAgIHBzYV9tc2dfdCAgICAgICBtc2cgPSB7MH07CiAKLSAgIC8qIFRlc3QgaXMgdGFyZ2V0aW5nIGZhdGFsIGVycm9yIGNvbmRpdGlvbiBhbmQgaXQgd2lsbCBleHBlY3QgYW4gZXJyb3IgcmVjb3ZlcnkocmVib290KQotICAgICogdG8gaGFwcGVuLiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIHdhcyBpbnRlbmRlZCBhcyBwZXIgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKKyAgIC8qCisgICAgKiBUaGlzIHRlc3QgY2hlY2tzIGZvciB0aGUgUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24gZm9yIHRoZSBQU0EgQVBJLiBBUEkncyByZXNwb25kIHRvCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvdWxkIGJlIGVpdGhlciB0byByZXR1cm4gYXBwcm9wcmlhdGUgc3RhdHVzIGNvZGUgb3IgcGFuaWMgdGhlIGNhbGxlci4KKyAgICAqIFdoZW4gYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljcywgdGhlIFNQRSBjYW5ub3QgY29udGludWUgbm9ybWFsIGV4ZWN1dGlvbiwgYXMgZGVmaW5lZAorICAgICogaW4gdGhpcyBzcGVjaWZpY2F0aW9uLiBUaGUgYmVoYXZpb3Igb2YgdGhlIFNQTSBmb2xsb3dpbmcgYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljIGlzCisgICAgKiBJTVBMRU1FTlRBVElPTiBERUZJTkVELSBBcm0gcmVjb21tZW5kcyB0aGF0IHRoZSBTUE0gY2F1c2VzIHRoZSBzeXN0ZW0gdG8gcmVzdGFydCBpbgorICAgICogdGhpcyBzaXR1YXRpb24uIFJlZmVyIFBTQS1GRiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYW5pYy4KKyAgICAqIEZvciB0aGUgY2FzZXMgd2hlcmUsIFNQTSBjYW5ub3QgY2FwYWJsZSB0byByZWJvb3QgdGhlIHN5c3RlbSAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSwKKyAgICAqIGEgd2F0Y2hkb2cgdGltZXIgc2V0IGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuIFRoaXMgd2lsbAorICAgICogdGVzdHMgY29udGludWl0eSBhbmQgYWJsZSB0byBqdW1wIHRvIG5leHQgdGVzdHMuIFRoZXJlZm9yZSwgZWFjaCB0ZXN0IHdobyBjaGVja3MgZm9yCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiwgZXhwZWN0cyBzeXN0ZW0gdG8gZ2V0IHJlc2V0IGVpdGhlciBieSBTUE0gb3Igd2F0Y2hkb2cgc2V0IGJ5CisgICAgKiB0aGUgdGVzdCBoYXJuZXNzIGZ1bmN0aW9uLgorICAgICoKKyAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZworICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgorICAgICoKKyAgICAqIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgYXMgaW50ZW5kZWQgYnkgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKICAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAogICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKICAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KLSAgICAqCi0gICAgKiBOb3RlOiBJZiBTUE0gaXMgbm90IGNhcGFibGUgb2YgcmVib290aW5nIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbiwKLSAgICAqIGEgd2F0Y2hkb2cgdGltZXIgZW5hYmxlZCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LgotICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCi0gICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCiAgICAgKi8KIAotICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7Ci0gICAgaWYodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAKLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIGlmKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKICAgICB7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCAtMik7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTIpOwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KLSAgICAgICAgc3RhdHVzID0gdmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUyk7Ci0gICAgICAgIGlmKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKKyAgICAgICAgc3RhdHVzID0gdmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpOworICAgICAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKICAgICAgICAgewotICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOwotICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC0zKTsKKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIC0zKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFRlc3QgY2hlY2stIHBzYV9za2lwIHdpdGggUFNBX05VTExfSEFORExFICovCi0gICAgICAgICAgICBwc2Ffc2tpcChQU0FfTlVMTF9IQU5ETEUsIDAsIDApOworICAgICAgICAgICAgLyogVGVzdCBjaGVjay0gcHNhX3NraXAgd2l0aCBQU0FfTlVMTF9IQU5ETEUsIGNhbGwgc2hvdWxkIHBhbmljICovCisgICAgICAgICAgICBwc2EtPnNraXAoUFNBX05VTExfSEFORExFLCAwLCAwKTsKIAogICAgICAgICAgICAgLyogc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCi0gICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsCi0gICAgICAgICAgICAgICAgIlx0cHNhX3NraXAgd2l0aCBOVUxMIGhhbmRsZSBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwKKyAgICAgICAgICAgICAgICAiXHRwc2Ffc2tpcCB3aXRoIE5VTEwgaGFuZGxlIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2NlZWRcbiIsIDApOwogCiAgICAgICAgICAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KLSAgICAgICAgICAgIGlmICh2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgICAgICAgICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgICAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwotICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC00KTsKKyAgICAgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTQpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpOwotICAgIHN0YXR1cyA9ICgodmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSkKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpOworICAgIHN0YXR1cyA9ICgodmFsLT5wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZykpCiAgICAgICAgICAgICAgICA/IFZBTF9TVEFUVVNfRVJST1IgOiBzdGF0dXMpOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAgICAgcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM3L3Rlc3RfaTAzNy5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzcvdGVzdF9pMDM3LmMKaW5kZXggOGEwZDgyMS4uYzY3NjVhMiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzcvdGVzdF9pMDM3LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzcvdGVzdF9pMDM3LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMzcuaCIKQEAgLTM4LDcgKzM4LDcgQEAKICAgIHBzYV9zdGF0dXNfdCAgICAgICBzdGF0dXNfb2ZfY2FsbDsKIAogICAgdmFsLT5wcmludChQUklOVF9URVNULAotICAgICAgICAgICAgIltDaGVjazFdIFRlc3QgcHNhX3NraXAgd2l0aCBpbnZhbGlkIGhhbmRsZVxuIiwgMCk7CisgICAgICAgICAgICAiW0NoZWNrIDFdIFRlc3QgcHNhX3NraXAgd2l0aCBpbnZhbGlkIGhhbmRsZVxuIiwgMCk7CiAKICAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSk7CiAgICBpZiAoaGFuZGxlIDwgMCkKQEAgLTUwLDcgKzUwLDcgQEAKICAgIHN0YXR1c19vZl9jYWxsID0gIHBzYS0+Y2FsbChoYW5kbGUsIE5VTEwsIDAsIE5VTEwsIDApOwogCiAgICAvKiBFeHBlY3RhdGlvbiBpcyBzZXJ2ZXIgdGVzdCBzaG91bGQgaGFuZyBhbmQgY29udHJvbCBzaG91bGRuJ3QgaGF2ZSBjb21lIGhlcmUgKi8KLSAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENhbGwgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2Vzc2VkXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENhbGwgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2VlZFxuIiwgMCk7CiAKICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzcvdGVzdF9zdXBwX2kwMzcuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM3L3Rlc3Rfc3VwcF9pMDM3LmMKaW5kZXggODcwYmU5Mi4uOWVkOTk2MyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzcvdGVzdF9zdXBwX2kwMzcuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzNy90ZXN0X3N1cHBfaTAzNy5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSw4ICsxNSwxMyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KIAotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKworI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfc2VydmVyX3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfc2VydmVyX3NwKQorZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOwogCiBpbnQzMl90IHNlcnZlcl90ZXN0X3BzYV9za2lwX3dpdGhfaW52YWxpZF9oYW5kbGUodm9pZCk7CiAKQEAgLTMxLDUyICszNiw3NCBAQAogICAgIGludDMyX3QgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CiAgICAgcHNhX21zZ190ICAgICAgIG1zZyA9IHswfTsKIAotICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7Ci0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKSkKKyAgIC8qCisgICAgKiBUaGlzIHRlc3QgY2hlY2tzIGZvciB0aGUgUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24gZm9yIHRoZSBQU0EgQVBJLiBBUEkncyByZXNwb25kIHRvCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvdWxkIGJlIGVpdGhlciB0byByZXR1cm4gYXBwcm9wcmlhdGUgc3RhdHVzIGNvZGUgb3IgcGFuaWMgdGhlIGNhbGxlci4KKyAgICAqIFdoZW4gYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljcywgdGhlIFNQRSBjYW5ub3QgY29udGludWUgbm9ybWFsIGV4ZWN1dGlvbiwgYXMgZGVmaW5lZAorICAgICogaW4gdGhpcyBzcGVjaWZpY2F0aW9uLiBUaGUgYmVoYXZpb3Igb2YgdGhlIFNQTSBmb2xsb3dpbmcgYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljIGlzCisgICAgKiBJTVBMRU1FTlRBVElPTiBERUZJTkVELSBBcm0gcmVjb21tZW5kcyB0aGF0IHRoZSBTUE0gY2F1c2VzIHRoZSBzeXN0ZW0gdG8gcmVzdGFydCBpbgorICAgICogdGhpcyBzaXR1YXRpb24uIFJlZmVyIFBTQS1GRiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYW5pYy4KKyAgICAqIEZvciB0aGUgY2FzZXMgd2hlcmUsIFNQTSBjYW5ub3QgY2FwYWJsZSB0byByZWJvb3QgdGhlIHN5c3RlbSAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSwKKyAgICAqIGEgd2F0Y2hkb2cgdGltZXIgc2V0IGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuIFRoaXMgd2lsbAorICAgICogdGVzdHMgY29udGludWl0eSBhbmQgYWJsZSB0byBqdW1wIHRvIG5leHQgdGVzdHMuIFRoZXJlZm9yZSwgZWFjaCB0ZXN0IHdobyBjaGVja3MgZm9yCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiwgZXhwZWN0cyBzeXN0ZW0gdG8gZ2V0IHJlc2V0IGVpdGhlciBieSBTUE0gb3Igd2F0Y2hkb2cgc2V0IGJ5CisgICAgKiB0aGUgdGVzdCBoYXJuZXNzIGZ1bmN0aW9uLgorICAgICoKKyAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZworICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgorICAgICoKKyAgICAqIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgYXMgaW50ZW5kZWQgYnkgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKKyAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAorICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKKyAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KKyAgICAqLworCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCiAgICAgewotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCi0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKIAotICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2NhbGxfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7Ci0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKICAgICB7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCAtMik7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTIpOwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KLSAgICAgICAgc3RhdHVzID0gdmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUyk7Ci0gICAgICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMyksIHN0YXR1cykpCisgICAgICAgIHN0YXR1cyA9IHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKTsKKyAgICAgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMyksIHN0YXR1cykpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKLSAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCAtMyk7CisgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOworICAgICAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCAtMyk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICAvKiBUZXN0IGNoZWNrLSBwc2Ffc2tpcCB3aXRoIElOVkFMSURfSEFORExFICovCi0gICAgICAgICAgICBwc2Ffc2tpcChJTlZBTElEX0hBTkRMRSwgMCwgMCk7CisgICAgICAgICAgICAvKiBUZXN0IGNoZWNrLSBwc2Ffc2tpcCB3aXRoIElOVkFMSURfSEFORExFLCBjYWxsIHNob3VsZCBwYW5pYyAqLworICAgICAgICAgICAgcHNhLT5za2lwKElOVkFMSURfSEFORExFLCAwLCAwKTsKIAogICAgICAgICAgICAgLyogc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCi0gICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsCi0gICAgICAgICAgICAgICAgIlx0cHNhX3NraXAgd2l0aCBpbnZhbGlkIGhhbmRsZSBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwKKyAgICAgICAgICAgICAgICAiXHRwc2Ffc2tpcCB3aXRoIGludmFsaWQgaGFuZGxlIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2NlZWRcbiIsIDApOwogCiAgICAgICAgICAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KLSAgICAgICAgICAgIGlmICh2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgICAgICAgICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgICAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwotICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC00KTsKKyAgICAgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTQpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpOwotICAgIHN0YXR1cyA9ICgodmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSkKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpOworICAgIHN0YXR1cyA9ICgodmFsLT5wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZykpCiAgICAgICAgICAgICAgICA/IFZBTF9TVEFUVVNfRVJST1IgOiBzdGF0dXMpOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAgICAgcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM4L3Rlc3RfaTAzOC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzgvdGVzdF9pMDM4LmMKaW5kZXggOThkZDRhMC4uYTJjZjJiOCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzgvdGVzdF9pMDM4LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzgvdGVzdF9pMDM4LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwMzguaCIKQEAgLTM4LDcgKzM4LDcgQEAKICAgIHBzYV9zdGF0dXNfdCAgICAgICBzdGF0dXNfb2ZfY2FsbDsKIAogICAgdmFsLT5wcmludChQUklOVF9URVNULAotICAgICAgICAgICAgIltDaGVjazFdIFRlc3QgcHNhX3NraXAgd2l0aCBpbnZlY19pZHg9UFNBX01BWF9JT1ZFQ1xuIiwgMCk7CisgICAgICAgICAgICAiW0NoZWNrIDFdIFRlc3QgcHNhX3NraXAgd2l0aCBpbnZlY19pZHg9UFNBX01BWF9JT1ZFQ1xuIiwgMCk7CiAKICAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSk7CiAgICBpZiAoaGFuZGxlIDwgMCkKQEAgLTUwLDcgKzUwLDcgQEAKICAgIHN0YXR1c19vZl9jYWxsID0gIHBzYS0+Y2FsbChoYW5kbGUsIE5VTEwsIDAsIE5VTEwsIDApOwogCiAgICAvKiBFeHBlY3RhdGlvbiBpcyBzZXJ2ZXIgdGVzdCBzaG91bGQgaGFuZyBhbmQgY29udHJvbCBzaG91bGRuJ3QgaGF2ZSBjb21lIGhlcmUgKi8KLSAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENhbGwgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2Vzc2VkXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENhbGwgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2VlZFxuIiwgMCk7CiAKICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzgvdGVzdF9zdXBwX2kwMzguYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM4L3Rlc3Rfc3VwcF9pMDM4LmMKaW5kZXggNTM2YWYzYS4uNTQwNDQwZCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzgvdGVzdF9zdXBwX2kwMzguYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzOC90ZXN0X3N1cHBfaTAzOC5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSw4ICsxNSwxMyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KIAotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKworI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfc2VydmVyX3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfc2VydmVyX3NwKQorZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOwogCiBpbnQzMl90IHNlcnZlcl90ZXN0X3BzYV9za2lwX3dpdGhfaW52ZWNfZXF1YWxfdG9fbWF4X2lvdmVjKHZvaWQpOwogCkBAIC0zMSw2NiArMzYsNzYgQEAKICAgICBpbnQzMl90ICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwogICAgIHBzYV9tc2dfdCAgICAgICBtc2cgPSB7MH07CiAKLSAgIC8qIFRlc3QgaXMgdGFyZ2V0aW5nIGZhdGFsIGVycm9yIGNvbmRpdGlvbiBhbmQgaXQgd2lsbCBleHBlY3QgYW4gZXJyb3IgcmVjb3ZlcnkocmVib290KQotICAgICogdG8gaGFwcGVuLiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIHdhcyBpbnRlbmRlZCBhcyBwZXIgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKKyAgIC8qCisgICAgKiBUaGlzIHRlc3QgY2hlY2tzIGZvciB0aGUgUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24gZm9yIHRoZSBQU0EgQVBJLiBBUEkncyByZXNwb25kIHRvCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvdWxkIGJlIGVpdGhlciB0byByZXR1cm4gYXBwcm9wcmlhdGUgc3RhdHVzIGNvZGUgb3IgcGFuaWMgdGhlIGNhbGxlci4KKyAgICAqIFdoZW4gYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljcywgdGhlIFNQRSBjYW5ub3QgY29udGludWUgbm9ybWFsIGV4ZWN1dGlvbiwgYXMgZGVmaW5lZAorICAgICogaW4gdGhpcyBzcGVjaWZpY2F0aW9uLiBUaGUgYmVoYXZpb3Igb2YgdGhlIFNQTSBmb2xsb3dpbmcgYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljIGlzCisgICAgKiBJTVBMRU1FTlRBVElPTiBERUZJTkVELSBBcm0gcmVjb21tZW5kcyB0aGF0IHRoZSBTUE0gY2F1c2VzIHRoZSBzeXN0ZW0gdG8gcmVzdGFydCBpbgorICAgICogdGhpcyBzaXR1YXRpb24uIFJlZmVyIFBTQS1GRiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYW5pYy4KKyAgICAqIEZvciB0aGUgY2FzZXMgd2hlcmUsIFNQTSBjYW5ub3QgY2FwYWJsZSB0byByZWJvb3QgdGhlIHN5c3RlbSAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSwKKyAgICAqIGEgd2F0Y2hkb2cgdGltZXIgc2V0IGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuIFRoaXMgd2lsbAorICAgICogdGVzdHMgY29udGludWl0eSBhbmQgYWJsZSB0byBqdW1wIHRvIG5leHQgdGVzdHMuIFRoZXJlZm9yZSwgZWFjaCB0ZXN0IHdobyBjaGVja3MgZm9yCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiwgZXhwZWN0cyBzeXN0ZW0gdG8gZ2V0IHJlc2V0IGVpdGhlciBieSBTUE0gb3Igd2F0Y2hkb2cgc2V0IGJ5CisgICAgKiB0aGUgdGVzdCBoYXJuZXNzIGZ1bmN0aW9uLgorICAgICoKKyAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZworICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgorICAgICoKKyAgICAqIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgYXMgaW50ZW5kZWQgYnkgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKICAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAogICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKICAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KLSAgICAqCi0gICAgKiBOb3RlOiBJZiBTUE0gaXMgbm90IGNhcGFibGUgb2YgcmVib290aW5nIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbiwKLSAgICAqIGEgd2F0Y2hkb2cgdGltZXIgZW5hYmxlZCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LgotICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCi0gICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCiAgICAgKi8KIAotICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7Ci0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKSkKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKSkKICAgICB7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC0yKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCAtMik7CiAgICAgfQogICAgIGVsc2UKICAgICB7CiAgICAgICAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLwotICAgICAgICBzdGF0dXMgPSB2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKTsKLSAgICAgICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKKyAgICAgICAgc3RhdHVzID0gdmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpOworICAgICAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKICAgICAgICAgewotICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOwotICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC0zKTsKKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIC0zKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFRlc3QgY2hlY2stIHBzYV9za2lwIHdpdGggaW52ZWNfaWR4PVBTQV9NQVhfSU9WRUMgKi8KLSAgICAgICAgICAgIHBzYV9za2lwKG1zZy5oYW5kbGUsIFBTQV9NQVhfSU9WRUMsIDApOworICAgICAgICAgICAgLyogVGVzdCBjaGVjay0gcHNhX3NraXAgd2l0aCBpbnZlY19pZHg9UFNBX01BWF9JT1ZFQywgY2FsbCBzaG91bGQgcGFuaWMgKi8KKyAgICAgICAgICAgIHBzYS0+c2tpcChtc2cuaGFuZGxlLCBQU0FfTUFYX0lPVkVDLCAwKTsKIAogICAgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwogCiAgICAgICAgICAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KLSAgICAgICAgICAgIGlmICh2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgICAgICAgICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgICAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLyogc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCi0gICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsCi0gICAgICAgICAgICAgICAgIlx0cHNhX3NraXAgd2l0aCBpbnZlY19pZHg9UFNBX01BWF9JT1ZFQyBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwKKyAgICAgICAgICAgICAgICAiXHRwc2Ffc2tpcCB3aXRoIGludmVjX2lkeD1QU0FfTUFYX0lPVkVDIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2NlZWRcbiIsIDApOwogCi0gICAgICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgLTQpOworICAgICAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCAtNCk7CiAKICAgICAgICAgfQogICAgIH0KIAotICAgIHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjA0KSwgc3RhdHVzKTsKLSAgICBzdGF0dXMgPSAoKHZhbF9wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZykpCisgICAgdmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjA0KSwgc3RhdHVzKTsKKyAgICBzdGF0dXMgPSAoKHZhbC0+cHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpKQogICAgICAgICAgICAgICAgPyBWQUxfU1RBVFVTX0VSUk9SIDogc3RhdHVzKTsKLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogICAgIHJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzOS90ZXN0X2kwMzkuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM5L3Rlc3RfaTAzOS5jCmluZGV4IDJkYjM5YWUuLmIwMjhmMzYgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM5L3Rlc3RfaTAzOS5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM5L3Rlc3RfaTAzOS5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDM5LmgiCkBAIC0zOCw3ICszOCw3IEBACiAgICBwc2Ffc3RhdHVzX3QgICAgICAgc3RhdHVzX29mX2NhbGw7CiAKICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwKLSAgICAgICAgICAgICJbQ2hlY2sxXSBUZXN0IHBzYV9za2lwIHdpdGggaW52ZWNfaWR4ID4gUFNBX01BWF9JT1ZFQ1xuIiwgMCk7CisgICAgICAgICAgICAiW0NoZWNrIDFdIFRlc3QgcHNhX3NraXAgd2l0aCBpbnZlY19pZHggPiBQU0FfTUFYX0lPVkVDXG4iLCAwKTsKIAogICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxKTsKICAgIGlmIChoYW5kbGUgPCAwKQpAQCAtNTAsNyArNTAsNyBAQAogICAgc3RhdHVzX29mX2NhbGwgPSAgcHNhLT5jYWxsKGhhbmRsZSwgTlVMTCwgMCwgTlVMTCwgMCk7CiAKICAgIC8qIEV4cGVjdGF0aW9uIGlzIHNlcnZlciB0ZXN0IHNob3VsZCBoYW5nIGFuZCBjb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLwotICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZWVkXG4iLCAwKTsKIAogICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzOS90ZXN0X3N1cHBfaTAzOS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwMzkvdGVzdF9zdXBwX2kwMzkuYwppbmRleCA1OGVlNDFlLi45YjRiM2M2IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTAzOS90ZXN0X3N1cHBfaTAzOS5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDM5L3Rlc3Rfc3VwcF9pMDM5LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDggKzE1LDEzIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CiAKIGludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX3NraXBfd2l0aF9pbnZlY19ncmVhdGVyX3RoYW5fbWF4X2lvdmVjKHZvaWQpOwogCkBAIC0zMSw2NiArMzYsNzYgQEAKICAgICBpbnQzMl90ICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwogICAgIHBzYV9tc2dfdCAgICAgICBtc2cgPSB7MH07CiAKLSAgIC8qIFRlc3QgaXMgdGFyZ2V0aW5nIGZhdGFsIGVycm9yIGNvbmRpdGlvbiBhbmQgaXQgd2lsbCBleHBlY3QgYW4gZXJyb3IgcmVjb3ZlcnkocmVib290KQotICAgICogdG8gaGFwcGVuLiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIHdhcyBpbnRlbmRlZCBhcyBwZXIgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKKyAgIC8qCisgICAgKiBUaGlzIHRlc3QgY2hlY2tzIGZvciB0aGUgUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24gZm9yIHRoZSBQU0EgQVBJLiBBUEkncyByZXNwb25kIHRvCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvdWxkIGJlIGVpdGhlciB0byByZXR1cm4gYXBwcm9wcmlhdGUgc3RhdHVzIGNvZGUgb3IgcGFuaWMgdGhlIGNhbGxlci4KKyAgICAqIFdoZW4gYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljcywgdGhlIFNQRSBjYW5ub3QgY29udGludWUgbm9ybWFsIGV4ZWN1dGlvbiwgYXMgZGVmaW5lZAorICAgICogaW4gdGhpcyBzcGVjaWZpY2F0aW9uLiBUaGUgYmVoYXZpb3Igb2YgdGhlIFNQTSBmb2xsb3dpbmcgYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljIGlzCisgICAgKiBJTVBMRU1FTlRBVElPTiBERUZJTkVELSBBcm0gcmVjb21tZW5kcyB0aGF0IHRoZSBTUE0gY2F1c2VzIHRoZSBzeXN0ZW0gdG8gcmVzdGFydCBpbgorICAgICogdGhpcyBzaXR1YXRpb24uIFJlZmVyIFBTQS1GRiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYW5pYy4KKyAgICAqIEZvciB0aGUgY2FzZXMgd2hlcmUsIFNQTSBjYW5ub3QgY2FwYWJsZSB0byByZWJvb3QgdGhlIHN5c3RlbSAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSwKKyAgICAqIGEgd2F0Y2hkb2cgdGltZXIgc2V0IGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuIFRoaXMgd2lsbAorICAgICogdGVzdHMgY29udGludWl0eSBhbmQgYWJsZSB0byBqdW1wIHRvIG5leHQgdGVzdHMuIFRoZXJlZm9yZSwgZWFjaCB0ZXN0IHdobyBjaGVja3MgZm9yCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiwgZXhwZWN0cyBzeXN0ZW0gdG8gZ2V0IHJlc2V0IGVpdGhlciBieSBTUE0gb3Igd2F0Y2hkb2cgc2V0IGJ5CisgICAgKiB0aGUgdGVzdCBoYXJuZXNzIGZ1bmN0aW9uLgorICAgICoKKyAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZworICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgorICAgICoKKyAgICAqIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgYXMgaW50ZW5kZWQgYnkgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKICAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAogICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKICAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KLSAgICAqCi0gICAgKiBOb3RlOiBJZiBTUE0gaXMgbm90IGNhcGFibGUgb2YgcmVib290aW5nIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbiwKLSAgICAqIGEgd2F0Y2hkb2cgdGltZXIgZW5hYmxlZCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LgotICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCi0gICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCiAgICAgKi8KIAotICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7Ci0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKSkKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKSkKICAgICB7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC0yKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCAtMik7CiAgICAgfQogICAgIGVsc2UKICAgICB7CiAgICAgICAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLwotICAgICAgICBzdGF0dXMgPSB2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKTsKLSAgICAgICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKKyAgICAgICAgc3RhdHVzID0gdmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpOworICAgICAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKICAgICAgICAgewotICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOwotICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC0zKTsKKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIC0zKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFRlc3QgY2hlY2stIHBzYV9za2lwIHdpdGggaW52ZWNfaWR4ID4gUFNBX01BWF9JT1ZFQyAqLwotICAgICAgICAgICAgcHNhX3NraXAobXNnLmhhbmRsZSwgUFNBX01BWF9JT1ZFQyArIDEsIDApOworICAgICAgICAgICAgLyogVGVzdCBjaGVjay0gcHNhX3NraXAgd2l0aCBpbnZlY19pZHggPiBQU0FfTUFYX0lPVkVDLCBjYWxsIHNob3VsZCBwYW5pYyAqLworICAgICAgICAgICAgcHNhLT5za2lwKG1zZy5oYW5kbGUsIFBTQV9NQVhfSU9WRUMgKyAxLCAwKTsKIAogICAgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwogCiAgICAgICAgICAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KLSAgICAgICAgICAgIGlmICh2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgICAgICAgICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgICAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLyogc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCi0gICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsCi0gICAgICAgICAgICAgICAgIlx0cHNhX3NraXAgd2l0aCBpbnZlY19pZHggPiBQU0FfTUFYX0lPVkVDIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2Nlc3NlZFxuIiwgMCk7CisgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLAorICAgICAgICAgICAgICAgICJcdHBzYV9za2lwIHdpdGggaW52ZWNfaWR4ID4gUFNBX01BWF9JT1ZFQyBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZWVkXG4iLCAwKTsKIAotICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC00KTsKKyAgICAgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTQpOwogCiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwNCksIHN0YXR1cyk7Ci0gICAgc3RhdHVzID0gKCh2YWxfcHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpKQorICAgIHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwNCksIHN0YXR1cyk7CisgICAgc3RhdHVzID0gKCh2YWwtPnByb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSkKICAgICAgICAgICAgICAgID8gVkFMX1NUQVRVU19FUlJPUiA6IHN0YXR1cyk7Ci0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKICAgICByZXR1cm4gc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDAvdGVzdF9pMDQwLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0MC90ZXN0X2kwNDAuYwppbmRleCBlYzAyMDY3Li5jMDc0NmIxIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0MC90ZXN0X2kwNDAuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0MC90ZXN0X2kwNDAuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTA0MC5oIgpAQCAtMzUsNyArMzUsNyBAQAogewogICAgcHNhX2hhbmRsZV90ICAgICAgIGhhbmRsZSA9IDA7CiAKLSAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazFdIFRlc3QgcHNhX3dyaXRlIGF0IFBTQV9JUENfQ09OTkVDVFxuIiwgMCk7CisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMV0gVGVzdCBwc2Ffd3JpdGUgYXQgUFNBX0lQQ19DT05ORUNUXG4iLCAwKTsKIAogICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9SRUxBWF9NSU5PUl9WRVJTSU9OX1NJRCwgMSk7CiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQwL3Rlc3Rfc3VwcF9pMDQwLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0MC90ZXN0X3N1cHBfaTA0MC5jCmluZGV4IDQ3NDMzYzMuLjhlYTYwOGIgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQwL3Rlc3Rfc3VwcF9pMDQwLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDAvdGVzdF9zdXBwX2kwNDAuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsOCArMTUsMTMgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKIAogI2RlZmluZSBOVU1fT0ZfQllURVMgNAogCkBAIC0zNCw0NiArMzksNTYgQEAKICAgICBwc2FfbXNnX3QgICAgICAgbXNnID0gezB9OwogICAgIHVpbnQ4X3QgICAgICAgICBkYXRhW05VTV9PRl9CWVRFU10gPSB7MH07CiAKLSAgIC8qIFRlc3QgaXMgdGFyZ2V0aW5nIGZhdGFsIGVycm9yIGNvbmRpdGlvbiBhbmQgaXQgd2lsbCBleHBlY3QgYW4gZXJyb3IgcmVjb3ZlcnkocmVib290KQotICAgICogdG8gaGFwcGVuLiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIHdhcyBpbnRlbmRlZCBhcyBwZXIgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKKyAgIC8qCisgICAgKiBUaGlzIHRlc3QgY2hlY2tzIGZvciB0aGUgUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24gZm9yIHRoZSBQU0EgQVBJLiBBUEkncyByZXNwb25kIHRvCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvdWxkIGJlIGVpdGhlciB0byByZXR1cm4gYXBwcm9wcmlhdGUgc3RhdHVzIGNvZGUgb3IgcGFuaWMgdGhlIGNhbGxlci4KKyAgICAqIFdoZW4gYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljcywgdGhlIFNQRSBjYW5ub3QgY29udGludWUgbm9ybWFsIGV4ZWN1dGlvbiwgYXMgZGVmaW5lZAorICAgICogaW4gdGhpcyBzcGVjaWZpY2F0aW9uLiBUaGUgYmVoYXZpb3Igb2YgdGhlIFNQTSBmb2xsb3dpbmcgYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljIGlzCisgICAgKiBJTVBMRU1FTlRBVElPTiBERUZJTkVELSBBcm0gcmVjb21tZW5kcyB0aGF0IHRoZSBTUE0gY2F1c2VzIHRoZSBzeXN0ZW0gdG8gcmVzdGFydCBpbgorICAgICogdGhpcyBzaXR1YXRpb24uIFJlZmVyIFBTQS1GRiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYW5pYy4KKyAgICAqIEZvciB0aGUgY2FzZXMgd2hlcmUsIFNQTSBjYW5ub3QgY2FwYWJsZSB0byByZWJvb3QgdGhlIHN5c3RlbSAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSwKKyAgICAqIGEgd2F0Y2hkb2cgdGltZXIgc2V0IGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuIFRoaXMgd2lsbAorICAgICogdGVzdHMgY29udGludWl0eSBhbmQgYWJsZSB0byBqdW1wIHRvIG5leHQgdGVzdHMuIFRoZXJlZm9yZSwgZWFjaCB0ZXN0IHdobyBjaGVja3MgZm9yCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiwgZXhwZWN0cyBzeXN0ZW0gdG8gZ2V0IHJlc2V0IGVpdGhlciBieSBTUE0gb3Igd2F0Y2hkb2cgc2V0IGJ5CisgICAgKiB0aGUgdGVzdCBoYXJuZXNzIGZ1bmN0aW9uLgorICAgICoKKyAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZworICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgorICAgICoKKyAgICAqIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgYXMgaW50ZW5kZWQgYnkgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKICAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAogICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKICAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KLSAgICAqCi0gICAgKiBOb3RlOiBJZiBTUE0gaXMgbm90IGNhcGFibGUgb2YgcmVib290aW5nIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbiwKLSAgICAqIGEgd2F0Y2hkb2cgdGltZXIgZW5hYmxlZCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LgotICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCi0gICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCiAgICAgKi8KIAotICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfUkVMQVhfTUlOT1JfVkVSU0lPTl9TSUcsICZtc2cpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfUkVMQVhfTUlOT1JfVkVSU0lPTl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAogICAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLwotICAgIHN0YXR1cyA9IHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOwotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCi0gICAgLyogVGVzdCBjaGVjay0gcHNhX3dyaXRlIGF0IFBTQV9JUENfQ09OTkVDVCAqLwotICAgIHBzYV93cml0ZShtc2cuaGFuZGxlLCAwLCAodm9pZCAqKWRhdGEsIDApOworICAgIC8qIFRlc3QgY2hlY2stIHBzYV93cml0ZSBhdCBQU0FfSVBDX0NPTk5FQ1QsIGNhbGwgc2hvdWxkIHBhbmljICovCisgICAgcHNhLT53cml0ZShtc2cuaGFuZGxlLCAwLCAodm9pZCAqKWRhdGEsIDApOwogCiAgICAgLyogU2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCi0gICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCJcdHBzYV93cml0ZSBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsIlx0cHNhX3dyaXRlIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2NlZWRcbiIsIDApOwogCiAgICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCi0gICAgaWYgKHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCisgICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQogICAgIHsKLSAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKICAgICB9CiAKLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDEvdGVzdF9pMDQxLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0MS90ZXN0X2kwNDEuYwppbmRleCBhNDI3NWE5Li5jZWFkMGYwIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0MS90ZXN0X2kwNDEuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0MS90ZXN0X2kwNDEuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTA0MS5oIgpAQCAtMzUsNyArMzUsNyBAQAogewogICAgcHNhX2hhbmRsZV90ICAgICAgIGhhbmRsZSA9IDA7CiAKLSAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazFdIFRlc3QgcHNhX3dyaXRlIGF0IFBTQV9JUENfRElTQ09OTkVDVFxuIiwgMCk7CisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMV0gVGVzdCBwc2Ffd3JpdGUgYXQgUFNBX0lQQ19ESVNDT05ORUNUXG4iLCAwKTsKIAogICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9SRUxBWF9NSU5PUl9WRVJTSU9OX1NJRCwgMSk7CiAgICBpZiAoaGFuZGxlID4gMCkKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQxL3Rlc3Rfc3VwcF9pMDQxLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0MS90ZXN0X3N1cHBfaTA0MS5jCmluZGV4IGVkNDgzNzcuLjhiM2QyYjMgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQxL3Rlc3Rfc3VwcF9pMDQxLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDEvdGVzdF9zdXBwX2kwNDEuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsOCArMTUsMTMgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKIAogI2RlZmluZSBOVU1fT0ZfQllURVMgNAogCkBAIC0zNCw1MyArMzksNjMgQEAKICAgICBwc2FfbXNnX3QgICAgICAgbXNnID0gezB9OwogICAgIHVpbnQ4X3QgICAgICAgICBkYXRhW05VTV9PRl9CWVRFU10gPSB7MH07CiAKLSAgIC8qIFRlc3QgaXMgdGFyZ2V0aW5nIGZhdGFsIGVycm9yIGNvbmRpdGlvbiBhbmQgaXQgd2lsbCBleHBlY3QgYW4gZXJyb3IgcmVjb3ZlcnkocmVib290KQotICAgICogdG8gaGFwcGVuLiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIHdhcyBpbnRlbmRlZCBhcyBwZXIgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKKyAgIC8qCisgICAgKiBUaGlzIHRlc3QgY2hlY2tzIGZvciB0aGUgUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24gZm9yIHRoZSBQU0EgQVBJLiBBUEkncyByZXNwb25kIHRvCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvdWxkIGJlIGVpdGhlciB0byByZXR1cm4gYXBwcm9wcmlhdGUgc3RhdHVzIGNvZGUgb3IgcGFuaWMgdGhlIGNhbGxlci4KKyAgICAqIFdoZW4gYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljcywgdGhlIFNQRSBjYW5ub3QgY29udGludWUgbm9ybWFsIGV4ZWN1dGlvbiwgYXMgZGVmaW5lZAorICAgICogaW4gdGhpcyBzcGVjaWZpY2F0aW9uLiBUaGUgYmVoYXZpb3Igb2YgdGhlIFNQTSBmb2xsb3dpbmcgYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljIGlzCisgICAgKiBJTVBMRU1FTlRBVElPTiBERUZJTkVELSBBcm0gcmVjb21tZW5kcyB0aGF0IHRoZSBTUE0gY2F1c2VzIHRoZSBzeXN0ZW0gdG8gcmVzdGFydCBpbgorICAgICogdGhpcyBzaXR1YXRpb24uIFJlZmVyIFBTQS1GRiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYW5pYy4KKyAgICAqIEZvciB0aGUgY2FzZXMgd2hlcmUsIFNQTSBjYW5ub3QgY2FwYWJsZSB0byByZWJvb3QgdGhlIHN5c3RlbSAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSwKKyAgICAqIGEgd2F0Y2hkb2cgdGltZXIgc2V0IGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuIFRoaXMgd2lsbAorICAgICogdGVzdHMgY29udGludWl0eSBhbmQgYWJsZSB0byBqdW1wIHRvIG5leHQgdGVzdHMuIFRoZXJlZm9yZSwgZWFjaCB0ZXN0IHdobyBjaGVja3MgZm9yCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiwgZXhwZWN0cyBzeXN0ZW0gdG8gZ2V0IHJlc2V0IGVpdGhlciBieSBTUE0gb3Igd2F0Y2hkb2cgc2V0IGJ5CisgICAgKiB0aGUgdGVzdCBoYXJuZXNzIGZ1bmN0aW9uLgorICAgICoKKyAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZworICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgorICAgICoKKyAgICAqIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgYXMgaW50ZW5kZWQgYnkgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKICAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAogICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKICAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KLSAgICAqCi0gICAgKiBOb3RlOiBJZiBTUE0gaXMgbm90IGNhcGFibGUgb2YgcmVib290aW5nIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbiwKLSAgICAqIGEgd2F0Y2hkb2cgdGltZXIgZW5hYmxlZCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LgotICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCi0gICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCiAgICAgKi8KIAotICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfUkVMQVhfTUlOT1JfVkVSU0lPTl9TSUcsICZtc2cpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfUkVMQVhfTUlOT1JfVkVSU0lPTl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9SRUxBWF9NSU5PUl9WRVJTSU9OX1NJRywgJm1zZyk7Ci0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9SRUxBWF9NSU5PUl9WRVJTSU9OX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCiAgICAgewotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKICAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KLSAgICBzdGF0dXMgPSB2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDMpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKICAgICB7Ci0gICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCi0gICAgLyogVGVzdCBjaGVjay0gcHNhX3dyaXRlIGF0IFBTQV9JUENfRElTQ09OTkVDVCAqLwotICAgIHBzYV93cml0ZShtc2cuaGFuZGxlLCAwLCAodm9pZCAqKWRhdGEsIDApOworICAgIC8qIFRlc3QgY2hlY2stIHBzYV93cml0ZSBhdCBQU0FfSVBDX0RJU0NPTk5FQ1QsIGNhbGwgc2hvdWxkIHBhbmljICovCisgICAgcHNhLT53cml0ZShtc2cuaGFuZGxlLCAwLCAodm9pZCAqKWRhdGEsIDApOwogCiAgICAgLyogU2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCi0gICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCJcdHBzYV93cml0ZSBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsIlx0cHNhX3dyaXRlIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2NlZWRcbiIsIDApOwogCiAgICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCi0gICAgaWYgKHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCisgICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQogICAgIHsKLSAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKICAgICB9Ci0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDIvdGVzdF9pMDQyLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0Mi90ZXN0X2kwNDIuYwppbmRleCA0Yzc2NTJlLi42NWRjMTUzIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0Mi90ZXN0X2kwNDIuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0Mi90ZXN0X2kwNDIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTA0Mi5oIgpAQCAtMzgsNyArMzgsNyBAQAogICAgcHNhX3N0YXR1c190ICAgICAgIHN0YXR1c19vZl9jYWxsOwogCiAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsCi0gICAgICAgICAgICAiW0NoZWNrMV0gVGVzdCBwc2Ffd3JpdGUgd2l0aCBOVUxMIGhhbmRsZVxuIiwgMCk7CisgICAgICAgICAgICAiW0NoZWNrIDFdIFRlc3QgcHNhX3dyaXRlIHdpdGggTlVMTCBoYW5kbGVcbiIsIDApOwogCiAgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpOwogICAgaWYgKGhhbmRsZSA8IDApCkBAIC01MCw3ICs1MCw3IEBACiAgICBzdGF0dXNfb2ZfY2FsbCA9ICBwc2EtPmNhbGwoaGFuZGxlLCBOVUxMLCAwLCBOVUxMLCAwKTsKIAogICAgLyogRXhwZWN0YXRpb24gaXMgc2VydmVyIHRlc3Qgc2hvdWxkIGhhbmcgYW5kIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCi0gICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDYWxsIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2Nlc3NlZFxuIiwgMCk7CisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDYWxsIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2NlZWRcbiIsIDApOwogCiAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQyL3Rlc3Rfc3VwcF9pMDQyLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0Mi90ZXN0X3N1cHBfaTA0Mi5jCmluZGV4IDcxMjc5MWUuLjEyNTdjZGYgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQyL3Rlc3Rfc3VwcF9pMDQyLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDIvdGVzdF9zdXBwX2kwNDIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsOCArMTUsMTMgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKIAogaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2Ffd3JpdGVfd2l0aF9udWxsX2hhbmRsZSgpOwogCkBAIC0zMiw1MSArMzcsNzIgQEAKICAgICBwc2FfbXNnX3QgICAgICAgbXNnID0gezB9OwogICAgIHVpbnQ4X3QgICAgICAgICBkYXRhWzRdID0gezB9OwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZih2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCisgICAvKgorICAgICogVGhpcyB0ZXN0IGNoZWNrcyBmb3IgdGhlIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uIGZvciB0aGUgUFNBIEFQSS4gQVBJJ3MgcmVzcG9uZCB0bworICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb3VsZCBiZSBlaXRoZXIgdG8gcmV0dXJuIGFwcHJvcHJpYXRlIHN0YXR1cyBjb2RlIG9yIHBhbmljIHRoZSBjYWxsZXIuCisgICAgKiBXaGVuIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pY3MsIHRoZSBTUEUgY2Fubm90IGNvbnRpbnVlIG5vcm1hbCBleGVjdXRpb24sIGFzIGRlZmluZWQKKyAgICAqIGluIHRoaXMgc3BlY2lmaWNhdGlvbi4gVGhlIGJlaGF2aW9yIG9mIHRoZSBTUE0gZm9sbG93aW5nIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pYyBpcworICAgICogSU1QTEVNRU5UQVRJT04gREVGSU5FRC0gQXJtIHJlY29tbWVuZHMgdGhhdCB0aGUgU1BNIGNhdXNlcyB0aGUgc3lzdGVtIHRvIHJlc3RhcnQgaW4KKyAgICAqIHRoaXMgc2l0dWF0aW9uLiBSZWZlciBQU0EtRkYgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFuaWMuCisgICAgKiBGb3IgdGhlIGNhc2VzIHdoZXJlLCBTUE0gY2Fubm90IGNhcGFibGUgdG8gcmVib290IHRoZSBzeXN0ZW0gKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93biksCisgICAgKiBhIHdhdGNoZG9nIHRpbWVyIHNldCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LiBUaGlzIHdpbGwKKyAgICAqIHRlc3RzIGNvbnRpbnVpdHkgYW5kIGFibGUgdG8ganVtcCB0byBuZXh0IHRlc3RzLiBUaGVyZWZvcmUsIGVhY2ggdGVzdCB3aG8gY2hlY2tzIGZvcgorICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24sIGV4cGVjdHMgc3lzdGVtIHRvIGdldCByZXNldCBlaXRoZXIgYnkgU1BNIG9yIHdhdGNoZG9nIHNldCBieQorICAgICogdGhlIHRlc3QgaGFybmVzcyBmdW5jdGlvbi4KKyAgICAqCisgICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKKyAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KKyAgICAqCisgICAgKiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIGFzIGludGVuZGVkIGJ5IHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCisgICAgKiBkdWUgdG8gb3RoZXIgcmVhc29ucywgdGVzdCBpcyBzZXR0aW5nIGEgYm9vdCBzaWduYXR1cmUgaW50byBub24tdm9sYXRpbGUgbWVtb3J5IGJlZm9yZSBhbmQKKyAgICAqIGFmdGVyIHRhcmdldGVkIHRlc3QgY2hlY2suIEFmdGVyIGEgcmVib290LCB0aGVzZSBib290IHNpZ25hdHVyZXMgYXJlIGJlaW5nIHJlYWQgYnkgdGhlCisgICAgKiBWQUwgQVBJcyB0byBkZWNpZGUgdGVzdCBzdGF0dXMuCisgICAgKi8KKworICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAKLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIGlmKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKICAgICB7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCAtMik7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTIpOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICAvKiBTZXQgYm9vdCBmbGFnIHRvIEJPT1RfRVhQRUNURURfKiB0byBpbmRpY2F0ZS0gdGVzdCBpcyB0YXJnZXRpbmcKLSAgICAgICAgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCB0ZXN0IHdpbGwgZXhwZWN0IGVycm9yIHJlY292ZXJ5IHRvIGhhcHBlbiAqLwotICAgICAgICBzdGF0dXMgPSB2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKTsKLSAgICAgICAgaWYodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDMpLCBzdGF0dXMpKQorICAgICAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KKyAgICAgICAgc3RhdHVzID0gdmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpOworICAgICAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKICAgICAgICAgewotICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC0zKTsKKyAgICAgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTMpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgLypwc2Ffd3JpdGUgd2l0aCBQU0FfTlVMTF9IQU5ETEUgKi8KLSAgICAgICAgICAgIHBzYV93cml0ZShQU0FfTlVMTF9IQU5ETEUsIDAsICh2b2lkICopZGF0YSwgMCk7CisgICAgICAgICAgICAvKiBwc2Ffd3JpdGUgd2l0aCBQU0FfTlVMTF9IQU5ETEUsIGNhbGwgc2hvdWxkIHBhbmljICovCisgICAgICAgICAgICBwc2EtPndyaXRlKFBTQV9OVUxMX0hBTkRMRSwgMCwgKHZvaWQgKilkYXRhLCAwKTsKIAogICAgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwogCiAgICAgICAgICAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KLSAgICAgICAgICAgIHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCk7CisgICAgICAgICAgICB2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKTsKIAogICAgICAgICAgICAgLyogc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCi0gICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsCi0gICAgICAgICAgICAgICAgIlx0cHNhX3dyaXRlIHdpdGggTlVMTCBoYW5kbGUgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2Vzc2VkXG4iLCAwKTsKKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsCisgICAgICAgICAgICAgICAgIlx0cHNhX3dyaXRlIHdpdGggTlVMTCBoYW5kbGUgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2VlZFxuIiwgMCk7CiAKLSAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCAtNCk7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIC00KTsKIAogICAgICAgICB9CiAgICAgfQogCi0gICAgdmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpOwotICAgIHN0YXR1cyA9ICgodmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSkKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpOworICAgIHN0YXR1cyA9ICgodmFsLT5wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZykpCiAgICAgICAgICAgICAgICA/IFZBTF9TVEFUVVNfRVJST1IgOiBzdGF0dXMpOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAgICAgcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQzL3Rlc3RfaTA0My5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDMvdGVzdF9pMDQzLmMKaW5kZXggNmJlYmZlMy4uZWEzOGY0YyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDMvdGVzdF9pMDQzLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDMvdGVzdF9pMDQzLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwNDMuaCIKQEAgLTM4LDcgKzM4LDcgQEAKICAgIHBzYV9zdGF0dXNfdCAgICAgICBzdGF0dXNfb2ZfY2FsbDsKIAogICAgdmFsLT5wcmludChQUklOVF9URVNULAotICAgICAgICAgICAgIltDaGVjazFdIFRlc3QgcHNhX3dyaXRlIHdpdGggaW52YWxpZCBoYW5kbGVcbiIsIDApOworICAgICAgICAgICAgIltDaGVjayAxXSBUZXN0IHBzYV93cml0ZSB3aXRoIGludmFsaWQgaGFuZGxlXG4iLCAwKTsKIAogICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxKTsKICAgIGlmIChoYW5kbGUgPCAwKQpAQCAtNTAsNyArNTAsNyBAQAogICAgc3RhdHVzX29mX2NhbGwgPSAgcHNhLT5jYWxsKGhhbmRsZSwgTlVMTCwgMCwgTlVMTCwgMCk7CiAKICAgIC8qIEV4cGVjdGF0aW9uIGlzIHNlcnZlciB0ZXN0IHNob3VsZCBoYW5nIGFuZCBjb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLwotICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZWVkXG4iLCAwKTsKIAogICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0My90ZXN0X3N1cHBfaTA0My5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDMvdGVzdF9zdXBwX2kwNDMuYwppbmRleCAwNDA1M2YyLi41MTIzNzUzIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0My90ZXN0X3N1cHBfaTA0My5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQzL3Rlc3Rfc3VwcF9pMDQzLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDggKzE1LDEzIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CiAKICNkZWZpbmUgTlVNX09GX0JZVEVTIDQKIApAQCAtMzQsNjUgKzM5LDc1IEBACiAgICAgcHNhX21zZ190ICAgICAgIG1zZyA9IHswfTsKICAgICB1aW50OF90ICAgICAgICAgZGF0YVtOVU1fT0ZfQllURVNdID0gezB9OwogCi0gICAvKiBUZXN0IGlzIHRhcmdldGluZyBmYXRhbCBlcnJvciBjb25kaXRpb24gYW5kIGl0IHdpbGwgZXhwZWN0IGFuIGVycm9yIHJlY292ZXJ5KHJlYm9vdCkKLSAgICAqIHRvIGhhcHBlbi4gVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCB3YXMgaW50ZW5kZWQgYXMgcGVyIHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCisgICAvKgorICAgICogVGhpcyB0ZXN0IGNoZWNrcyBmb3IgdGhlIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uIGZvciB0aGUgUFNBIEFQSS4gQVBJJ3MgcmVzcG9uZCB0bworICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb3VsZCBiZSBlaXRoZXIgdG8gcmV0dXJuIGFwcHJvcHJpYXRlIHN0YXR1cyBjb2RlIG9yIHBhbmljIHRoZSBjYWxsZXIuCisgICAgKiBXaGVuIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pY3MsIHRoZSBTUEUgY2Fubm90IGNvbnRpbnVlIG5vcm1hbCBleGVjdXRpb24sIGFzIGRlZmluZWQKKyAgICAqIGluIHRoaXMgc3BlY2lmaWNhdGlvbi4gVGhlIGJlaGF2aW9yIG9mIHRoZSBTUE0gZm9sbG93aW5nIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pYyBpcworICAgICogSU1QTEVNRU5UQVRJT04gREVGSU5FRC0gQXJtIHJlY29tbWVuZHMgdGhhdCB0aGUgU1BNIGNhdXNlcyB0aGUgc3lzdGVtIHRvIHJlc3RhcnQgaW4KKyAgICAqIHRoaXMgc2l0dWF0aW9uLiBSZWZlciBQU0EtRkYgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFuaWMuCisgICAgKiBGb3IgdGhlIGNhc2VzIHdoZXJlLCBTUE0gY2Fubm90IGNhcGFibGUgdG8gcmVib290IHRoZSBzeXN0ZW0gKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93biksCisgICAgKiBhIHdhdGNoZG9nIHRpbWVyIHNldCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LiBUaGlzIHdpbGwKKyAgICAqIHRlc3RzIGNvbnRpbnVpdHkgYW5kIGFibGUgdG8ganVtcCB0byBuZXh0IHRlc3RzLiBUaGVyZWZvcmUsIGVhY2ggdGVzdCB3aG8gY2hlY2tzIGZvcgorICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24sIGV4cGVjdHMgc3lzdGVtIHRvIGdldCByZXNldCBlaXRoZXIgYnkgU1BNIG9yIHdhdGNoZG9nIHNldCBieQorICAgICogdGhlIHRlc3QgaGFybmVzcyBmdW5jdGlvbi4KKyAgICAqCisgICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKKyAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KKyAgICAqCisgICAgKiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIGFzIGludGVuZGVkIGJ5IHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCiAgICAgKiBkdWUgdG8gb3RoZXIgcmVhc29ucywgdGVzdCBpcyBzZXR0aW5nIGEgYm9vdCBzaWduYXR1cmUgaW50byBub24tdm9sYXRpbGUgbWVtb3J5IGJlZm9yZSBhbmQKICAgICAqIGFmdGVyIHRhcmdldGVkIHRlc3QgY2hlY2suIEFmdGVyIGEgcmVib290LCB0aGVzZSBib290IHNpZ25hdHVyZXMgYXJlIGJlaW5nIHJlYWQgYnkgdGhlCiAgICAgKiBWQUwgQVBJcyB0byBkZWNpZGUgdGVzdCBzdGF0dXMuCi0gICAgKgotICAgICogTm90ZTogSWYgU1BNIGlzIG5vdCBjYXBhYmxlIG9mIHJlYm9vdGluZyAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSBpbiBmYXRhbCBlcnJvciBjb25kaXRpb24sCi0gICAgKiBhIHdhdGNoZG9nIHRpbWVyIGVuYWJsZWQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4KLSAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZwotICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgogICAgICovCiAKLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCiAgICAgewotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCi0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKIAotICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2NhbGxfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7Ci0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKICAgICB7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCAtMik7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTIpOwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KLSAgICAgICAgc3RhdHVzID0gdmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUyk7Ci0gICAgICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMyksIHN0YXR1cykpCisgICAgICAgIHN0YXR1cyA9IHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKTsKKyAgICAgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMyksIHN0YXR1cykpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKLSAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCAtMyk7CisgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOworICAgICAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCAtMyk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICAvKiBUZXN0IGNoZWNrLSBwc2Ffd3JpdGUgd2l0aCBJTlZBTElEX0hBTkRMRSAqLwotICAgICAgICAgICAgcHNhX3dyaXRlKElOVkFMSURfSEFORExFLCAwLCAodm9pZCAqKWRhdGEsIDApOworICAgICAgICAgICAgLyogVGVzdCBjaGVjay0gcHNhX3dyaXRlIHdpdGggSU5WQUxJRF9IQU5ETEUsIGNhbGwgc2hvdWxkIHBhbmljICovCisgICAgICAgICAgICBwc2EtPndyaXRlKElOVkFMSURfSEFORExFLCAwLCAodm9pZCAqKWRhdGEsIDApOwogCiAgICAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CiAKICAgICAgICAgICAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLwotICAgICAgICAgICAgaWYgKHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCisgICAgICAgICAgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvKiBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KLSAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwKLSAgICAgICAgICAgICAgICAiXHRwc2Ffd3JpdGUgd2l0aCBpbnZhbGlkIGhhbmRsZSBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwKKyAgICAgICAgICAgICAgICAiXHRwc2Ffd3JpdGUgd2l0aCBpbnZhbGlkIGhhbmRsZSBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZWVkXG4iLCAwKTsKIAotICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC00KTsKKyAgICAgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTQpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpOwotICAgIHN0YXR1cyA9ICgodmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSkKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpOworICAgIHN0YXR1cyA9ICgodmFsLT5wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZykpCiAgICAgICAgICAgICAgICA/IFZBTF9TVEFUVVNfRVJST1IgOiBzdGF0dXMpOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAgICAgcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ0L3Rlc3RfaTA0NC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDQvdGVzdF9pMDQ0LmMKaW5kZXggMTcyODllMS4uYzIyYTE4YiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDQvdGVzdF9pMDQ0LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDQvdGVzdF9pMDQ0LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwNDQuaCIKQEAgLTM4LDcgKzM4LDcgQEAKICAgIHBzYV9zdGF0dXNfdCAgICAgICBzdGF0dXNfb2ZfY2FsbDsKIAogICAgdmFsLT5wcmludChQUklOVF9URVNULAotICAgICAgICAgICAgIltDaGVjazFdIFRlc3QgcHNhX3dyaXRlIHdpdGggaW52ZWNfaWR4PVBTQV9NQVhfSU9WRUNcbiIsIDApOworICAgICAgICAgICAgIltDaGVjayAxXSBUZXN0IHBzYV93cml0ZSB3aXRoIGludmVjX2lkeD1QU0FfTUFYX0lPVkVDXG4iLCAwKTsKIAogICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxKTsKICAgIGlmIChoYW5kbGUgPCAwKQpAQCAtNTAsNyArNTAsNyBAQAogICAgc3RhdHVzX29mX2NhbGwgPSAgcHNhLT5jYWxsKGhhbmRsZSwgTlVMTCwgMCwgTlVMTCwgMCk7CiAKICAgIC8qIEV4cGVjdGF0aW9uIGlzIHNlcnZlciB0ZXN0IHNob3VsZCBoYW5nIGFuZCBjb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLwotICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZWVkXG4iLCAwKTsKIAogICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0NC90ZXN0X3N1cHBfaTA0NC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDQvdGVzdF9zdXBwX2kwNDQuYwppbmRleCAxMjE5YjVlLi5iNGU0Y2FlIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0NC90ZXN0X3N1cHBfaTA0NC5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ0L3Rlc3Rfc3VwcF9pMDQ0LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE1LDggKzE1LDEzIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CiAKICNkZWZpbmUgTlVNX09GX0JZVEVTIDQKIApAQCAtMzQsNTMgKzM5LDc1IEBACiAgICAgcHNhX21zZ190ICAgICAgIG1zZyA9IHswfTsKICAgICB1aW50OF90ICAgICAgICAgZGF0YVtOVU1fT0ZfQllURVNdID0gezB9OwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgLyoKKyAgICAqIFRoaXMgdGVzdCBjaGVja3MgZm9yIHRoZSBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiBmb3IgdGhlIFBTQSBBUEkuIEFQSSdzIHJlc3BvbmQgdG8KKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY291bGQgYmUgZWl0aGVyIHRvIHJldHVybiBhcHByb3ByaWF0ZSBzdGF0dXMgY29kZSBvciBwYW5pYyB0aGUgY2FsbGVyLgorICAgICogV2hlbiBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWNzLCB0aGUgU1BFIGNhbm5vdCBjb250aW51ZSBub3JtYWwgZXhlY3V0aW9uLCBhcyBkZWZpbmVkCisgICAgKiBpbiB0aGlzIHNwZWNpZmljYXRpb24uIFRoZSBiZWhhdmlvciBvZiB0aGUgU1BNIGZvbGxvd2luZyBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWMgaXMKKyAgICAqIElNUExFTUVOVEFUSU9OIERFRklORUQtIEFybSByZWNvbW1lbmRzIHRoYXQgdGhlIFNQTSBjYXVzZXMgdGhlIHN5c3RlbSB0byByZXN0YXJ0IGluCisgICAgKiB0aGlzIHNpdHVhdGlvbi4gUmVmZXIgUFNBLUZGIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhbmljLgorICAgICogRm9yIHRoZSBjYXNlcyB3aGVyZSwgU1BNIGNhbm5vdCBjYXBhYmxlIHRvIHJlYm9vdCB0aGUgc3lzdGVtIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBzZXQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4gVGhpcyB3aWxsCisgICAgKiB0ZXN0cyBjb250aW51aXR5IGFuZCBhYmxlIHRvIGp1bXAgdG8gbmV4dCB0ZXN0cy4gVGhlcmVmb3JlLCBlYWNoIHRlc3Qgd2hvIGNoZWNrcyBmb3IKKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uLCBleHBlY3RzIHN5c3RlbSB0byBnZXQgcmVzZXQgZWl0aGVyIGJ5IFNQTSBvciB3YXRjaGRvZyBzZXQgYnkKKyAgICAqIHRoZSB0ZXN0IGhhcm5lc3MgZnVuY3Rpb24uCisgICAgKgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKgorICAgICogVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCBhcyBpbnRlbmRlZCBieSB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCisgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQorICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgorICAgICovCisKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKSkKICAgICB7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC0yKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCAtMik7CiAgICAgfQogICAgIGVsc2UKICAgICB7CiAgICAgICAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLwotICAgICAgICBzdGF0dXMgPSB2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKTsKLSAgICAgICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKKyAgICAgICAgc3RhdHVzID0gdmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpOworICAgICAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKICAgICAgICAgewotICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOwotICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC0zKTsKKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIC0zKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFRlc3QgY2hlY2stIHBzYV93cml0ZSB3aXRoIGludmVjX2lkeD1QU0FfTUFYX0lPVkVDICovCi0gICAgICAgICAgICBwc2Ffd3JpdGUobXNnLmhhbmRsZSwgUFNBX01BWF9JT1ZFQywgKHZvaWQgKilkYXRhLCAwKTsKKyAgICAgICAgICAgIC8qIFRlc3QgY2hlY2stIHBzYV93cml0ZSB3aXRoIGludmVjX2lkeD1QU0FfTUFYX0lPVkVDLCBjYWxsIHNob3VsZCBwYW5pYyAqLworICAgICAgICAgICAgcHNhLT53cml0ZShtc2cuaGFuZGxlLCBQU0FfTUFYX0lPVkVDLCAodm9pZCAqKWRhdGEsIDApOwogCiAgICAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CiAKICAgICAgICAgICAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLwotICAgICAgICAgICAgaWYgKHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCisgICAgICAgICAgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvKiBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KLSAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwKLSAgICAgICAgICAgICAgICAiXHRwc2Ffd3JpdGUgd2l0aCBpbnZlY19pZHg9UFNBX01BWF9JT1ZFQyBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwKKyAgICAgICAgICAgICAgICAiXHRwc2Ffd3JpdGUgd2l0aCBpbnZlY19pZHg9UFNBX01BWF9JT1ZFQyBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZWVkXG4iLCAwKTsKIAotICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC00KTsKKyAgICAgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTQpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpOwotICAgIHN0YXR1cyA9ICgodmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSkKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpOworICAgIHN0YXR1cyA9ICgodmFsLT5wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZykpCiAgICAgICAgICAgICAgICA/IFZBTF9TVEFUVVNfRVJST1IgOiBzdGF0dXMpOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAgICAgcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ1L3Rlc3RfaTA0NS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDUvdGVzdF9pMDQ1LmMKaW5kZXggM2IxNWY5Ni4uNjQ0OGI2ZCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDUvdGVzdF9pMDQ1LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDUvdGVzdF9pMDQ1LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwNDUuaCIKQEAgLTM4LDcgKzM4LDcgQEAKICAgIHBzYV9zdGF0dXNfdCAgICAgICBzdGF0dXNfb2ZfY2FsbDsKIAogICAgdmFsLT5wcmludChQUklOVF9URVNULAotICAgICAgICAgICAgIltDaGVjazFdIFRlc3QgcHNhX3dyaXRlIHdpdGggaW52ZWNfaWR4ID4gUFNBX01BWF9JT1ZFQ1xuIiwgMCk7CisgICAgICAgICAgICAiW0NoZWNrIDFdIFRlc3QgcHNhX3dyaXRlIHdpdGggaW52ZWNfaWR4ID4gUFNBX01BWF9JT1ZFQ1xuIiwgMCk7CiAKICAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSk7CiAgICBpZiAoaGFuZGxlIDwgMCkKQEAgLTUwLDcgKzUwLDcgQEAKICAgIHN0YXR1c19vZl9jYWxsID0gIHBzYS0+Y2FsbChoYW5kbGUsIE5VTEwsIDAsIE5VTEwsIDApOwogCiAgICAvKiBFeHBlY3RhdGlvbiBpcyBzZXJ2ZXIgdGVzdCBzaG91bGQgaGFuZyBhbmQgY29udHJvbCBzaG91bGRuJ3QgaGF2ZSBjb21lIGhlcmUgKi8KLSAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENhbGwgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2Vzc2VkXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENhbGwgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2VlZFxuIiwgMCk7CiAKICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDUvdGVzdF9zdXBwX2kwNDUuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ1L3Rlc3Rfc3VwcF9pMDQ1LmMKaW5kZXggYTE2ZDVhNy4uMjYwZTZmZiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDUvdGVzdF9zdXBwX2kwNDUuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0NS90ZXN0X3N1cHBfaTA0NS5jCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xNSw4ICsxNSwxMyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KIAotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKworI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfc2VydmVyX3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfc2VydmVyX3NwKQorZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOwogCiAjZGVmaW5lIE5VTV9PRl9CWVRFUyA0CiAKQEAgLTM0LDY1ICszOSw3NSBAQAogICAgIHBzYV9tc2dfdCAgICAgICBtc2cgPSB7MH07CiAgICAgdWludDhfdCAgICAgICAgIGRhdGFbTlVNX09GX0JZVEVTXSA9IHswfTsKIAotICAgLyogVGVzdCBpcyB0YXJnZXRpbmcgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCBpdCB3aWxsIGV4cGVjdCBhbiBlcnJvciByZWNvdmVyeShyZWJvb3QpCi0gICAgKiB0byBoYXBwZW4uIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgd2FzIGludGVuZGVkIGFzIHBlciB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgLyoKKyAgICAqIFRoaXMgdGVzdCBjaGVja3MgZm9yIHRoZSBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiBmb3IgdGhlIFBTQSBBUEkuIEFQSSdzIHJlc3BvbmQgdG8KKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY291bGQgYmUgZWl0aGVyIHRvIHJldHVybiBhcHByb3ByaWF0ZSBzdGF0dXMgY29kZSBvciBwYW5pYyB0aGUgY2FsbGVyLgorICAgICogV2hlbiBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWNzLCB0aGUgU1BFIGNhbm5vdCBjb250aW51ZSBub3JtYWwgZXhlY3V0aW9uLCBhcyBkZWZpbmVkCisgICAgKiBpbiB0aGlzIHNwZWNpZmljYXRpb24uIFRoZSBiZWhhdmlvciBvZiB0aGUgU1BNIGZvbGxvd2luZyBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWMgaXMKKyAgICAqIElNUExFTUVOVEFUSU9OIERFRklORUQtIEFybSByZWNvbW1lbmRzIHRoYXQgdGhlIFNQTSBjYXVzZXMgdGhlIHN5c3RlbSB0byByZXN0YXJ0IGluCisgICAgKiB0aGlzIHNpdHVhdGlvbi4gUmVmZXIgUFNBLUZGIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhbmljLgorICAgICogRm9yIHRoZSBjYXNlcyB3aGVyZSwgU1BNIGNhbm5vdCBjYXBhYmxlIHRvIHJlYm9vdCB0aGUgc3lzdGVtIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBzZXQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4gVGhpcyB3aWxsCisgICAgKiB0ZXN0cyBjb250aW51aXR5IGFuZCBhYmxlIHRvIGp1bXAgdG8gbmV4dCB0ZXN0cy4gVGhlcmVmb3JlLCBlYWNoIHRlc3Qgd2hvIGNoZWNrcyBmb3IKKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uLCBleHBlY3RzIHN5c3RlbSB0byBnZXQgcmVzZXQgZWl0aGVyIGJ5IFNQTSBvciB3YXRjaGRvZyBzZXQgYnkKKyAgICAqIHRoZSB0ZXN0IGhhcm5lc3MgZnVuY3Rpb24uCisgICAgKgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKgorICAgICogVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCBhcyBpbnRlbmRlZCBieSB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAogICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCiAgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQogICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgotICAgICoKLSAgICAqIE5vdGU6IElmIFNQTSBpcyBub3QgY2FwYWJsZSBvZiByZWJvb3RpbmcgKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93bikgaW4gZmF0YWwgZXJyb3IgY29uZGl0aW9uLAotICAgICogYSB3YXRjaGRvZyB0aW1lciBlbmFibGVkIGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuCi0gICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKLSAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KICAgICAqLwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAKLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2NhbGxfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCiAgICAgewotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgLTIpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIC0yKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKICAgICAgICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCi0gICAgICAgIHN0YXR1cyA9IHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpOwotICAgICAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDMpLCBzdGF0dXMpKQorICAgICAgICBzdGF0dXMgPSB2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUyk7CisgICAgICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDMpLCBzdGF0dXMpKQogICAgICAgICB7Ci0gICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7Ci0gICAgICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgLTMpOworICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTMpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgLyogVGVzdCBjaGVjay0gcHNhX3dyaXRlIHdpdGggaW52ZWNfaWR4ID4gUFNBX01BWF9JT1ZFQyAqLwotICAgICAgICAgICAgcHNhX3dyaXRlKG1zZy5oYW5kbGUsIFBTQV9NQVhfSU9WRUMgKyAxLCAodm9pZCAqKWRhdGEsIDApOworICAgICAgICAgICAgLyogVGVzdCBjaGVjay0gcHNhX3dyaXRlIHdpdGggaW52ZWNfaWR4ID4gUFNBX01BWF9JT1ZFQywgY2FsbCBzaG91bGQgcGFuaWMgKi8KKyAgICAgICAgICAgIHBzYS0+d3JpdGUobXNnLmhhbmRsZSwgUFNBX01BWF9JT1ZFQyArIDEsICh2b2lkICopZGF0YSwgMCk7CiAKICAgICAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKIAogICAgICAgICAgICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCi0gICAgICAgICAgICBpZiAodmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgICAgICAgICAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8qIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZSAqLwotICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLAotICAgICAgICAgICAgICAgICJcdHBzYV93cml0ZSB3aXRoIGludmVjX2lkeCA+IFBTQV9NQVhfSU9WRUMgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2Vzc2VkXG4iLCAwKTsKKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsCisgICAgICAgICAgICAgICAgIlx0cHNhX3dyaXRlIHdpdGggaW52ZWNfaWR4ID4gUFNBX01BWF9JT1ZFQyBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZWVkXG4iLCAwKTsKIAotICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC00KTsKKyAgICAgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTQpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpOwotICAgIHN0YXR1cyA9ICgodmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSkKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpOworICAgIHN0YXR1cyA9ICgodmFsLT5wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZykpCiAgICAgICAgICAgICAgICA/IFZBTF9TVEFUVVNfRVJST1IgOiBzdGF0dXMpOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAgICAgcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ2L3Rlc3RfaTA0Ni5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDYvdGVzdF9pMDQ2LmMKaW5kZXggMDYxMzk2OS4uZjYyNzAyMyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDYvdGVzdF9pMDQ2LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDYvdGVzdF9pMDQ2LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwNDYuaCIKQEAgLTM5LDcgKzM5LDcgQEAKICAgIHVpbnQ4X3QgICAgICAgICAgICBkYXRhID0gMDsKIAogICAgdmFsLT5wcmludChQUklOVF9URVNULAotICAgICAgICAgICAgIltDaGVjazFdIFRlc3QgcHNhX3dyaXRlIHdpdGggc2l6ZSBvdmVyZmxvd1xuIiwgMCk7CisgICAgICAgICAgICAiW0NoZWNrIDFdIFRlc3QgcHNhX3dyaXRlIHdpdGggc2l6ZSBvdmVyZmxvd1xuIiwgMCk7CiAKICAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSk7CiAgICBpZiAoaGFuZGxlIDwgMCkKQEAgLTUzLDcgKzUzLDcgQEAKICAgIHN0YXR1c19vZl9jYWxsID0gIHBzYS0+Y2FsbChoYW5kbGUsIE5VTEwsIDAsICZyZXNwLCAxKTsKIAogICAgLyogRXhwZWN0YXRpb24gaXMgc2VydmVyIHRlc3Qgc2hvdWxkIGhhbmcgYW5kIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCi0gICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDYWxsIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2Nlc3NlZFxuIiwgMCk7CisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDYWxsIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2NlZWRcbiIsIDApOwogCiAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ2L3Rlc3Rfc3VwcF9pMDQ2LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0Ni90ZXN0X3N1cHBfaTA0Ni5jCmluZGV4IGM1ZGI4MzUuLjhhNDUxM2EgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ2L3Rlc3Rfc3VwcF9pMDQ2LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDYvdGVzdF9zdXBwX2kwNDYuYwpAQCAtMSw1ICsxLDUgQEAKIC8qKiBAZmlsZQotICogQ29weXJpZ2h0IChjKSAyMDE4LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwpAQCAtMTUsOCArMTUsMTMgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKIAogI2RlZmluZSBOVU1fT0ZfQllURVMgNAogCkBAIC0zNCw2NSArMzksNzUgQEAKICAgICBwc2FfbXNnX3QgICAgICAgbXNnID0gezB9OwogICAgIHVpbnQ4X3QgICAgICAgICBkYXRhW05VTV9PRl9CWVRFU10gPSB7MH07CiAKLSAgIC8qIFRlc3QgaXMgdGFyZ2V0aW5nIGZhdGFsIGVycm9yIGNvbmRpdGlvbiBhbmQgaXQgd2lsbCBleHBlY3QgYW4gZXJyb3IgcmVjb3ZlcnkocmVib290KQotICAgICogdG8gaGFwcGVuLiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIHdhcyBpbnRlbmRlZCBhcyBwZXIgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKKyAgIC8qCisgICAgKiBUaGlzIHRlc3QgY2hlY2tzIGZvciB0aGUgUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24gZm9yIHRoZSBQU0EgQVBJLiBBUEkncyByZXNwb25kIHRvCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvdWxkIGJlIGVpdGhlciB0byByZXR1cm4gYXBwcm9wcmlhdGUgc3RhdHVzIGNvZGUgb3IgcGFuaWMgdGhlIGNhbGxlci4KKyAgICAqIFdoZW4gYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljcywgdGhlIFNQRSBjYW5ub3QgY29udGludWUgbm9ybWFsIGV4ZWN1dGlvbiwgYXMgZGVmaW5lZAorICAgICogaW4gdGhpcyBzcGVjaWZpY2F0aW9uLiBUaGUgYmVoYXZpb3Igb2YgdGhlIFNQTSBmb2xsb3dpbmcgYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljIGlzCisgICAgKiBJTVBMRU1FTlRBVElPTiBERUZJTkVELSBBcm0gcmVjb21tZW5kcyB0aGF0IHRoZSBTUE0gY2F1c2VzIHRoZSBzeXN0ZW0gdG8gcmVzdGFydCBpbgorICAgICogdGhpcyBzaXR1YXRpb24uIFJlZmVyIFBTQS1GRiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYW5pYy4KKyAgICAqIEZvciB0aGUgY2FzZXMgd2hlcmUsIFNQTSBjYW5ub3QgY2FwYWJsZSB0byByZWJvb3QgdGhlIHN5c3RlbSAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSwKKyAgICAqIGEgd2F0Y2hkb2cgdGltZXIgc2V0IGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuIFRoaXMgd2lsbAorICAgICogdGVzdHMgY29udGludWl0eSBhbmQgYWJsZSB0byBqdW1wIHRvIG5leHQgdGVzdHMuIFRoZXJlZm9yZSwgZWFjaCB0ZXN0IHdobyBjaGVja3MgZm9yCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiwgZXhwZWN0cyBzeXN0ZW0gdG8gZ2V0IHJlc2V0IGVpdGhlciBieSBTUE0gb3Igd2F0Y2hkb2cgc2V0IGJ5CisgICAgKiB0aGUgdGVzdCBoYXJuZXNzIGZ1bmN0aW9uLgorICAgICoKKyAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZworICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgorICAgICoKKyAgICAqIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgYXMgaW50ZW5kZWQgYnkgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKICAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAogICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKICAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KLSAgICAqCi0gICAgKiBOb3RlOiBJZiBTUE0gaXMgbm90IGNhcGFibGUgb2YgcmVib290aW5nIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbiwKLSAgICAqIGEgd2F0Y2hkb2cgdGltZXIgZW5hYmxlZCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LgotICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCi0gICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCiAgICAgKi8KIAotICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7Ci0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKSkKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKSkKICAgICB7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC0yKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCAtMik7CiAgICAgfQogICAgIGVsc2UKICAgICB7CiAgICAgICAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLwotICAgICAgICBzdGF0dXMgPSB2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKTsKLSAgICAgICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKKyAgICAgICAgc3RhdHVzID0gdmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpOworICAgICAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKICAgICAgICAgewotICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOwotICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC0zKTsKKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIC0zKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFRlc3QgY2hlY2stIHBzYV93cml0ZSB3aXRoIHNpemUgb3ZlcmZsb3cgKi8KLSAgICAgICAgICAgIHBzYV93cml0ZShtc2cuaGFuZGxlLCAwLCAodm9pZCAqKWRhdGEsIG1zZy5vdXRfc2l6ZVswXSsxKTsKKyAgICAgICAgICAgIC8qIFRlc3QgY2hlY2stIHBzYV93cml0ZSB3aXRoIHNpemUgb3ZlcmZsb3csIGNhbGwgc2hvdWxkIHBhbmljICovCisgICAgICAgICAgICBwc2EtPndyaXRlKG1zZy5oYW5kbGUsIDAsICh2b2lkICopZGF0YSwgbXNnLm91dF9zaXplWzBdKzEpOwogCiAgICAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CiAKICAgICAgICAgICAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLwotICAgICAgICAgICAgaWYgKHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCisgICAgICAgICAgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvKiBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KLSAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwKLSAgICAgICAgICAgICAgICAiXHRwc2Ffd3JpdGUgd2l0aCBzaXplIG92ZXJmbG93IHNob3VsZCBmYWlsZWQgYnV0IHN1Y2Nlc3NlZFxuIiwgMCk7CisgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLAorICAgICAgICAgICAgICAgICJcdHBzYV93cml0ZSB3aXRoIHNpemUgb3ZlcmZsb3cgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2VlZFxuIiwgMCk7CiAKLSAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCAtNCk7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIC00KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjA0KSwgc3RhdHVzKTsKLSAgICBzdGF0dXMgPSAoKHZhbF9wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZykpCisgICAgdmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjA0KSwgc3RhdHVzKTsKKyAgICBzdGF0dXMgPSAoKHZhbC0+cHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpKQogICAgICAgICAgICAgICAgPyBWQUxfU1RBVFVTX0VSUk9SIDogc3RhdHVzKTsKLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogICAgIHJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0Ny90ZXN0X2kwNDcuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ3L3Rlc3RfaTA0Ny5jCmluZGV4IDk4OWM2YjAuLmFiOThhOTUgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ3L3Rlc3RfaTA0Ny5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ3L3Rlc3RfaTA0Ny5jCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDQ3LmgiCkBAIC0zNiw3ICszNiw3IEBACiAgICBwc2FfaGFuZGxlX3QgICAgICAgaGFuZGxlID0gMDsKIAogICAgdmFsLT5wcmludChQUklOVF9URVNULAotICAgICAgICAgICAgIltDaGVjazFdIFRlc3QgcHNhX2dldCB3aXRoIGludmFsaWQgbXNnIHBvaW50ZXJcbiIsIDApOworICAgICAgICAgICAgIltDaGVjayAxXSBUZXN0IHBzYV9nZXQgd2l0aCBpbnZhbGlkIG1zZyBwb2ludGVyXG4iLCAwKTsKIAogICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxKTsKICAgIGlmIChoYW5kbGUgPiAwKQpAQCAtNDUsNyArNDUsNyBAQAogICAgfQogCiAgICAvKiBFeHBlY3RhdGlvbiBpcyBzZXJ2ZXIgdGVzdCBzaG91bGQgaGFuZyBhbmQgY29udHJvbCBzaG91bGRuJ3QgaGF2ZSBjb21lIGhlcmUgKi8KLSAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdHBzYV9jb25uZWN0IHNob3VsZCBmYWlsZWQgYnV0IHN1Y2Nlc3NlZFxuIiwgMCk7CisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRwc2FfY29ubmVjdCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZWVkXG4iLCAwKTsKIAogICAgKHZvaWQpKGhhbmRsZSk7CiAgICByZXR1cm4gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDcvdGVzdF9zdXBwX2kwNDcuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ3L3Rlc3Rfc3VwcF9pMDQ3LmMKaW5kZXggYjQxYWE5Ny4uODJlNDNkZiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDcvdGVzdF9zdXBwX2kwNDcuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0Ny90ZXN0X3N1cHBfaTA0Ny5jCkBAIC0xNSw4ICsxNSwxMyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KIAotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKworI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfc2VydmVyX3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfc2VydmVyX3NwKQorZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOwogCiAKIGludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX2dldF93aXRoX2ludmFsaWRfbXNnX3BvaW50ZXIodm9pZCk7CkBAIC0zNSw0OSArNDAsNjEgQEAKICAgIG1pc2NlbGxhbmVvdXNfZGVzY190ICAgICptaXNjX2Rlc2M7CiAgICBtZW1vcnlfZGVzY190ICAgICAgICAgICAqbWVtb3J5X2Rlc2M7CiAKLSAgIC8qIFRlc3QgaXMgdGFyZ2V0aW5nIGZhdGFsIGVycm9yIGNvbmRpdGlvbiBhbmQgaXQgd2lsbCBleHBlY3QgYW4gZXJyb3IgcmVjb3ZlcnkocmVib290KQotICAgICogdG8gaGFwcGVuLiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIHdhcyBpbnRlbmRlZCBhcyBwZXIgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKKyAgIC8qCisgICAgKiBUaGlzIHRlc3QgY2hlY2tzIGZvciB0aGUgUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24gZm9yIHRoZSBQU0EgQVBJLiBBUEkncyByZXNwb25kIHRvCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvdWxkIGJlIGVpdGhlciB0byByZXR1cm4gYXBwcm9wcmlhdGUgc3RhdHVzIGNvZGUgb3IgcGFuaWMgdGhlIGNhbGxlci4KKyAgICAqIFdoZW4gYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljcywgdGhlIFNQRSBjYW5ub3QgY29udGludWUgbm9ybWFsIGV4ZWN1dGlvbiwgYXMgZGVmaW5lZAorICAgICogaW4gdGhpcyBzcGVjaWZpY2F0aW9uLiBUaGUgYmVoYXZpb3Igb2YgdGhlIFNQTSBmb2xsb3dpbmcgYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljIGlzCisgICAgKiBJTVBMRU1FTlRBVElPTiBERUZJTkVELSBBcm0gcmVjb21tZW5kcyB0aGF0IHRoZSBTUE0gY2F1c2VzIHRoZSBzeXN0ZW0gdG8gcmVzdGFydCBpbgorICAgICogdGhpcyBzaXR1YXRpb24uIFJlZmVyIFBTQS1GRiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYW5pYy4KKyAgICAqIEZvciB0aGUgY2FzZXMgd2hlcmUsIFNQTSBjYW5ub3QgY2FwYWJsZSB0byByZWJvb3QgdGhlIHN5c3RlbSAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSwKKyAgICAqIGEgd2F0Y2hkb2cgdGltZXIgc2V0IGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuIFRoaXMgd2lsbAorICAgICogdGVzdHMgY29udGludWl0eSBhbmQgYWJsZSB0byBqdW1wIHRvIG5leHQgdGVzdHMuIFRoZXJlZm9yZSwgZWFjaCB0ZXN0IHdobyBjaGVja3MgZm9yCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiwgZXhwZWN0cyBzeXN0ZW0gdG8gZ2V0IHJlc2V0IGVpdGhlciBieSBTUE0gb3Igd2F0Y2hkb2cgc2V0IGJ5CisgICAgKiB0aGUgdGVzdCBoYXJuZXNzIGZ1bmN0aW9uLgorICAgICoKKyAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZworICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgorICAgICoKKyAgICAqIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgYXMgaW50ZW5kZWQgYnkgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKICAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAogICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKICAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KLSAgICAqCi0gICAgKiBOb3RlOiBJZiBTUE0gaXMgbm90IGNhcGFibGUgb2YgcmVib290aW5nIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbiwKLSAgICAqIGEgd2F0Y2hkb2cgdGltZXIgZW5hYmxlZCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LgotICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCi0gICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCiAgICAgKi8KIAotICAgIHNpZ25hbHMgPSBwc2Ffd2FpdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgUFNBX0JMT0NLKTsKKyAgICBzaWduYWxzID0gcHNhLT53YWl0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCBQU0FfQkxPQ0spOwogICAgIGlmICgoc2lnbmFscyAmIFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHKSA9PSAwKQogICAgIHsKLSAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsCisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwKICAgICAgICAgICAgICAgICAicHNhX3dhaXQgcmV0dXJuZWQgd2l0aCBpbnZhbGlkIHNpZ25hbCB2YWx1ZSA9IDB4JXhcbiIsIHNpZ25hbHMpOwogICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwogICAgIH0KIAotICAgIC8qIFNlbGVjdGlvbiBvZiBpbnZhbGlkIG1zZyBwb2ludGVyOgorICAgIC8qCisgICAgICogU2VsZWN0aW9uIG9mIGludmFsaWQgbXNnIHBvaW50ZXI6CisgICAgICoKICAgICAgKiAgaWYgKElTT0xBVElPTl9MRVZFTCA+IDEpCiAgICAgICogICAgICAgbXNnX3BvaW50ZXIgPSBkcml2ZXJfbW1pb19yZWdpb25fYmFzZTsKICAgICAgKiAgZWxzZQogICAgICAqICAgICAgIG1zZ19wb2ludGVyID0gTlVMTDsKICAgICAgKi8KIAotICAgIHN0YXR1cyA9IHZhbF90YXJnZXRfZ2V0X2NvbmZpZyhUQVJHRVRfQ09ORklHX0NSRUFURV9JRChHUk9VUF9NSVNDRUxMQU5FT1VTLAorICAgIHN0YXR1cyA9IHZhbC0+dGFyZ2V0X2dldF9jb25maWcoVEFSR0VUX0NPTkZJR19DUkVBVEVfSUQoR1JPVVBfTUlTQ0VMTEFORU9VUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlTQ0VMTEFORU9VU19EVVQsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICoqKSZtaXNjX2Rlc2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90ICopc2l6ZW9mKG1pc2NlbGxhbmVvdXNfZGVzY190KSk7Ci0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKSkKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKSkKICAgICB7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCiAgICAgaWYgKG1pc2NfZGVzYy0+aW1wbGVtZW50ZWRfcHNhX2Zpcm13YXJlX2lzb2xhdGlvbl9sZXZlbCA+IExFVkVMMSkKICAgICB7Ci0gICAgICAgIHN0YXR1cyA9IHZhbF90YXJnZXRfZ2V0X2NvbmZpZyhUQVJHRVRfQ09ORklHX0NSRUFURV9JRChHUk9VUF9NRU1PUlksCisgICAgICAgIHN0YXR1cyA9IHZhbC0+dGFyZ2V0X2dldF9jb25maWcoVEFSR0VUX0NPTkZJR19DUkVBVEVfSUQoR1JPVVBfTUVNT1JZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRU1PUllfRFJJVkVSX1BBUlRJVElPTl9NTUlPLCAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QgKiopJm1lbW9yeV9kZXNjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QgKilzaXplb2YobWVtb3J5X2Rlc2NfdCkpOwotICAgICAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQorICAgICAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICAgICAgfQpAQCAtODYsMjYgKzEwMywyNiBAQAogICAgIH0KIAogICAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLwotICAgIGlmICh2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKSkKKyAgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpKQogICAgIHsKLSAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOworICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOwogICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKICAgICB9CiAKLSAgICAvKiBwc2FfZ2V0IHdpdGggaW52YWxpZCBtc2cgcG9pbnRlciAqLwotICAgIHBzYV9nZXQoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsIGludmFsaWRfbXNnKTsKKyAgICAvKiBwc2FfZ2V0IHdpdGggaW52YWxpZCBtc2cgcG9pbnRlciwgY2FsbCBzaG91bGQgcGFuaWMgKi8KKyAgICBwc2EtPmdldChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgaW52YWxpZF9tc2cpOwogCiAgICAgLyogc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCi0gICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLAotICAgICAgICAgICAgICJcdHBzYV9nZXQgd2l0aCBpbnZhbGlkIG1zZyBwb2ludGVyIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2Nlc3NlZFxuIiwgMCk7CisgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwKKyAgICAgICAgICAgICAiXHRwc2FfZ2V0IHdpdGggaW52YWxpZCBtc2cgcG9pbnRlciBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZWVkXG4iLCAwKTsKIAogICAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLwotICAgIGlmICh2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKICAgICB7Ci0gICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CiAgICAgfQogCiAgICAgLyogUmVqZWN0IHRoZSBjb25uZWN0aW9uICovCi0gICAgcHNhX3JlcGx5KGludmFsaWRfbXNnLT5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgIHBzYS0+cmVwbHkoaW52YWxpZF9tc2ctPmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ4L3Rlc3RfaTA0OC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDgvdGVzdF9pMDQ4LmMKaW5kZXggNzE4MjM2Zi4uN2U4YmI2ZCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDgvdGVzdF9pMDQ4LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDgvdGVzdF9pMDQ4LmMKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwNDguaCIKQEAgLTQyLDE4ICs0MiwyOCBAQAogICAgcHNhX2ludmVjICAgICAgICAgICAgICAgKmludmFsaWRfaW52ZWMgPSBOVUxMOwogCiAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsCi0gICAgICAgICAgICAiW0NoZWNrMV0gVGVzdCBwc2FfY2FsbCB3aXRoIGludmFsaWQgYWRkcmVzcyBmb3IgaW5fdmVjXG4iLCAwKTsKKyAgICAgICAgICAgICJbQ2hlY2sgMV0gVGVzdCBwc2FfY2FsbCB3aXRoIGludmFsaWQgYWRkcmVzcyBmb3IgaW5fdmVjXG4iLCAwKTsKIAotICAgLyogVGVzdCBpcyB0YXJnZXRpbmcgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCBpdCB3aWxsIGV4cGVjdCBhbiBlcnJvciByZWNvdmVyeShyZWJvb3QpCi0gICAgKiB0byBoYXBwZW4uIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgd2FzIGludGVuZGVkIGFzIHBlciB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgLyoKKyAgICAqIFRoaXMgdGVzdCBjaGVja3MgZm9yIHRoZSBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiBmb3IgdGhlIFBTQSBBUEkuIEFQSSdzIHJlc3BvbmQgdG8KKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY291bGQgYmUgZWl0aGVyIHRvIHJldHVybiBhcHByb3ByaWF0ZSBzdGF0dXMgY29kZSBvciBwYW5pYyB0aGUgY2FsbGVyLgorICAgICogV2hlbiBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWNzLCB0aGUgU1BFIGNhbm5vdCBjb250aW51ZSBub3JtYWwgZXhlY3V0aW9uLCBhcyBkZWZpbmVkCisgICAgKiBpbiB0aGlzIHNwZWNpZmljYXRpb24uIFRoZSBiZWhhdmlvciBvZiB0aGUgU1BNIGZvbGxvd2luZyBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWMgaXMKKyAgICAqIElNUExFTUVOVEFUSU9OIERFRklORUQtIEFybSByZWNvbW1lbmRzIHRoYXQgdGhlIFNQTSBjYXVzZXMgdGhlIHN5c3RlbSB0byByZXN0YXJ0IGluCisgICAgKiB0aGlzIHNpdHVhdGlvbi4gUmVmZXIgUFNBLUZGIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhbmljLgorICAgICogRm9yIHRoZSBjYXNlcyB3aGVyZSwgU1BNIGNhbm5vdCBjYXBhYmxlIHRvIHJlYm9vdCB0aGUgc3lzdGVtIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBzZXQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4gVGhpcyB3aWxsCisgICAgKiB0ZXN0cyBjb250aW51aXR5IGFuZCBhYmxlIHRvIGp1bXAgdG8gbmV4dCB0ZXN0cy4gVGhlcmVmb3JlLCBlYWNoIHRlc3Qgd2hvIGNoZWNrcyBmb3IKKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uLCBleHBlY3RzIHN5c3RlbSB0byBnZXQgcmVzZXQgZWl0aGVyIGJ5IFNQTSBvciB3YXRjaGRvZyBzZXQgYnkKKyAgICAqIHRoZSB0ZXN0IGhhcm5lc3MgZnVuY3Rpb24uCisgICAgKgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKgorICAgICogVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCBhcyBpbnRlbmRlZCBieSB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAogICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCiAgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQogICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgotICAgICoKLSAgICAqIE5vdGU6IElmIFNQTSBpcyBub3QgY2FwYWJsZSBvZiByZWJvb3RpbmcgKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93bikgaW4gZmF0YWwgZXJyb3IgY29uZGl0aW9uLAotICAgICogYSB3YXRjaGRvZyB0aW1lciBlbmFibGVkIGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuCi0gICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKLSAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KICAgICAqLwogCiAgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpOwpAQCAtNjQsMTIgKzc0LDE1IEBACiAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRF9IQU5ETEU7CiAgICB9CiAKLSAgIC8qIFNlbGVjdGlvbiBvZiBpbnZhbGlkIGludmVjIHBvaW50ZXI6CisgICAvKgorICAgICogU2VsZWN0aW9uIG9mIGludmFsaWQgaW52ZWMgcG9pbnRlcjoKKyAgICAqCiAgICAgKiBpZiBjYWxsZXIgPT0gTk9OU0VDVVJFCiAgICAgKiAgICAvLyBQU0EgUm9UIHBvaW50ZXIKICAgICAqICAgIGludmVjX3BvaW50ZXIgPSBkcml2ZXJfbW1pb19yZWdpb25fYmFzZTsKICAgICAqIGVsc2UKICAgICAqICAgIGlmIChJU09MQVRJT05fTEVWRUwgPiAxKQorICAgICogICAgICAgLy8gUFNBIFJvVCBwb2ludGVyCiAgICAgKiAgICAgICBpbnZlY19wb2ludGVyID0gZHJpdmVyX21taW9fcmVnaW9uX2Jhc2U7CiAgICAgKiAgICBlbHNlCiAgICAgKiAgICAgICBpbnZlY19wb2ludGVyID0gTlVMTDsKQEAgLTExNSw4ICsxMjgsMTkgQEAKICAgIC8qIFRlc3QgY2hlY2stIHBzYV9jYWxsIHdpdGggaW52YWxpZCBhZGRyZXNzIGZvciBpbl92ZWMgKi8KICAgIHN0YXR1c19vZl9jYWxsID0gIHBzYS0+Y2FsbChoYW5kbGUsIGludmFsaWRfaW52ZWMsIDEsIE5VTEwsIDApOwogCi0gICAvKiBFeHBlY3RhdGlvbiBpcyBwc2FfY2FsbCBzaG91bGQgaGFuZyBhbmQgY29udHJvbCBzaG91bGRuJ3QgaGF2ZSBjb21lIGhlcmUgKi8KLSAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdHBzYV9jYWxsIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2Nlc3NlZFxuIiwgMCk7CisgICAvKgorICAgICogSWYgdGhlIGNhbGxlciBpcyBpbiB0aGUgTlNQRSwgaXQgaXMgSU1QTEVNRU5UQVRJT04gREVGSU5FRCB3aGV0aGVyCisgICAgKiBhIFBST0dSQU1NRVIgRVJST1Igd2lsbCBwYW5pYyBvciByZXR1cm4gUFNBX0VSUk9SX1BST0dSQU1NRVJfRVJST1IuCisgICAgKiBGb3IgU1BFIGNhbGxlciwgaXQgbXVzdCBwYW5pYy4KKyAgICAqLworICAgaWYgKGNhbGxlciA9PSBOT05TRUNVUkUgJiYgc3RhdHVzX29mX2NhbGwgPT0gUFNBX0VSUk9SX1BST0dSQU1NRVJfRVJST1IpCisgICB7CisgICAgICAgcHNhLT5jbG9zZShoYW5kbGUpOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICB9CisKKyAgIC8qIElmIFBST0dSQU1NRVIgRVJST1IgcmVzdWx0cyBpbnRvIHBhbmljIHRoZW4gY29udHJvbCBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KKyAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdHBzYV9jYWxsIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2NlZWRcbiIsIDApOwogCiAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KICAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKQEAgLTEyNyw2ICsxNTEsNSBAQAogCiAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CiAgICBwc2EtPmNsb3NlKGhhbmRsZSk7Ci0gICAodm9pZCkoc3RhdHVzX29mX2NhbGwpOwogICAgcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ4L3Rlc3Rfc3VwcF9pMDQ4LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0OC90ZXN0X3N1cHBfaTA0OC5jCmluZGV4IDUzODQ5OTAuLjUxYjExZGEgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ4L3Rlc3Rfc3VwcF9pMDQ4LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDgvdGVzdF9zdXBwX2kwNDguYwpAQCAtMTUsOCArMTUsMTMgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKIAogaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfaW52ZWNfcG9pbnRlcih2b2lkKTsKIApAQCAtMzAsMjMgKzM1LDQ1IEBACiB7CiAgICAgaW50MzJfdCAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKICAgICBwc2FfbXNnX3QgICAgICAgbXNnID0gezB9OworICAgIHBzYV9zaWduYWxfdCAgICBzaWduYWxzOwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAKLSAgICB2YWxfcHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOword2FpdDoKKyAgICBzaWduYWxzID0gcHNhLT53YWl0KFBTQV9XQUlUX0FOWSwgUFNBX0JMT0NLKTsKKyAgICBpZiAoc2lnbmFscyAmIFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHKQorICAgIHsKKyAgICAgICAgaWYgKHBzYS0+Z2V0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSAhPSBQU0FfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgZ290byB3YWl0OworICAgICAgICB9CiAKLSAgICAvKiBDb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLwotICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0Q29udHJvbCBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmVcbiIsIDApOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCAtMik7CisgICAgICAgIGlmIChtc2cudHlwZSA9PSBQU0FfSVBDX0NBTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCisgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDb250cm9sIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZVxuIiwgMCk7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIC0yKTsKKyAgICAgICAgICAgIHZhbC0+cHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgICAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobXNnLnR5cGUgPT0gUFNBX0lQQ19ESVNDT05ORUNUKQorICAgICAgICB7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0cHNhX3dhaXQgcmV0dXJuZWQgd2l0aCBpbnZhbGlkIHNpZ25hbCB2YWx1ZSA9IDB4JXhcbiIsIHNpZ25hbHMpOworICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgICB9CiAKLSAgICB2YWxfcHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7Ci0gICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKKyAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ5L3Rlc3RfaTA0OS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDkvdGVzdF9pMDQ5LmMKaW5kZXggMDE5OTlkZi4uZjNmMTY2NCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDkvdGVzdF9pMDQ5LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDkvdGVzdF9pMDQ5LmMKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwNDkuaCIKQEAgLTQyLDE4ICs0MiwyOCBAQAogICAgcHNhX291dHZlYyAgICAgICAgICAgICAgICppbnZhbGlkX291dHZlYyA9IE5VTEw7CiAKICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwKLSAgICAgICAgICAgICJbQ2hlY2sxXSBUZXN0IHBzYV9jYWxsIHdpdGggaW52YWxpZCBhZGRyZXNzIGZvciBvdXR2ZWNcbiIsIDApOworICAgICAgICAgICAgIltDaGVjayAxXSBUZXN0IHBzYV9jYWxsIHdpdGggaW52YWxpZCBhZGRyZXNzIGZvciBvdXR2ZWNcbiIsIDApOwogCi0gICAvKiBUZXN0IGlzIHRhcmdldGluZyBmYXRhbCBlcnJvciBjb25kaXRpb24gYW5kIGl0IHdpbGwgZXhwZWN0IGFuIGVycm9yIHJlY292ZXJ5KHJlYm9vdCkKLSAgICAqIHRvIGhhcHBlbi4gVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCB3YXMgaW50ZW5kZWQgYXMgcGVyIHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCisgICAvKgorICAgICogVGhpcyB0ZXN0IGNoZWNrcyBmb3IgdGhlIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uIGZvciB0aGUgUFNBIEFQSS4gQVBJJ3MgcmVzcG9uZCB0bworICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb3VsZCBiZSBlaXRoZXIgdG8gcmV0dXJuIGFwcHJvcHJpYXRlIHN0YXR1cyBjb2RlIG9yIHBhbmljIHRoZSBjYWxsZXIuCisgICAgKiBXaGVuIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pY3MsIHRoZSBTUEUgY2Fubm90IGNvbnRpbnVlIG5vcm1hbCBleGVjdXRpb24sIGFzIGRlZmluZWQKKyAgICAqIGluIHRoaXMgc3BlY2lmaWNhdGlvbi4gVGhlIGJlaGF2aW9yIG9mIHRoZSBTUE0gZm9sbG93aW5nIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pYyBpcworICAgICogSU1QTEVNRU5UQVRJT04gREVGSU5FRC0gQXJtIHJlY29tbWVuZHMgdGhhdCB0aGUgU1BNIGNhdXNlcyB0aGUgc3lzdGVtIHRvIHJlc3RhcnQgaW4KKyAgICAqIHRoaXMgc2l0dWF0aW9uLiBSZWZlciBQU0EtRkYgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFuaWMuCisgICAgKiBGb3IgdGhlIGNhc2VzIHdoZXJlLCBTUE0gY2Fubm90IGNhcGFibGUgdG8gcmVib290IHRoZSBzeXN0ZW0gKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93biksCisgICAgKiBhIHdhdGNoZG9nIHRpbWVyIHNldCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LiBUaGlzIHdpbGwKKyAgICAqIHRlc3RzIGNvbnRpbnVpdHkgYW5kIGFibGUgdG8ganVtcCB0byBuZXh0IHRlc3RzLiBUaGVyZWZvcmUsIGVhY2ggdGVzdCB3aG8gY2hlY2tzIGZvcgorICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24sIGV4cGVjdHMgc3lzdGVtIHRvIGdldCByZXNldCBlaXRoZXIgYnkgU1BNIG9yIHdhdGNoZG9nIHNldCBieQorICAgICogdGhlIHRlc3QgaGFybmVzcyBmdW5jdGlvbi4KKyAgICAqCisgICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKKyAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KKyAgICAqCisgICAgKiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIGFzIGludGVuZGVkIGJ5IHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCiAgICAgKiBkdWUgdG8gb3RoZXIgcmVhc29ucywgdGVzdCBpcyBzZXR0aW5nIGEgYm9vdCBzaWduYXR1cmUgaW50byBub24tdm9sYXRpbGUgbWVtb3J5IGJlZm9yZSBhbmQKICAgICAqIGFmdGVyIHRhcmdldGVkIHRlc3QgY2hlY2suIEFmdGVyIGEgcmVib290LCB0aGVzZSBib290IHNpZ25hdHVyZXMgYXJlIGJlaW5nIHJlYWQgYnkgdGhlCiAgICAgKiBWQUwgQVBJcyB0byBkZWNpZGUgdGVzdCBzdGF0dXMuCi0gICAgKgotICAgICogTm90ZTogSWYgU1BNIGlzIG5vdCBjYXBhYmxlIG9mIHJlYm9vdGluZyAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSBpbiBmYXRhbCBlcnJvciBjb25kaXRpb24sCi0gICAgKiBhIHdhdGNoZG9nIHRpbWVyIGVuYWJsZWQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4KLSAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZwotICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgogICAgICovCiAKICAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSk7CkBAIC02NCwxMiArNzQsMTUgQEAKICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKICAgIH0KIAotICAgLyogU2VsZWN0aW9uIG9mIGludmFsaWQgb3V0dmVjIHBvaW50ZXI6CisgICAvKgorICAgICogU2VsZWN0aW9uIG9mIGludmFsaWQgb3V0dmVjIHBvaW50ZXI6CisgICAgKgogICAgICogaWYgY2FsbGVyID09IE5PTlNFQ1VSRQogICAgICogICAgLy8gUFNBIFJvVCBwb2ludGVyCiAgICAgKiAgICBvdXR2ZWNfcG9pbnRlciA9IGRyaXZlcl9tbWlvX3JlZ2lvbl9iYXNlOwogICAgICogZWxzZQogICAgICogICAgaWYgKElTT0xBVElPTl9MRVZFTCA+IDEpCisgICAgKiAgICAgICAvLyBQU0EgUm9UIHBvaW50ZXIKICAgICAqICAgICAgIG91dHZlY19wb2ludGVyID0gZHJpdmVyX21taW9fcmVnaW9uX2Jhc2U7CiAgICAgKiAgICBlbHNlCiAgICAgKiAgICAgICBvdXR2ZWNfcG9pbnRlciA9IE5VTEw7CkBAIC0xMTUsOCArMTI4LDE5IEBACiAgICAvKiBUZXN0IGNoZWNrLSBwc2FfY2FsbCB3aXRoIGludmFsaWQgYWRkcmVzcyBmb3Igb3V0dmVjICovCiAgICBzdGF0dXNfb2ZfY2FsbCA9ICBwc2EtPmNhbGwoaGFuZGxlLCBOVUxMLCAwLCBpbnZhbGlkX291dHZlYywgMSk7CiAKLSAgIC8qIEV4cGVjdGF0aW9uIGlzIHBzYV9jYWxsIHNob3VsZCBoYW5nIGFuZCBjb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLwotICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0cHNhX2NhbGwgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2Vzc2VkXG4iLCAwKTsKKyAgIC8qCisgICAgKiBJZiB0aGUgY2FsbGVyIGlzIGluIHRoZSBOU1BFLCBpdCBpcyBJTVBMRU1FTlRBVElPTiBERUZJTkVEIHdoZXRoZXIKKyAgICAqIGEgUFJPR1JBTU1FUiBFUlJPUiB3aWxsIHBhbmljIG9yIHJldHVybiBQU0FfRVJST1JfUFJPR1JBTU1FUl9FUlJPUi4KKyAgICAqIEZvciBTUEUgY2FsbGVyLCBpdCBtdXN0IHBhbmljLgorICAgICovCisgICBpZiAoY2FsbGVyID09IE5PTlNFQ1VSRSAmJiBzdGF0dXNfb2ZfY2FsbCA9PSBQU0FfRVJST1JfUFJPR1JBTU1FUl9FUlJPUikKKyAgIHsKKyAgICAgICBwc2EtPmNsb3NlKGhhbmRsZSk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKKyAgIH0KKworICAgLyogSWYgUFJPR1JBTU1FUiBFUlJPUiByZXN1bHRzIGludG8gcGFuaWMgdGhlbiBjb250cm9sIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZSAqLworICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0cHNhX2NhbGwgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2VlZFxuIiwgMCk7CiAKICAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLwogICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQpAQCAtMTI3LDYgKzE1MSw1IEBACiAKICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKICAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKLSAgICh2b2lkKShzdGF0dXNfb2ZfY2FsbCk7CiAgICByZXR1cm4gc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDkvdGVzdF9zdXBwX2kwNDkuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDQ5L3Rlc3Rfc3VwcF9pMDQ5LmMKaW5kZXggNzNlNWQ2OC4uMjNiNTJiOCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNDkvdGVzdF9zdXBwX2kwNDkuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA0OS90ZXN0X3N1cHBfaTA0OS5jCkBAIC0xNSw4ICsxNSwxMyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KIAotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKworI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfc2VydmVyX3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfc2VydmVyX3NwKQorZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOwogCiBpbnQzMl90IHNlcnZlcl90ZXN0X3BzYV9jYWxsX3dpdGhfaW52YWxpZF9vdXR2ZWNfcG9pbnRlcih2b2lkKTsKIApAQCAtMzAsMjMgKzM1LDQ1IEBACiB7CiAgICAgaW50MzJfdCAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKICAgICBwc2FfbXNnX3QgICAgICAgbXNnID0gezB9OworICAgIHBzYV9zaWduYWxfdCAgICBzaWduYWxzOwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAKLSAgICB2YWxfcHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOword2FpdDoKKyAgICBzaWduYWxzID0gcHNhLT53YWl0KFBTQV9XQUlUX0FOWSwgUFNBX0JMT0NLKTsKKyAgICBpZiAoc2lnbmFscyAmIFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHKQorICAgIHsKKyAgICAgICAgaWYgKHBzYS0+Z2V0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSAhPSBQU0FfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgZ290byB3YWl0OworICAgICAgICB9CiAKLSAgICAvKiBDb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLwotICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0Q29udHJvbCBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmVcbiIsIDApOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCAtMik7CisgICAgICAgIGlmIChtc2cudHlwZSA9PSBQU0FfSVBDX0NBTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCisgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDb250cm9sIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZVxuIiwgMCk7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIC0yKTsKKyAgICAgICAgICAgIHZhbC0+cHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgICAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobXNnLnR5cGUgPT0gUFNBX0lQQ19ESVNDT05ORUNUKQorICAgICAgICB7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0cHNhX3dhaXQgcmV0dXJuZWQgd2l0aCBpbnZhbGlkIHNpZ25hbCB2YWx1ZSA9IDB4JXhcbiIsIHNpZ25hbHMpOworICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgICB9CiAKLSAgICB2YWxfcHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7Ci0gICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKKyAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDUwL3Rlc3RfaTA1MC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTAvdGVzdF9pMDUwLmMKaW5kZXggYmY1ZmQyMS4uOWY2MTZiMSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTAvdGVzdF9pMDUwLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTAvdGVzdF9pMDUwLmMKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwNTAuaCIKQEAgLTQyLDE4ICs0MiwyOCBAQAogICAgYWRkcl90ICAgICAgICAgICAgICAgICAgKmludmFsaWRfYmFzZSA9IE5VTEw7CiAKICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwKLSAgICAgICAgICAgICJbQ2hlY2sxXSBUZXN0IHBzYV9jYWxsIHdpdGggaW52YWxpZCBwc2FfaW52ZWMuYmFzZVxuIiwgMCk7CisgICAgICAgICAgICAiW0NoZWNrIDFdIFRlc3QgcHNhX2NhbGwgd2l0aCBpbnZhbGlkIHBzYV9pbnZlYy5iYXNlXG4iLCAwKTsKIAotICAgLyogVGVzdCBpcyB0YXJnZXRpbmcgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCBpdCB3aWxsIGV4cGVjdCBhbiBlcnJvciByZWNvdmVyeShyZWJvb3QpCi0gICAgKiB0byBoYXBwZW4uIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgd2FzIGludGVuZGVkIGFzIHBlciB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgLyoKKyAgICAqIFRoaXMgdGVzdCBjaGVja3MgZm9yIHRoZSBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiBmb3IgdGhlIFBTQSBBUEkuIEFQSSdzIHJlc3BvbmQgdG8KKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY291bGQgYmUgZWl0aGVyIHRvIHJldHVybiBhcHByb3ByaWF0ZSBzdGF0dXMgY29kZSBvciBwYW5pYyB0aGUgY2FsbGVyLgorICAgICogV2hlbiBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWNzLCB0aGUgU1BFIGNhbm5vdCBjb250aW51ZSBub3JtYWwgZXhlY3V0aW9uLCBhcyBkZWZpbmVkCisgICAgKiBpbiB0aGlzIHNwZWNpZmljYXRpb24uIFRoZSBiZWhhdmlvciBvZiB0aGUgU1BNIGZvbGxvd2luZyBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWMgaXMKKyAgICAqIElNUExFTUVOVEFUSU9OIERFRklORUQtIEFybSByZWNvbW1lbmRzIHRoYXQgdGhlIFNQTSBjYXVzZXMgdGhlIHN5c3RlbSB0byByZXN0YXJ0IGluCisgICAgKiB0aGlzIHNpdHVhdGlvbi4gUmVmZXIgUFNBLUZGIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhbmljLgorICAgICogRm9yIHRoZSBjYXNlcyB3aGVyZSwgU1BNIGNhbm5vdCBjYXBhYmxlIHRvIHJlYm9vdCB0aGUgc3lzdGVtIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBzZXQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4gVGhpcyB3aWxsCisgICAgKiB0ZXN0cyBjb250aW51aXR5IGFuZCBhYmxlIHRvIGp1bXAgdG8gbmV4dCB0ZXN0cy4gVGhlcmVmb3JlLCBlYWNoIHRlc3Qgd2hvIGNoZWNrcyBmb3IKKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uLCBleHBlY3RzIHN5c3RlbSB0byBnZXQgcmVzZXQgZWl0aGVyIGJ5IFNQTSBvciB3YXRjaGRvZyBzZXQgYnkKKyAgICAqIHRoZSB0ZXN0IGhhcm5lc3MgZnVuY3Rpb24uCisgICAgKgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKgorICAgICogVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCBhcyBpbnRlbmRlZCBieSB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAogICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCiAgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQogICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgotICAgICoKLSAgICAqIE5vdGU6IElmIFNQTSBpcyBub3QgY2FwYWJsZSBvZiByZWJvb3RpbmcgKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93bikgaW4gZmF0YWwgZXJyb3IgY29uZGl0aW9uLAotICAgICogYSB3YXRjaGRvZyB0aW1lciBlbmFibGVkIGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuCi0gICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKLSAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KICAgICAqLwogCiAgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpOwpAQCAtNjQsMTIgKzc0LDE1IEBACiAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRF9IQU5ETEU7CiAgICB9CiAKLSAgIC8qIFNlbGVjdGlvbiBvZiBpbnZhbGlkIGludmVjIHBvaW50ZXI6CisgICAvKgorICAgICogU2VsZWN0aW9uIG9mIGludmFsaWQgaW52ZWMgcG9pbnRlcjoKKyAgICAqCiAgICAgKiBpZiBjYWxsZXIgPT0gTk9OU0VDVVJFCiAgICAgKiAgICAvLyBQU0EgUm9UIHBvaW50ZXIKICAgICAqICAgIGludmFsaWRfYmFzZSA9IGRyaXZlcl9tbWlvX3JlZ2lvbl9iYXNlOwogICAgICogZWxzZQogICAgICogICAgaWYgKElTT0xBVElPTl9MRVZFTCA+IDEpCisgICAgKiAgICAgICAvLyBQU0EgUm9UIHBvaW50ZXIKICAgICAqICAgICAgIGludmFsaWRfYmFzZSA9IGRyaXZlcl9tbWlvX3JlZ2lvbl9iYXNlOwogICAgICogICAgZWxzZQogICAgICogICAgICAgaW52YWxpZF9iYXNlID0gTlVMTDsKQEAgLTExNyw4ICsxMzAsMTkgQEAKICAgIC8qIFRlc3QgY2hlY2stIHBzYV9jYWxsIHdpdGggaW52YWxpZCBhZGRyZXNzIGZvciBwc2FfaW52ZWMuYmFzZSAqLwogICAgc3RhdHVzX29mX2NhbGwgPSAgcHNhLT5jYWxsKGhhbmRsZSwgaW52ZWMsIDEsIE5VTEwsIDApOwogCi0gICAvKiBFeHBlY3RhdGlvbiBpcyBwc2FfY2FsbCBzaG91bGQgaGFuZyBhbmQgY29udHJvbCBzaG91bGRuJ3QgaGF2ZSBjb21lIGhlcmUgKi8KLSAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdHBzYV9jYWxsIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2Nlc3NlZFxuIiwgMCk7CisgICAvKgorICAgICogSWYgdGhlIGNhbGxlciBpcyBpbiB0aGUgTlNQRSwgaXQgaXMgSU1QTEVNRU5UQVRJT04gREVGSU5FRCB3aGV0aGVyCisgICAgKiBhIFBST0dSQU1NRVIgRVJST1Igd2lsbCBwYW5pYyBvciByZXR1cm4gUFNBX0VSUk9SX1BST0dSQU1NRVJfRVJST1IuCisgICAgKiBGb3IgU1BFIGNhbGxlciwgaXQgbXVzdCBwYW5pYy4KKyAgICAqLworICAgaWYgKGNhbGxlciA9PSBOT05TRUNVUkUgJiYgc3RhdHVzX29mX2NhbGwgPT0gUFNBX0VSUk9SX1BST0dSQU1NRVJfRVJST1IpCisgICB7CisgICAgICAgcHNhLT5jbG9zZShoYW5kbGUpOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICB9CisKKyAgIC8qIElmIFBST0dSQU1NRVIgRVJST1IgcmVzdWx0cyBpbnRvIHBhbmljIHRoZW4gY29udHJvbCBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KKyAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdHBzYV9jYWxsIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2NlZWRcbiIsIDApOwogCiAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KICAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKQEAgLTEyOSw2ICsxNTMsNSBAQAogCiAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CiAgICBwc2EtPmNsb3NlKGhhbmRsZSk7Ci0gICAodm9pZCkoc3RhdHVzX29mX2NhbGwpOwogICAgcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDUwL3Rlc3Rfc3VwcF9pMDUwLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1MC90ZXN0X3N1cHBfaTA1MC5jCmluZGV4IGUxYjI5NzkuLjljMDk0NDUgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDUwL3Rlc3Rfc3VwcF9pMDUwLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTAvdGVzdF9zdXBwX2kwNTAuYwpAQCAtMTUsOCArMTUsMTMgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKIAogaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfY2FsbF93aXRoX2ludmFsaWRfaW52ZWNfYmFzZSh2b2lkKTsKIApAQCAtMzAsMjMgKzM1LDQ1IEBACiB7CiAgICAgaW50MzJfdCAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKICAgICBwc2FfbXNnX3QgICAgICAgbXNnID0gezB9OworICAgIHBzYV9zaWduYWxfdCAgICBzaWduYWxzOwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAKLSAgICB2YWxfcHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOword2FpdDoKKyAgICBzaWduYWxzID0gcHNhLT53YWl0KFBTQV9XQUlUX0FOWSwgUFNBX0JMT0NLKTsKKyAgICBpZiAoc2lnbmFscyAmIFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHKQorICAgIHsKKyAgICAgICAgaWYgKHBzYS0+Z2V0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSAhPSBQU0FfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgZ290byB3YWl0OworICAgICAgICB9CiAKLSAgICAvKiBDb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLwotICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0Q29udHJvbCBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmVcbiIsIDApOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCAtMik7CisgICAgICAgIGlmIChtc2cudHlwZSA9PSBQU0FfSVBDX0NBTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCisgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDb250cm9sIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZVxuIiwgMCk7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIC0yKTsKKyAgICAgICAgICAgIHZhbC0+cHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgICAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobXNnLnR5cGUgPT0gUFNBX0lQQ19ESVNDT05ORUNUKQorICAgICAgICB7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0cHNhX3dhaXQgcmV0dXJuZWQgd2l0aCBpbnZhbGlkIHNpZ25hbCB2YWx1ZSA9IDB4JXhcbiIsIHNpZ25hbHMpOworICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgICB9CiAKLSAgICB2YWxfcHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7Ci0gICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKKyAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDUxL3Rlc3RfaTA1MS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTEvdGVzdF9pMDUxLmMKaW5kZXggM2I0YTcyNi4uNmExZjg3NSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTEvdGVzdF9pMDUxLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTEvdGVzdF9pMDUxLmMKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwNTEuaCIKQEAgLTQyLDE4ICs0MiwyOCBAQAogICAgYWRkcl90ICAgICAgICAgICAgICAgICAgKmludmFsaWRfYmFzZSA9IE5VTEw7CiAKICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwKLSAgICAgICAgICAgICJbQ2hlY2sxXSBUZXN0IHBzYV9jYWxsIHdpdGggaW52YWxpZCBwc2Ffb3V0dmVjLmJhc2VcbiIsIDApOworICAgICAgICAgICAgIltDaGVjayAxXSBUZXN0IHBzYV9jYWxsIHdpdGggaW52YWxpZCBwc2Ffb3V0dmVjLmJhc2VcbiIsIDApOwogCi0gICAvKiBUZXN0IGlzIHRhcmdldGluZyBmYXRhbCBlcnJvciBjb25kaXRpb24gYW5kIGl0IHdpbGwgZXhwZWN0IGFuIGVycm9yIHJlY292ZXJ5KHJlYm9vdCkKLSAgICAqIHRvIGhhcHBlbi4gVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCB3YXMgaW50ZW5kZWQgYXMgcGVyIHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCisgICAvKgorICAgICogVGhpcyB0ZXN0IGNoZWNrcyBmb3IgdGhlIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uIGZvciB0aGUgUFNBIEFQSS4gQVBJJ3MgcmVzcG9uZCB0bworICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb3VsZCBiZSBlaXRoZXIgdG8gcmV0dXJuIGFwcHJvcHJpYXRlIHN0YXR1cyBjb2RlIG9yIHBhbmljIHRoZSBjYWxsZXIuCisgICAgKiBXaGVuIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pY3MsIHRoZSBTUEUgY2Fubm90IGNvbnRpbnVlIG5vcm1hbCBleGVjdXRpb24sIGFzIGRlZmluZWQKKyAgICAqIGluIHRoaXMgc3BlY2lmaWNhdGlvbi4gVGhlIGJlaGF2aW9yIG9mIHRoZSBTUE0gZm9sbG93aW5nIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pYyBpcworICAgICogSU1QTEVNRU5UQVRJT04gREVGSU5FRC0gQXJtIHJlY29tbWVuZHMgdGhhdCB0aGUgU1BNIGNhdXNlcyB0aGUgc3lzdGVtIHRvIHJlc3RhcnQgaW4KKyAgICAqIHRoaXMgc2l0dWF0aW9uLiBSZWZlciBQU0EtRkYgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFuaWMuCisgICAgKiBGb3IgdGhlIGNhc2VzIHdoZXJlLCBTUE0gY2Fubm90IGNhcGFibGUgdG8gcmVib290IHRoZSBzeXN0ZW0gKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93biksCisgICAgKiBhIHdhdGNoZG9nIHRpbWVyIHNldCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LiBUaGlzIHdpbGwKKyAgICAqIHRlc3RzIGNvbnRpbnVpdHkgYW5kIGFibGUgdG8ganVtcCB0byBuZXh0IHRlc3RzLiBUaGVyZWZvcmUsIGVhY2ggdGVzdCB3aG8gY2hlY2tzIGZvcgorICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24sIGV4cGVjdHMgc3lzdGVtIHRvIGdldCByZXNldCBlaXRoZXIgYnkgU1BNIG9yIHdhdGNoZG9nIHNldCBieQorICAgICogdGhlIHRlc3QgaGFybmVzcyBmdW5jdGlvbi4KKyAgICAqCisgICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKKyAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KKyAgICAqCisgICAgKiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIGFzIGludGVuZGVkIGJ5IHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCiAgICAgKiBkdWUgdG8gb3RoZXIgcmVhc29ucywgdGVzdCBpcyBzZXR0aW5nIGEgYm9vdCBzaWduYXR1cmUgaW50byBub24tdm9sYXRpbGUgbWVtb3J5IGJlZm9yZSBhbmQKICAgICAqIGFmdGVyIHRhcmdldGVkIHRlc3QgY2hlY2suIEFmdGVyIGEgcmVib290LCB0aGVzZSBib290IHNpZ25hdHVyZXMgYXJlIGJlaW5nIHJlYWQgYnkgdGhlCiAgICAgKiBWQUwgQVBJcyB0byBkZWNpZGUgdGVzdCBzdGF0dXMuCi0gICAgKgotICAgICogTm90ZTogSWYgU1BNIGlzIG5vdCBjYXBhYmxlIG9mIHJlYm9vdGluZyAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSBpbiBmYXRhbCBlcnJvciBjb25kaXRpb24sCi0gICAgKiBhIHdhdGNoZG9nIHRpbWVyIGVuYWJsZWQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4KLSAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZwotICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgogICAgICovCiAKICAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSk7CkBAIC02NCwxMiArNzQsMTUgQEAKICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKICAgIH0KIAotICAgLyogU2VsZWN0aW9uIG9mIGludmFsaWQgb3V0dmVjIHBvaW50ZXI6CisgICAvKgorICAgICogU2VsZWN0aW9uIG9mIGludmFsaWQgb3V0dmVjIHBvaW50ZXI6CisgICAgKgogICAgICogaWYgY2FsbGVyID09IE5PTlNFQ1VSRQogICAgICogICAgLy8gUFNBIFJvVCBwb2ludGVyCiAgICAgKiAgICBpbnZhbGlkX2Jhc2UgPSBkcml2ZXJfbW1pb19yZWdpb25fYmFzZTsKICAgICAqIGVsc2UKICAgICAqICAgIGlmIChJU09MQVRJT05fTEVWRUwgPiAxKQorICAgICogICAgICAvLyBQU0EgUm9UIHBvaW50ZXIKICAgICAqICAgICAgIGludmFsaWRfYmFzZSA9IGRyaXZlcl9tbWlvX3JlZ2lvbl9iYXNlOwogICAgICogICAgZWxzZQogICAgICogICAgICAgaW52YWxpZF9iYXNlID0gTlVMTDsKQEAgLTExNSwxMCArMTI4LDIxIEBACiAgICBwc2Ffb3V0dmVjIG91dHZlY1sxXSA9IHt7aW52YWxpZF9iYXNlLCBzaXplb2YoYWRkcl90KX19OwogCiAgICAvKiBUZXN0IGNoZWNrLSBwc2FfY2FsbCB3aXRoIGludmFsaWQgYWRkcmVzcyBmb3IgcHNhX291dHZlYy5iYXNlICovCi0gICBzdGF0dXNfb2ZfY2FsbCA9ICBwc2EtPmNhbGwoaGFuZGxlLCBOVUxMLCAwLCBvdXR2ZWMsIDApOworICAgc3RhdHVzX29mX2NhbGwgPSAgcHNhLT5jYWxsKGhhbmRsZSwgTlVMTCwgMCwgb3V0dmVjLCAxKTsKIAotICAgLyogRXhwZWN0YXRpb24gaXMgcHNhX2NhbGwgc2hvdWxkIGhhbmcgYW5kIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCi0gICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRwc2FfY2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgLyoKKyAgICAqIElmIHRoZSBjYWxsZXIgaXMgaW4gdGhlIE5TUEUsIGl0IGlzIElNUExFTUVOVEFUSU9OIERFRklORUQgd2hldGhlcgorICAgICogYSBQUk9HUkFNTUVSIEVSUk9SIHdpbGwgcGFuaWMgb3IgcmV0dXJuIFBTQV9FUlJPUl9QUk9HUkFNTUVSX0VSUk9SLgorICAgICogRm9yIFNQRSBjYWxsZXIsIGl0IG11c3QgcGFuaWMuCisgICAgKi8KKyAgIGlmIChjYWxsZXIgPT0gTk9OU0VDVVJFICYmIHN0YXR1c19vZl9jYWxsID09IFBTQV9FUlJPUl9QUk9HUkFNTUVSX0VSUk9SKQorICAgeworICAgICAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworICAgfQorCisgICAvKiBJZiBQUk9HUkFNTUVSIEVSUk9SIHJlc3VsdHMgaW50byBwYW5pYyB0aGVuIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRwc2FfY2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZWVkXG4iLCAwKTsKIAogICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCiAgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCkBAIC0xMjksNiArMTUzLDUgQEAKIAogICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwogICAgcHNhLT5jbG9zZShoYW5kbGUpOwotICAgKHZvaWQpKHN0YXR1c19vZl9jYWxsKTsKICAgIHJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1MS90ZXN0X3N1cHBfaTA1MS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTEvdGVzdF9zdXBwX2kwNTEuYwppbmRleCA4YWNiMzhhLi4wZDNiZTBiIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1MS90ZXN0X3N1cHBfaTA1MS5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDUxL3Rlc3Rfc3VwcF9pMDUxLmMKQEAgLTE1LDggKzE1LDEzIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CiAKIGludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX2NhbGxfd2l0aF9pbnZhbGlkX291dHZlY19iYXNlKHZvaWQpOwogCkBAIC0zMCwyMyArMzUsNDUgQEAKIHsKICAgICBpbnQzMl90ICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwogICAgIHBzYV9tc2dfdCAgICAgICBtc2cgPSB7MH07CisgICAgcHNhX3NpZ25hbF90ICAgIHNpZ25hbHM7CiAKLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCiAgICAgewotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCi0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKIAotICAgIHZhbF9wcm9jZXNzX2NhbGxfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7Cit3YWl0OgorICAgIHNpZ25hbHMgPSBwc2EtPndhaXQoUFNBX1dBSVRfQU5ZLCBQU0FfQkxPQ0spOworICAgIGlmIChzaWduYWxzICYgU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcpCisgICAgeworICAgICAgICBpZiAocHNhLT5nZXQoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpICE9IFBTQV9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBnb3RvIHdhaXQ7CisgICAgICAgIH0KIAotICAgIC8qIENvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCi0gICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRDb250cm9sIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZVxuIiwgMCk7Ci0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC0yKTsKKyAgICAgICAgaWYgKG1zZy50eXBlID09IFBTQV9JUENfQ0FMTCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogQ29udHJvbCBzaG91bGRuJ3QgaGF2ZSBjb21lIGhlcmUgKi8KKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENvbnRyb2wgc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlXG4iLCAwKTsKKyAgICAgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTIpOworICAgICAgICAgICAgdmFsLT5wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtc2cudHlwZSA9PSBQU0FfSVBDX0RJU0NPTk5FQ1QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRwc2Ffd2FpdCByZXR1cm5lZCB3aXRoIGludmFsaWQgc2lnbmFsIHZhbHVlID0gMHgleFxuIiwgc2lnbmFscyk7CisgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgIH0KIAotICAgIHZhbF9wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7Ci0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKLSAgICByZXR1cm4gVkFMX1NUQVRVU19TUE1fRkFJTEVEOworICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTIvdGVzdF9pMDUyLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Mi90ZXN0X2kwNTIuYwppbmRleCA2YjY3ZjdmLi41YjE0YzM3IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Mi90ZXN0X2kwNTIuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Mi90ZXN0X2kwNTIuYwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTA1Mi5oIgpAQCAtNDMsMTggKzQzLDI4IEBACiAgICBhZGRyX3QgICAgICAgICAgICAgICAgICAqdmFsaWRfYmFzZSA9IE5VTEw7CiAKICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwKLSAgICAgICAgICAgICJbQ2hlY2sxXSBUZXN0IHBzYV9jYWxsIHdpdGggaW52YWxpZCBlbmRfYWRkciBmb3IgcHNhX2ludmVjXG4iLCAwKTsKKyAgICAgICAgICAgICJbQ2hlY2sgMV0gVGVzdCBwc2FfY2FsbCB3aXRoIGludmFsaWQgZW5kX2FkZHIgZm9yIHBzYV9pbnZlY1xuIiwgMCk7CiAKLSAgIC8qIFRlc3QgaXMgdGFyZ2V0aW5nIGZhdGFsIGVycm9yIGNvbmRpdGlvbiBhbmQgaXQgd2lsbCBleHBlY3QgYW4gZXJyb3IgcmVjb3ZlcnkocmVib290KQotICAgICogdG8gaGFwcGVuLiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIHdhcyBpbnRlbmRlZCBhcyBwZXIgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKKyAgIC8qCisgICAgKiBUaGlzIHRlc3QgY2hlY2tzIGZvciB0aGUgUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24gZm9yIHRoZSBQU0EgQVBJLiBBUEkncyByZXNwb25kIHRvCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvdWxkIGJlIGVpdGhlciB0byByZXR1cm4gYXBwcm9wcmlhdGUgc3RhdHVzIGNvZGUgb3IgcGFuaWMgdGhlIGNhbGxlci4KKyAgICAqIFdoZW4gYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljcywgdGhlIFNQRSBjYW5ub3QgY29udGludWUgbm9ybWFsIGV4ZWN1dGlvbiwgYXMgZGVmaW5lZAorICAgICogaW4gdGhpcyBzcGVjaWZpY2F0aW9uLiBUaGUgYmVoYXZpb3Igb2YgdGhlIFNQTSBmb2xsb3dpbmcgYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljIGlzCisgICAgKiBJTVBMRU1FTlRBVElPTiBERUZJTkVELSBBcm0gcmVjb21tZW5kcyB0aGF0IHRoZSBTUE0gY2F1c2VzIHRoZSBzeXN0ZW0gdG8gcmVzdGFydCBpbgorICAgICogdGhpcyBzaXR1YXRpb24uIFJlZmVyIFBTQS1GRiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYW5pYy4KKyAgICAqIEZvciB0aGUgY2FzZXMgd2hlcmUsIFNQTSBjYW5ub3QgY2FwYWJsZSB0byByZWJvb3QgdGhlIHN5c3RlbSAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSwKKyAgICAqIGEgd2F0Y2hkb2cgdGltZXIgc2V0IGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuIFRoaXMgd2lsbAorICAgICogdGVzdHMgY29udGludWl0eSBhbmQgYWJsZSB0byBqdW1wIHRvIG5leHQgdGVzdHMuIFRoZXJlZm9yZSwgZWFjaCB0ZXN0IHdobyBjaGVja3MgZm9yCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiwgZXhwZWN0cyBzeXN0ZW0gdG8gZ2V0IHJlc2V0IGVpdGhlciBieSBTUE0gb3Igd2F0Y2hkb2cgc2V0IGJ5CisgICAgKiB0aGUgdGVzdCBoYXJuZXNzIGZ1bmN0aW9uLgorICAgICoKKyAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZworICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgorICAgICoKKyAgICAqIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgYXMgaW50ZW5kZWQgYnkgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKICAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAogICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKICAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KLSAgICAqCi0gICAgKiBOb3RlOiBJZiBTUE0gaXMgbm90IGNhcGFibGUgb2YgcmVib290aW5nIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbiwKLSAgICAqIGEgd2F0Y2hkb2cgdGltZXIgZW5hYmxlZCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LgotICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCi0gICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCiAgICAgKi8KIAogICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxKTsKQEAgLTY1LDE0ICs3NSwxNiBAQAogICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSURfSEFORExFOwogICAgfQogCi0gICAvKiBTZWxlY3Rpb24gb2YgaW52YWxpZCBzaXplIGZvciBwc2FfaW52ZWM6CisgICAvKgorICAgICogU2VsZWN0aW9uIG9mIGludmFsaWQgc2l6ZSBmb3IgcHNhX2ludmVjOgorICAgICoKICAgICAqIGlmIGNhbGxlciA9PSBOT05TRUNVUkUKICAgICAqICAgIHZhbGlkX2Jhc2UgPSBuc3BlX21taW9fcmVnaW9uX2Jhc2U7CiAgICAgKiAgICBpbnZhbGlkX3NpemUgPSAoZHJpdmVyX21taW9fcmVnaW9uX2Jhc2UgLSBuc3BlX21taW9fcmVnaW9uX2Jhc2UgKyAxKTsKICAgICAqIGVsc2UKICAgICAqICAgIGlmIChJU09MQVRJT05fTEVWRUwgPiAxKQotICAgICogICAgICAgdmFsaWRfYmFzZSA9IGNsaWVudF9tbWlvX3JlZ2lvbl9iYXNlOwotICAgICogICAgICAgaW52YWxpZF9zaXplID0gKGRyaXZlcl9tbWlvX3JlZ2lvbl9iYXNlIC0gY2xpZW50X21taW9fcmVnaW9uX2Jhc2UgKyAxKTsKKyAgICAqICAgICAgIHZhbGlkX2Jhc2UgPSBzZXJ2ZXJfbW1pb19yZWdpb25fYmFzZTsKKyAgICAqICAgICAgIGludmFsaWRfc2l6ZSA9IChkcml2ZXJfbW1pb19yZWdpb25fYmFzZSAtIHNlcnZlcl9tbWlvX3JlZ2lvbl9iYXNlICsgMSk7CiAgICAgKi8KIAogICAgc3RhdHVzID0gdmFsLT50YXJnZXRfZ2V0X2NvbmZpZyhUQVJHRVRfQ09ORklHX0NSRUFURV9JRChHUk9VUF9NRU1PUlksCkBAIC04OCw3ICsxMDAsNyBAQAogICAgaWYgKGNhbGxlciA9PSBOT05TRUNVUkUpCiAgICAgICAgbWVtb3J5X2NmZ19pZCA9IE1FTU9SWV9OU1BFX01NSU87CiAgICBlbHNlCi0gICAgICAgbWVtb3J5X2NmZ19pZCA9IE1FTU9SWV9DTElFTlRfUEFSVElUSU9OX01NSU87CisgICAgICAgbWVtb3J5X2NmZ19pZCA9IE1FTU9SWV9TRVJWRVJfUEFSVElUSU9OX01NSU87CiAKICAgIHN0YXR1cyA9IHZhbC0+dGFyZ2V0X2dldF9jb25maWcoVEFSR0VUX0NPTkZJR19DUkVBVEVfSUQoR1JPVVBfTUVNT1JZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeV9jZmdfaWQsIDApLApAQCAtMTE2LDggKzEyOCwxOSBAQAogICAgLyogVGVzdCBjaGVjay0gcHNhX2NhbGwgd2l0aCBpbnZhbGlkIGVuZF9hZGRyIGZvciBwc2FfaW52ZWMgKi8KICAgIHN0YXR1c19vZl9jYWxsID0gIHBzYS0+Y2FsbChoYW5kbGUsIGludmVjLCAxLCBOVUxMLCAwKTsKIAotICAgLyogRXhwZWN0YXRpb24gaXMgcHNhX2NhbGwgc2hvdWxkIGhhbmcgYW5kIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCi0gICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRwc2FfY2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgLyoKKyAgICAqIElmIHRoZSBjYWxsZXIgaXMgaW4gdGhlIE5TUEUsIGl0IGlzIElNUExFTUVOVEFUSU9OIERFRklORUQgd2hldGhlcgorICAgICogYSBQUk9HUkFNTUVSIEVSUk9SIHdpbGwgcGFuaWMgb3IgcmV0dXJuIFBTQV9FUlJPUl9QUk9HUkFNTUVSX0VSUk9SLgorICAgICogRm9yIFNQRSBjYWxsZXIsIGl0IG11c3QgcGFuaWMuCisgICAgKi8KKyAgIGlmIChjYWxsZXIgPT0gTk9OU0VDVVJFICYmIHN0YXR1c19vZl9jYWxsID09IFBTQV9FUlJPUl9QUk9HUkFNTUVSX0VSUk9SKQorICAgeworICAgICAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworICAgfQorCisgICAvKiBJZiBQUk9HUkFNTUVSIEVSUk9SIHJlc3VsdHMgaW50byBwYW5pYyB0aGVuIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRwc2FfY2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZWVkXG4iLCAwKTsKIAogICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCiAgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCkBAIC0xMjgsNiArMTUxLDUgQEAKIAogICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwogICAgcHNhLT5jbG9zZShoYW5kbGUpOwotICAgKHZvaWQpKHN0YXR1c19vZl9jYWxsKTsKICAgIHJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Mi90ZXN0X3N1cHBfaTA1Mi5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTIvdGVzdF9zdXBwX2kwNTIuYwppbmRleCAwZWVhZmNlLi4zMWJjMzJiIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Mi90ZXN0X3N1cHBfaTA1Mi5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDUyL3Rlc3Rfc3VwcF9pMDUyLmMKQEAgLTE1LDggKzE1LDEzIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CiAKIGludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX2NhbGxfd2l0aF9pbnZhbGlkX2ludmVjX2VuZF9hZGRyKHZvaWQpOwogCkBAIC0zMCwyMyArMzUsNDUgQEAKIHsKICAgICBpbnQzMl90ICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwogICAgIHBzYV9tc2dfdCAgICAgICBtc2cgPSB7MH07CisgICAgcHNhX3NpZ25hbF90ICAgIHNpZ25hbHM7CiAKLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCiAgICAgewotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCi0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKIAotICAgIHZhbF9wcm9jZXNzX2NhbGxfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7Cit3YWl0OgorICAgIHNpZ25hbHMgPSBwc2EtPndhaXQoUFNBX1dBSVRfQU5ZLCBQU0FfQkxPQ0spOworICAgIGlmIChzaWduYWxzICYgU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcpCisgICAgeworICAgICAgICBpZiAocHNhLT5nZXQoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpICE9IFBTQV9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBnb3RvIHdhaXQ7CisgICAgICAgIH0KIAotICAgIC8qIENvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCi0gICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRDb250cm9sIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZVxuIiwgMCk7Ci0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC0yKTsKKyAgICAgICAgaWYgKG1zZy50eXBlID09IFBTQV9JUENfQ0FMTCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogQ29udHJvbCBzaG91bGRuJ3QgaGF2ZSBjb21lIGhlcmUgKi8KKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENvbnRyb2wgc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlXG4iLCAwKTsKKyAgICAgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTIpOworICAgICAgICAgICAgdmFsLT5wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtc2cudHlwZSA9PSBQU0FfSVBDX0RJU0NPTk5FQ1QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRwc2Ffd2FpdCByZXR1cm5lZCB3aXRoIGludmFsaWQgc2lnbmFsIHZhbHVlID0gMHgleFxuIiwgc2lnbmFscyk7CisgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgIH0KIAotICAgIHZhbF9wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7Ci0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKLSAgICByZXR1cm4gVkFMX1NUQVRVU19TUE1fRkFJTEVEOworICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTMvdGVzdF9pMDUzLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1My90ZXN0X2kwNTMuYwppbmRleCA5NDIwYmExLi4xMDhjMjRiIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1My90ZXN0X2kwNTMuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1My90ZXN0X2kwNTMuYwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTA1My5oIgpAQCAtNDMsMTggKzQzLDI4IEBACiAgICBhZGRyX3QgICAgICAgICAgICAgICAgICAqdmFsaWRfYmFzZSA9IE5VTEw7CiAKICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwKLSAgICAgICAgICAgICJbQ2hlY2sxXSBUZXN0IHBzYV9jYWxsIHdpdGggaW52YWxpZCBlbmRfYWRkciBmb3IgcHNhX291dHZlY1xuIiwgMCk7CisgICAgICAgICAgICAiW0NoZWNrIDFdIFRlc3QgcHNhX2NhbGwgd2l0aCBpbnZhbGlkIGVuZF9hZGRyIGZvciBwc2Ffb3V0dmVjXG4iLCAwKTsKIAotICAgLyogVGVzdCBpcyB0YXJnZXRpbmcgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCBpdCB3aWxsIGV4cGVjdCBhbiBlcnJvciByZWNvdmVyeShyZWJvb3QpCi0gICAgKiB0byBoYXBwZW4uIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgd2FzIGludGVuZGVkIGFzIHBlciB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgLyoKKyAgICAqIFRoaXMgdGVzdCBjaGVja3MgZm9yIHRoZSBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiBmb3IgdGhlIFBTQSBBUEkuIEFQSSdzIHJlc3BvbmQgdG8KKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY291bGQgYmUgZWl0aGVyIHRvIHJldHVybiBhcHByb3ByaWF0ZSBzdGF0dXMgY29kZSBvciBwYW5pYyB0aGUgY2FsbGVyLgorICAgICogV2hlbiBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWNzLCB0aGUgU1BFIGNhbm5vdCBjb250aW51ZSBub3JtYWwgZXhlY3V0aW9uLCBhcyBkZWZpbmVkCisgICAgKiBpbiB0aGlzIHNwZWNpZmljYXRpb24uIFRoZSBiZWhhdmlvciBvZiB0aGUgU1BNIGZvbGxvd2luZyBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWMgaXMKKyAgICAqIElNUExFTUVOVEFUSU9OIERFRklORUQtIEFybSByZWNvbW1lbmRzIHRoYXQgdGhlIFNQTSBjYXVzZXMgdGhlIHN5c3RlbSB0byByZXN0YXJ0IGluCisgICAgKiB0aGlzIHNpdHVhdGlvbi4gUmVmZXIgUFNBLUZGIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhbmljLgorICAgICogRm9yIHRoZSBjYXNlcyB3aGVyZSwgU1BNIGNhbm5vdCBjYXBhYmxlIHRvIHJlYm9vdCB0aGUgc3lzdGVtIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBzZXQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4gVGhpcyB3aWxsCisgICAgKiB0ZXN0cyBjb250aW51aXR5IGFuZCBhYmxlIHRvIGp1bXAgdG8gbmV4dCB0ZXN0cy4gVGhlcmVmb3JlLCBlYWNoIHRlc3Qgd2hvIGNoZWNrcyBmb3IKKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uLCBleHBlY3RzIHN5c3RlbSB0byBnZXQgcmVzZXQgZWl0aGVyIGJ5IFNQTSBvciB3YXRjaGRvZyBzZXQgYnkKKyAgICAqIHRoZSB0ZXN0IGhhcm5lc3MgZnVuY3Rpb24uCisgICAgKgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKgorICAgICogVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCBhcyBpbnRlbmRlZCBieSB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAogICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCiAgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQogICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgotICAgICoKLSAgICAqIE5vdGU6IElmIFNQTSBpcyBub3QgY2FwYWJsZSBvZiByZWJvb3RpbmcgKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93bikgaW4gZmF0YWwgZXJyb3IgY29uZGl0aW9uLAotICAgICogYSB3YXRjaGRvZyB0aW1lciBlbmFibGVkIGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuCi0gICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKLSAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KICAgICAqLwogCiAgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpOwpAQCAtNjUsMTQgKzc1LDE2IEBACiAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRF9IQU5ETEU7CiAgICB9CiAKLSAgIC8qIFNlbGVjdGlvbiBvZiBpbnZhbGlkIHNpemUgZm9yIHBzYV9vdXR2ZWM6CisgICAvKgorICAgICogU2VsZWN0aW9uIG9mIGludmFsaWQgc2l6ZSBmb3IgcHNhX291dHZlYzoKKyAgICAqCiAgICAgKiBpZiBjYWxsZXIgPT0gTk9OU0VDVVJFCiAgICAgKiAgICB2YWxpZF9iYXNlID0gbnNwZV9tbWlvX3JlZ2lvbl9iYXNlOwogICAgICogICAgaW52YWxpZF9zaXplID0gKGRyaXZlcl9tbWlvX3JlZ2lvbl9iYXNlIC0gbnNwZV9tbWlvX3JlZ2lvbl9iYXNlICsgMSk7CiAgICAgKiBlbHNlCiAgICAgKiAgICBpZiAoSVNPTEFUSU9OX0xFVkVMID4gMSkKLSAgICAqICAgICAgIHZhbGlkX2Jhc2UgPSBjbGllbnRfbW1pb19yZWdpb25fYmFzZTsKLSAgICAqICAgICAgIGludmFsaWRfc2l6ZSA9IChkcml2ZXJfbW1pb19yZWdpb25fYmFzZSAtIGNsaWVudF9tbWlvX3JlZ2lvbl9iYXNlICsgMSk7CisgICAgKiAgICAgICB2YWxpZF9iYXNlID0gc2VydmVyX21taW9fcmVnaW9uX2Jhc2U7CisgICAgKiAgICAgICBpbnZhbGlkX3NpemUgPSAoZHJpdmVyX21taW9fcmVnaW9uX2Jhc2UgLSBzZXJ2ZXJfbW1pb19yZWdpb25fYmFzZSArIDEpOwogICAgICovCiAKICAgIHN0YXR1cyA9IHZhbC0+dGFyZ2V0X2dldF9jb25maWcoVEFSR0VUX0NPTkZJR19DUkVBVEVfSUQoR1JPVVBfTUVNT1JZLApAQCAtODgsNyArMTAwLDcgQEAKICAgIGlmIChjYWxsZXIgPT0gTk9OU0VDVVJFKQogICAgICAgIG1lbW9yeV9jZmdfaWQgPSBNRU1PUllfTlNQRV9NTUlPOwogICAgZWxzZQotICAgICAgIG1lbW9yeV9jZmdfaWQgPSBNRU1PUllfQ0xJRU5UX1BBUlRJVElPTl9NTUlPOworICAgICAgIG1lbW9yeV9jZmdfaWQgPSBNRU1PUllfU0VSVkVSX1BBUlRJVElPTl9NTUlPOwogCiAgICBzdGF0dXMgPSB2YWwtPnRhcmdldF9nZXRfY29uZmlnKFRBUkdFVF9DT05GSUdfQ1JFQVRFX0lEKEdST1VQX01FTU9SWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlfY2ZnX2lkLCAwKSwKQEAgLTExNiw4ICsxMjgsMTkgQEAKICAgIC8qIFRlc3QgY2hlY2stIHBzYV9jYWxsIHdpdGggaW52YWxpZCBlbmRfYWRkciBmb3IgcHNhX291dHZlYyAqLwogICAgc3RhdHVzX29mX2NhbGwgPSAgcHNhLT5jYWxsKGhhbmRsZSwgTlVMTCwgMCwgb3V0dmVjLCAxKTsKIAotICAgLyogRXhwZWN0YXRpb24gaXMgcHNhX2NhbGwgc2hvdWxkIGhhbmcgYW5kIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCi0gICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRwc2FfY2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgLyoKKyAgICAqIElmIHRoZSBjYWxsZXIgaXMgaW4gdGhlIE5TUEUsIGl0IGlzIElNUExFTUVOVEFUSU9OIERFRklORUQgd2hldGhlcgorICAgICogYSBQUk9HUkFNTUVSIEVSUk9SIHdpbGwgcGFuaWMgb3IgcmV0dXJuIFBTQV9FUlJPUl9QUk9HUkFNTUVSX0VSUk9SLgorICAgICogRm9yIFNQRSBjYWxsZXIsIGl0IG11c3QgcGFuaWMuCisgICAgKi8KKyAgIGlmIChjYWxsZXIgPT0gTk9OU0VDVVJFICYmIHN0YXR1c19vZl9jYWxsID09IFBTQV9FUlJPUl9QUk9HUkFNTUVSX0VSUk9SKQorICAgeworICAgICAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworICAgfQorCisgICAvKiBJZiBQUk9HUkFNTUVSIEVSUk9SIHJlc3VsdHMgaW50byBwYW5pYyB0aGVuIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRwc2FfY2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZWVkXG4iLCAwKTsKIAogICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCiAgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1My90ZXN0X3N1cHBfaTA1My5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTMvdGVzdF9zdXBwX2kwNTMuYwppbmRleCBjMmQ4NTNiLi42NDllM2MyIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1My90ZXN0X3N1cHBfaTA1My5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDUzL3Rlc3Rfc3VwcF9pMDUzLmMKQEAgLTE1LDggKzE1LDEzIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CiAKIGludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX2NhbGxfd2l0aF9pbnZhbGlkX291dHZlY19lbmRfYWRkcih2b2lkKTsKIApAQCAtMzAsMjMgKzM1LDQ1IEBACiB7CiAgICAgaW50MzJfdCAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKICAgICBwc2FfbXNnX3QgICAgICAgbXNnID0gezB9OworICAgIHBzYV9zaWduYWxfdCAgICBzaWduYWxzOwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAKLSAgICB2YWxfcHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOword2FpdDoKKyAgICBzaWduYWxzID0gcHNhLT53YWl0KFBTQV9XQUlUX0FOWSwgUFNBX0JMT0NLKTsKKyAgICBpZiAoc2lnbmFscyAmIFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHKQorICAgIHsKKyAgICAgICAgaWYgKHBzYS0+Z2V0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSAhPSBQU0FfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgZ290byB3YWl0OworICAgICAgICB9CiAKLSAgICAvKiBDb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLwotICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0Q29udHJvbCBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmVcbiIsIDApOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCAtMik7CisgICAgICAgIGlmIChtc2cudHlwZSA9PSBQU0FfSVBDX0NBTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCisgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDb250cm9sIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZVxuIiwgMCk7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIC0yKTsKKyAgICAgICAgICAgIHZhbC0+cHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgICAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobXNnLnR5cGUgPT0gUFNBX0lQQ19ESVNDT05ORUNUKQorICAgICAgICB7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0cHNhX3dhaXQgcmV0dXJuZWQgd2l0aCBpbnZhbGlkIHNpZ25hbCB2YWx1ZSA9IDB4JXhcbiIsIHNpZ25hbHMpOworICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgICB9CiAKLSAgICB2YWxfcHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7Ci0gICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKKyAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU0L3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU0L3Rlc3RfZW50cnkuYwppbmRleCA3MWU5MzU1Li5kNDMxZDU5IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1NC90ZXN0X2VudHJ5LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTQvdGVzdF9lbnRyeS5jCkBAIC0zOSwxMyArMzksNiBAQAogICAgICAgICBnb3RvIHRlc3RfZXhpdDsKICAgICB9CiAKLSAgICAvKiBFeGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluIHRlc3RbbnVtXV9jbGllbnRfdGVzdHNfbGlzdCBmcm9tIE5vbi1zZWN1cmUgc2lkZSovCi0gICAgc3RhdHVzID0gdmFsLT5leGVjdXRlX25vbl9zZWN1cmVfdGVzdHMoVEVTVF9OVU0sIHRlc3RfaTA1NF9jbGllbnRfdGVzdHNfbGlzdCwgVFJVRSk7Ci0gICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQotICAgIHsKLSAgICAgICAgZ290byB0ZXN0X2V4aXQ7Ci0gICAgfQotCiAgICAgLyogU3dpdGNoIHRvIHNlY3VyZSBzaWRlIChjbGllbnRfcGFydGl0aW9uLmMpIGFuZCBleGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluCiAgICAgdGVzdFtudW1dX2NsaWVudF90ZXN0c19saXN0IGZyb20gU2VjdXJlIHNpZGUgKi8KICAgICBzdGF0dXMgPSB2YWwtPnN3aXRjaF90b19zZWN1cmVfY2xpZW50KFRFU1RfTlVNKTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU0L3Rlc3RfaTA1NC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTQvdGVzdF9pMDU0LmMKaW5kZXggODk0Y2I4Ni4uODAxNjBjYSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTQvdGVzdF9pMDU0LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTQvdGVzdF9pMDU0LmMKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwNTQuaCIKQEAgLTM1LDIyICszNSwzMCBAQAogewogICAgaW50MzJfdCAgICAgICAgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwogICAgcHNhX2hhbmRsZV90ICAgICAgICAgICAgaGFuZGxlID0gMDsKLSAgIHBzYV9zdGF0dXNfdCAgICAgICAgICAgIHN0YXR1c19vZl9jYWxsOwotICAgYm9vdF9zdGF0ZV90ICAgICAgICAgICAgYm9vdF9zdGF0ZTsKIAogICAgdmFsLT5wcmludChQUklOVF9URVNULAotICAgICAgICAgICAgIltDaGVjazFdIFRlc3QgcHNhX2NhbGwgd2l0aCBub3Qgd3JpdGFibGUgcHNhX291dHZlYy5iYXNlXG4iLCAwKTsKKyAgICAgICAgICAgICJbQ2hlY2sgMV0gVGVzdCBwc2FfY2FsbCB3aXRoIG5vdCB3cml0YWJsZSBwc2Ffb3V0dmVjLmJhc2VcbiIsIDApOwogCi0gICAvKiBUZXN0IGlzIHRhcmdldGluZyBmYXRhbCBlcnJvciBjb25kaXRpb24gYW5kIGl0IHdpbGwgZXhwZWN0IGFuIGVycm9yIHJlY292ZXJ5KHJlYm9vdCkKLSAgICAqIHRvIGhhcHBlbi4gVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCB3YXMgaW50ZW5kZWQgYXMgcGVyIHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCisgICAvKgorICAgICogVGhpcyB0ZXN0IGNoZWNrcyBmb3IgdGhlIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uIGZvciB0aGUgUFNBIEFQSS4gQVBJJ3MgcmVzcG9uZCB0bworICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb3VsZCBiZSBlaXRoZXIgdG8gcmV0dXJuIGFwcHJvcHJpYXRlIHN0YXR1cyBjb2RlIG9yIHBhbmljIHRoZSBjYWxsZXIuCisgICAgKiBXaGVuIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pY3MsIHRoZSBTUEUgY2Fubm90IGNvbnRpbnVlIG5vcm1hbCBleGVjdXRpb24sIGFzIGRlZmluZWQKKyAgICAqIGluIHRoaXMgc3BlY2lmaWNhdGlvbi4gVGhlIGJlaGF2aW9yIG9mIHRoZSBTUE0gZm9sbG93aW5nIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pYyBpcworICAgICogSU1QTEVNRU5UQVRJT04gREVGSU5FRC0gQXJtIHJlY29tbWVuZHMgdGhhdCB0aGUgU1BNIGNhdXNlcyB0aGUgc3lzdGVtIHRvIHJlc3RhcnQgaW4KKyAgICAqIHRoaXMgc2l0dWF0aW9uLiBSZWZlciBQU0EtRkYgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFuaWMuCisgICAgKiBGb3IgdGhlIGNhc2VzIHdoZXJlLCBTUE0gY2Fubm90IGNhcGFibGUgdG8gcmVib290IHRoZSBzeXN0ZW0gKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93biksCisgICAgKiBhIHdhdGNoZG9nIHRpbWVyIHNldCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LiBUaGlzIHdpbGwKKyAgICAqIHRlc3RzIGNvbnRpbnVpdHkgYW5kIGFibGUgdG8ganVtcCB0byBuZXh0IHRlc3RzLiBUaGVyZWZvcmUsIGVhY2ggdGVzdCB3aG8gY2hlY2tzIGZvcgorICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24sIGV4cGVjdHMgc3lzdGVtIHRvIGdldCByZXNldCBlaXRoZXIgYnkgU1BNIG9yIHdhdGNoZG9nIHNldCBieQorICAgICogdGhlIHRlc3QgaGFybmVzcyBmdW5jdGlvbi4KKyAgICAqCisgICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKKyAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KKyAgICAqCisgICAgKiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIGFzIGludGVuZGVkIGJ5IHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCiAgICAgKiBkdWUgdG8gb3RoZXIgcmVhc29ucywgdGVzdCBpcyBzZXR0aW5nIGEgYm9vdCBzaWduYXR1cmUgaW50byBub24tdm9sYXRpbGUgbWVtb3J5IGJlZm9yZSBhbmQKICAgICAqIGFmdGVyIHRhcmdldGVkIHRlc3QgY2hlY2suIEFmdGVyIGEgcmVib290LCB0aGVzZSBib290IHNpZ25hdHVyZXMgYXJlIGJlaW5nIHJlYWQgYnkgdGhlCiAgICAgKiBWQUwgQVBJcyB0byBkZWNpZGUgdGVzdCBzdGF0dXMuCi0gICAgKgotICAgICogTm90ZTogSWYgU1BNIGlzIG5vdCBjYXBhYmxlIG9mIHJlYm9vdGluZyAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSBpbiBmYXRhbCBlcnJvciBjb25kaXRpb24sCi0gICAgKiBhIHdhdGNoZG9nIHRpbWVyIGVuYWJsZWQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4KLSAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZwotICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgogICAgICovCiAKICAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSk7CkBAIC02MSw4ICs2OSw3IEBACiAgICB9CiAKICAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLwotICAgYm9vdF9zdGF0ZSA9IChjYWxsZXIgPT0gTk9OU0VDVVJFKSA/IEJPT1RfRVhQRUNURURfTlMgOiBCT09UX0VYUEVDVEVEX1M7Ci0gICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKGJvb3Rfc3RhdGUpKQorICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX1MpKQogICAgewogICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CiAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CkBAIC03MSwxMSArNzgsMTEgQEAKICAgIC8qIFVzaW5nIGZ1bmN0aW9uIGFkZHJlc3MgKGNvZGUpIGFzIG5vdCB3cml0YWJsZSBhZGRyZXNzICovCiAgICBwc2Ffb3V0dmVjIG91dHZlY1sxXSA9IHt7JmNsaWVudF90ZXN0X3BzYV9jYWxsX3dpdGhfbm90X3dyaXRhYmxlX291dHZlY19iYXNlLCBzaXplb2YoY2hhcil9fTsKIAotICAgLyogVGVzdCBjaGVjay0gcHNhX2NhbGwgd2l0aCBub3Qgd3JpdGFibGUgcHNhX291dHZlYy5iYXNlICovCi0gICBzdGF0dXNfb2ZfY2FsbCA9ICBwc2EtPmNhbGwoaGFuZGxlLCBOVUxMLCAwLCBvdXR2ZWMsIDApOworICAgLyogVGVzdCBjaGVjay0gcHNhX2NhbGwgd2l0aCBub3Qgd3JpdGFibGUgcHNhX291dHZlYy5iYXNlLCBjYWxsIHNob3VsZCBwYW5pYyAqLworICAgcHNhLT5jYWxsKGhhbmRsZSwgTlVMTCwgMCwgb3V0dmVjLCAxKTsKIAotICAgLyogRXhwZWN0YXRpb24gaXMgcHNhX2NhbGwgc2hvdWxkIGhhbmcgYW5kIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCi0gICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRwc2FfY2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgLyogSWYgUFJPR1JBTU1FUiBFUlJPUiByZXN1bHRzIGludG8gcGFuaWMgdGhlbiBjb250cm9sIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZSAqLworICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0cHNhX2NhbGwgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2VlZFxuIiwgMCk7CiAKICAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLwogICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQpAQCAtODYsNiArOTMsNSBAQAogCiAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CiAgICBwc2EtPmNsb3NlKGhhbmRsZSk7Ci0gICAodm9pZCkoc3RhdHVzX29mX2NhbGwpOwogICAgcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU0L3Rlc3Rfc3VwcF9pMDU0LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1NC90ZXN0X3N1cHBfaTA1NC5jCmluZGV4IGJkYWFlNTcuLjc1NDQyNTcgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU0L3Rlc3Rfc3VwcF9pMDU0LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTQvdGVzdF9zdXBwX2kwNTQuYwpAQCAtMTUsOCArMTUsMTMgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKIAogaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfY2FsbF93aXRoX25vdF93cml0YWJsZV9vdXR2ZWNfYmFzZSh2b2lkKTsKIApAQCAtMzAsMjMgKzM1LDQ1IEBACiB7CiAgICAgaW50MzJfdCAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKICAgICBwc2FfbXNnX3QgICAgICAgbXNnID0gezB9OworICAgIHBzYV9zaWduYWxfdCAgICBzaWduYWxzOwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAKLSAgICB2YWxfcHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOword2FpdDoKKyAgICBzaWduYWxzID0gcHNhLT53YWl0KFBTQV9XQUlUX0FOWSwgUFNBX0JMT0NLKTsKKyAgICBpZiAoc2lnbmFscyAmIFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHKQorICAgIHsKKyAgICAgICAgaWYgKHBzYS0+Z2V0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSAhPSBQU0FfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgZ290byB3YWl0OworICAgICAgICB9CiAKLSAgICAvKiBDb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLwotICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0Q29udHJvbCBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmVcbiIsIDApOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCAtMik7CisgICAgICAgIGlmIChtc2cudHlwZSA9PSBQU0FfSVBDX0NBTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCisgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDb250cm9sIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZVxuIiwgMCk7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIC0yKTsKKyAgICAgICAgICAgIHZhbC0+cHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgICAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobXNnLnR5cGUgPT0gUFNBX0lQQ19ESVNDT05ORUNUKQorICAgICAgICB7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0cHNhX3dhaXQgcmV0dXJuZWQgd2l0aCBpbnZhbGlkIHNpZ25hbCB2YWx1ZSA9IDB4JXhcbiIsIHNpZ25hbHMpOworICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgICB9CiAKLSAgICB2YWxfcHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7Ci0gICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKKyAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU1L3Rlc3RfaTA1NS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTUvdGVzdF9pMDU1LmMKaW5kZXggMjk2MTZhYS4uMDMzYTk5YSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTUvdGVzdF9pMDU1LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTUvdGVzdF9pMDU1LmMKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwNTUuaCIKQEAgLTM5LDcgKzM5LDcgQEAKICAgIHBzYV9zdGF0dXNfdCAgICAgICBzdGF0dXNfb2ZfY2FsbDsKIAogICAgdmFsLT5wcmludChQUklOVF9URVNULAotICAgICAgICAgICAgIltDaGVjazFdIFRlc3QgcHNhX3JlYWQgd2l0aCBpbnZhbGlkIGJ1ZmZlciBhZGRyXG4iLCAwKTsKKyAgICAgICAgICAgICJbQ2hlY2sgMV0gVGVzdCBwc2FfcmVhZCB3aXRoIGludmFsaWQgYnVmZmVyIGFkZHJcbiIsIDApOwogCiAgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpOwogICAgaWYgKGhhbmRsZSA8IDApCkBAIC01Miw3ICs1Miw3IEBACiAgICBzdGF0dXNfb2ZfY2FsbCA9ICBwc2EtPmNhbGwoaGFuZGxlLCBpbnZlYywgMSwgTlVMTCwgMCk7CiAKICAgIC8qIEV4cGVjdGF0aW9uIGlzIHNlcnZlciB0ZXN0IHNob3VsZCBoYW5nIGFuZCBjb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLwotICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZWVkXG4iLCAwKTsKIAogICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1NS90ZXN0X3N1cHBfaTA1NS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTUvdGVzdF9zdXBwX2kwNTUuYwppbmRleCA3Y2M0NTBlLi4yNDg2Nzk1IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1NS90ZXN0X3N1cHBfaTA1NS5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU1L3Rlc3Rfc3VwcF9pMDU1LmMKQEAgLTE1LDggKzE1LDEzIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CiAKIGludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX3JlYWRfd2l0aF9pbnZhbGlkX2J1ZmZlcl9hZGRyKHZvaWQpOwogCkBAIC0zNCw1MiArMzksNjQgQEAKICAgICBtaXNjZWxsYW5lb3VzX2Rlc2NfdCAgICAqbWlzY19kZXNjOwogICAgIG1lbW9yeV9kZXNjX3QgICAgICAgICAgICptZW1vcnlfZGVzYzsKIAotICAgLyogVGVzdCBpcyB0YXJnZXRpbmcgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCBpdCB3aWxsIGV4cGVjdCBhbiBlcnJvciByZWNvdmVyeShyZWJvb3QpCi0gICAgKiB0byBoYXBwZW4uIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgd2FzIGludGVuZGVkIGFzIHBlciB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgLyoKKyAgICAqIFRoaXMgdGVzdCBjaGVja3MgZm9yIHRoZSBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiBmb3IgdGhlIFBTQSBBUEkuIEFQSSdzIHJlc3BvbmQgdG8KKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY291bGQgYmUgZWl0aGVyIHRvIHJldHVybiBhcHByb3ByaWF0ZSBzdGF0dXMgY29kZSBvciBwYW5pYyB0aGUgY2FsbGVyLgorICAgICogV2hlbiBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWNzLCB0aGUgU1BFIGNhbm5vdCBjb250aW51ZSBub3JtYWwgZXhlY3V0aW9uLCBhcyBkZWZpbmVkCisgICAgKiBpbiB0aGlzIHNwZWNpZmljYXRpb24uIFRoZSBiZWhhdmlvciBvZiB0aGUgU1BNIGZvbGxvd2luZyBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWMgaXMKKyAgICAqIElNUExFTUVOVEFUSU9OIERFRklORUQtIEFybSByZWNvbW1lbmRzIHRoYXQgdGhlIFNQTSBjYXVzZXMgdGhlIHN5c3RlbSB0byByZXN0YXJ0IGluCisgICAgKiB0aGlzIHNpdHVhdGlvbi4gUmVmZXIgUFNBLUZGIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhbmljLgorICAgICogRm9yIHRoZSBjYXNlcyB3aGVyZSwgU1BNIGNhbm5vdCBjYXBhYmxlIHRvIHJlYm9vdCB0aGUgc3lzdGVtIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBzZXQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4gVGhpcyB3aWxsCisgICAgKiB0ZXN0cyBjb250aW51aXR5IGFuZCBhYmxlIHRvIGp1bXAgdG8gbmV4dCB0ZXN0cy4gVGhlcmVmb3JlLCBlYWNoIHRlc3Qgd2hvIGNoZWNrcyBmb3IKKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uLCBleHBlY3RzIHN5c3RlbSB0byBnZXQgcmVzZXQgZWl0aGVyIGJ5IFNQTSBvciB3YXRjaGRvZyBzZXQgYnkKKyAgICAqIHRoZSB0ZXN0IGhhcm5lc3MgZnVuY3Rpb24uCisgICAgKgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKgorICAgICogVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCBhcyBpbnRlbmRlZCBieSB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAogICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCiAgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQogICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgotICAgICoKLSAgICAqIE5vdGU6IElmIFNQTSBpcyBub3QgY2FwYWJsZSBvZiByZWJvb3RpbmcgKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93bikgaW4gZmF0YWwgZXJyb3IgY29uZGl0aW9uLAotICAgICogYSB3YXRjaGRvZyB0aW1lciBlbmFibGVkIGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuCi0gICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKLSAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KICAgICAqLwogCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAogCi0gICAgLyogU2VsZWN0aW9uIG9mIGludmFsaWQgYnVmZmVyIGFkZHI6CisgICAgLyoKKyAgICAgKiBTZWxlY3Rpb24gb2YgaW52YWxpZCBidWZmZXIgYWRkcjoKKyAgICAgKgogICAgICAqICBpZiAoSVNPTEFUSU9OX0xFVkVMID4gMSkKICAgICAgKiAgICAgICBidWZmZXIgPSBkcml2ZXJfbW1pb19yZWdpb25fYmFzZTsKICAgICAgKiAgZWxzZQogICAgICAqICAgICAgIGJ1ZmZlciA9IE5VTEw7CiAgICAgICovCiAKLSAgICBzdGF0dXMgPSB2YWxfdGFyZ2V0X2dldF9jb25maWcoVEFSR0VUX0NPTkZJR19DUkVBVEVfSUQoR1JPVVBfTUlTQ0VMTEFORU9VUywKKyAgICBzdGF0dXMgPSB2YWwtPnRhcmdldF9nZXRfY29uZmlnKFRBUkdFVF9DT05GSUdfQ1JFQVRFX0lEKEdST1VQX01JU0NFTExBTkVPVVMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JU0NFTExBTkVPVVNfRFVULCAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKikmbWlzY19kZXNjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCAqKXNpemVvZihtaXNjZWxsYW5lb3VzX2Rlc2NfdCkpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCiAgICAgewotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCiAgICAgaWYgKG1pc2NfZGVzYy0+aW1wbGVtZW50ZWRfcHNhX2Zpcm13YXJlX2lzb2xhdGlvbl9sZXZlbCA+IExFVkVMMSkKICAgICB7Ci0gICAgICAgIHN0YXR1cyA9IHZhbF90YXJnZXRfZ2V0X2NvbmZpZyhUQVJHRVRfQ09ORklHX0NSRUFURV9JRChHUk9VUF9NRU1PUlksCisgICAgICAgIHN0YXR1cyA9IHZhbC0+dGFyZ2V0X2dldF9jb25maWcoVEFSR0VUX0NPTkZJR19DUkVBVEVfSUQoR1JPVVBfTUVNT1JZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRU1PUllfRFJJVkVSX1BBUlRJVElPTl9NTUlPLCAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QgKiopJm1lbW9yeV9kZXNjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QgKilzaXplb2YobWVtb3J5X2Rlc2NfdCkpOwotICAgICAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDMpLCBzdGF0dXMpKQorICAgICAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKICAgICAgICAgewotICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgICAgIH0KIApAQCAtODcsNDYgKzEwNCw0NiBAQAogICAgIH0KIAogICAgIC8qIEFjY2VwdCB0aGUgY29ubmVjdGlvbiAqLwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAKLSAgICAvKiBTZXJ2ZXIgcHNhX2NhbGwgKi8KLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwNCksIHN0YXR1cykpCisgICAgLyogU2VydmUgcHNhX2NhbGwgKi8KKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjA0KSwgc3RhdHVzKSkKICAgICB7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCAtMik7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTIpOwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KLSAgICAgICAgc3RhdHVzID0gdmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUyk7Ci0gICAgICAgIGlmKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjA1KSwgc3RhdHVzKSkKKyAgICAgICAgc3RhdHVzID0gdmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpOworICAgICAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjA1KSwgc3RhdHVzKSkKICAgICAgICAgewotICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOwotICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC0zKTsKKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIC0zKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFRlc3QgY2hlY2stIHBzYV9yZWFkIHdpdGggaW52YWxpZCBidWZmZXIgYWRkciAqLwotICAgICAgICAgICAgcHNhX3JlYWQobXNnLmhhbmRsZSwgMCwgKHZvaWQgKilidWZmZXIsIG1zZy5pbl9zaXplWzBdKTsKKyAgICAgICAgICAgIC8qIFRlc3QgY2hlY2stIHBzYV9yZWFkIHdpdGggaW52YWxpZCBidWZmZXIgYWRkciwgY2FsbCBzaG91bGQgcGFuaWMgKi8KKyAgICAgICAgICAgIHBzYS0+cmVhZChtc2cuaGFuZGxlLCAwLCAodm9pZCAqKWJ1ZmZlciwgbXNnLmluX3NpemVbMF0pOwogCiAgICAgICAgICAgICAvKiBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KLSAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwKLSAgICAgICAgICAgICAgICAiXHRwc2FfcmVhZCB3aXRoIGludmFsaWQgYnVmZmVyIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2Nlc3NlZFxuIiwgMCk7CisgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLAorICAgICAgICAgICAgICAgICJcdHBzYV9yZWFkIHdpdGggaW52YWxpZCBidWZmZXIgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2VlZFxuIiwgMCk7CiAKICAgICAgICAgICAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLwotICAgICAgICAgICAgaWYgKHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCisgICAgICAgICAgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7Ci0gICAgICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgLTQpOworICAgICAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCAtNCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwNiksIHN0YXR1cyk7Ci0gICAgc3RhdHVzID0gKCh2YWxfcHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpKQorICAgIHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwNiksIHN0YXR1cyk7CisgICAgc3RhdHVzID0gKCh2YWwtPnByb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSkKICAgICAgICAgICAgICAgID8gVkFMX1NUQVRVU19FUlJPUiA6IHN0YXR1cyk7Ci0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKICAgICByZXR1cm4gc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTYvdGVzdF9pMDU2LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Ni90ZXN0X2kwNTYuYwppbmRleCBiZDVhN2M1Li43NTQ3ZDMzIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Ni90ZXN0X2kwNTYuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Ni90ZXN0X2kwNTYuYwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTA1Ni5oIgpAQCAtMzksNyArMzksNyBAQAogICAgcHNhX3N0YXR1c190ICAgICAgIHN0YXR1c19vZl9jYWxsOwogCiAgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsCi0gICAgICAgICAgICAiW0NoZWNrMV0gVGVzdCBwc2FfcmVhZCB3aXRoIGludmFsaWQgYnVmZmVyIGFkZHJcbiIsIDApOworICAgICAgICAgICAgIltDaGVjayAxXSBUZXN0IHBzYV9yZWFkIHdpdGggaW52YWxpZCBidWZmZXIgYWRkclxuIiwgMCk7CiAKICAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSk7CiAgICBpZiAoaGFuZGxlIDwgMCkKQEAgLTUyLDcgKzUyLDcgQEAKICAgIHN0YXR1c19vZl9jYWxsID0gIHBzYS0+Y2FsbChoYW5kbGUsIGludmVjLCAxLCBOVUxMLCAwKTsKIAogICAgLyogRXhwZWN0YXRpb24gaXMgc2VydmVyIHRlc3Qgc2hvdWxkIGhhbmcgYW5kIGNvbnRyb2wgc2hvdWxkbid0IGhhdmUgY29tZSBoZXJlICovCi0gICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDYWxsIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2Nlc3NlZFxuIiwgMCk7CisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRDYWxsIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2NlZWRcbiIsIDApOwogCiAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU2L3Rlc3Rfc3VwcF9pMDU2LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Ni90ZXN0X3N1cHBfaTA1Ni5jCmluZGV4IDlhNDdlM2IuLjNhODYzMTAgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU2L3Rlc3Rfc3VwcF9pMDU2LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTYvdGVzdF9zdXBwX2kwNTYuYwpAQCAtMTUsOCArMTUsMTMgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKIAogaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2FfcmVhZF93aXRoX25vdF93cml0YWJsZV9idWZmZXJfYWRkcih2b2lkKTsKIApAQCAtMzIsNzAgKzM3LDgwIEBACiAgICAgcHNhX21zZ190ICAgICAgICAgICAgICAgbXNnID0gezB9OwogICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICpidWZmZXIgPSBOVUxMOwogCi0gICAvKiBUZXN0IGlzIHRhcmdldGluZyBmYXRhbCBlcnJvciBjb25kaXRpb24gYW5kIGl0IHdpbGwgZXhwZWN0IGFuIGVycm9yIHJlY292ZXJ5KHJlYm9vdCkKLSAgICAqIHRvIGhhcHBlbi4gVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCB3YXMgaW50ZW5kZWQgYXMgcGVyIHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCisgICAvKgorICAgICogVGhpcyB0ZXN0IGNoZWNrcyBmb3IgdGhlIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uIGZvciB0aGUgUFNBIEFQSS4gQVBJJ3MgcmVzcG9uZCB0bworICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb3VsZCBiZSBlaXRoZXIgdG8gcmV0dXJuIGFwcHJvcHJpYXRlIHN0YXR1cyBjb2RlIG9yIHBhbmljIHRoZSBjYWxsZXIuCisgICAgKiBXaGVuIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pY3MsIHRoZSBTUEUgY2Fubm90IGNvbnRpbnVlIG5vcm1hbCBleGVjdXRpb24sIGFzIGRlZmluZWQKKyAgICAqIGluIHRoaXMgc3BlY2lmaWNhdGlvbi4gVGhlIGJlaGF2aW9yIG9mIHRoZSBTUE0gZm9sbG93aW5nIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pYyBpcworICAgICogSU1QTEVNRU5UQVRJT04gREVGSU5FRC0gQXJtIHJlY29tbWVuZHMgdGhhdCB0aGUgU1BNIGNhdXNlcyB0aGUgc3lzdGVtIHRvIHJlc3RhcnQgaW4KKyAgICAqIHRoaXMgc2l0dWF0aW9uLiBSZWZlciBQU0EtRkYgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFuaWMuCisgICAgKiBGb3IgdGhlIGNhc2VzIHdoZXJlLCBTUE0gY2Fubm90IGNhcGFibGUgdG8gcmVib290IHRoZSBzeXN0ZW0gKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93biksCisgICAgKiBhIHdhdGNoZG9nIHRpbWVyIHNldCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LiBUaGlzIHdpbGwKKyAgICAqIHRlc3RzIGNvbnRpbnVpdHkgYW5kIGFibGUgdG8ganVtcCB0byBuZXh0IHRlc3RzLiBUaGVyZWZvcmUsIGVhY2ggdGVzdCB3aG8gY2hlY2tzIGZvcgorICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24sIGV4cGVjdHMgc3lzdGVtIHRvIGdldCByZXNldCBlaXRoZXIgYnkgU1BNIG9yIHdhdGNoZG9nIHNldCBieQorICAgICogdGhlIHRlc3QgaGFybmVzcyBmdW5jdGlvbi4KKyAgICAqCisgICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKKyAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KKyAgICAqCisgICAgKiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIGFzIGludGVuZGVkIGJ5IHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCiAgICAgKiBkdWUgdG8gb3RoZXIgcmVhc29ucywgdGVzdCBpcyBzZXR0aW5nIGEgYm9vdCBzaWduYXR1cmUgaW50byBub24tdm9sYXRpbGUgbWVtb3J5IGJlZm9yZSBhbmQKICAgICAqIGFmdGVyIHRhcmdldGVkIHRlc3QgY2hlY2suIEFmdGVyIGEgcmVib290LCB0aGVzZSBib290IHNpZ25hdHVyZXMgYXJlIGJlaW5nIHJlYWQgYnkgdGhlCiAgICAgKiBWQUwgQVBJcyB0byBkZWNpZGUgdGVzdCBzdGF0dXMuCi0gICAgKgotICAgICogTm90ZTogSWYgU1BNIGlzIG5vdCBjYXBhYmxlIG9mIHJlYm9vdGluZyAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSBpbiBmYXRhbCBlcnJvciBjb25kaXRpb24sCi0gICAgKiBhIHdhdGNoZG9nIHRpbWVyIGVuYWJsZWQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4KLSAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZwotICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgogICAgICovCiAKLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCiAgICAgewotICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCiAgICAgLyogQWNjZXB0IHRoZSBjb25uZWN0aW9uICovCi0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKIAogICAgIC8qIFNldCBidWZmZXIgdG8gcG9pbnQgdG8gbm90IHdyaXRhYmxlIGxvY2F0aW9uIChDb2RlIG1lbW9yeSkgKi8KICAgICBidWZmZXIgPSAodm9pZCAqKSAmc2VydmVyX3Rlc3RfcHNhX3JlYWRfd2l0aF9ub3Rfd3JpdGFibGVfYnVmZmVyX2FkZHI7CiAKLSAgICAvKiBTZXJ2ZXIgcHNhX2NhbGwgKi8KLSAgICBzdGF0dXMgPSB2YWxfcHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOwotICAgIGlmICh2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCisgICAgLyogU2VydmUgcHNhX2NhbGwgKi8KKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKICAgICB7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCAtMik7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTIpOwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KLSAgICAgICAgc3RhdHVzID0gdmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUyk7Ci0gICAgICAgIGlmKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKKyAgICAgICAgc3RhdHVzID0gdmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpOworICAgICAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKICAgICAgICAgewotICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOwotICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC0zKTsKKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CisgICAgICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIC0zKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKIAotICAgICAgICAgICAgLyogVGVzdCBjaGVjay0gcHNhX3JlYWQgd2l0aCBub3Qgd3JpdGFibGUgYnVmZmVyIGFkZHIgKi8KLSAgICAgICAgICAgIHBzYV9yZWFkKG1zZy5oYW5kbGUsIDAsICh2b2lkICopYnVmZmVyLCBtc2cuaW5fc2l6ZVswXSk7CisgICAgICAgICAgICAvKiBUZXN0IGNoZWNrLSBwc2FfcmVhZCB3aXRoIG5vdCB3cml0YWJsZSBidWZmZXIgYWRkciwgY2FsbCBzaG91bGQgcGFuaWMgKi8KKyAgICAgICAgICAgIHBzYS0+cmVhZChtc2cuaGFuZGxlLCAwLCAodm9pZCAqKWJ1ZmZlciwgbXNnLmluX3NpemVbMF0pOwogCiAgICAgICAgICAgICAvKiBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KLSAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwKLSAgICAgICAgICAgICAgICAiXHRwc2FfcmVhZCB3aXRoIG5vdCB3cml0YWJsZSBidWZmZXIgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2Vzc2VkXG4iLCAwKTsKKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsCisgICAgICAgICAgICAgICAgIlx0cHNhX3JlYWQgd2l0aCBub3Qgd3JpdGFibGUgYnVmZmVyIHNob3VsZCBmYWlsZWQgYnV0IHN1Y2NlZWRcbiIsIDApOwogCiAgICAgICAgICAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KLSAgICAgICAgICAgIGlmICh2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgICAgICAgICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgICAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwotICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC00KTsKKyAgICAgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTQpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpOwotICAgIHN0YXR1cyA9ICgodmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSkKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpOworICAgIHN0YXR1cyA9ICgodmFsLT5wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZykpCiAgICAgICAgICAgICAgICA/IFZBTF9TVEFUVVNfRVJST1IgOiBzdGF0dXMpOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAgICAgcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU3L3Rlc3RfaTA1Ny5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTcvdGVzdF9pMDU3LmMKaW5kZXggNWFlZjY3NC4uMDU5NjdkNCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTcvdGVzdF9pMDU3LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTcvdGVzdF9pMDU3LmMKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwNTcuaCIKQEAgLTM5LDcgKzM5LDcgQEAKICAgIHBzYV9zdGF0dXNfdCAgICAgICBzdGF0dXNfb2ZfY2FsbDsKIAogICAgdmFsLT5wcmludChQUklOVF9URVNULAotICAgICAgICAgICAgIltDaGVjazFdIFRlc3QgcHNhX3dyaXRlIHdpdGggaW52YWxpZCBidWZmZXIgYWRkclxuIiwgMCk7CisgICAgICAgICAgICAiW0NoZWNrIDFdIFRlc3QgcHNhX3dyaXRlIHdpdGggaW52YWxpZCBidWZmZXIgYWRkclxuIiwgMCk7CiAKICAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSk7CiAgICBpZiAoaGFuZGxlIDwgMCkKQEAgLTUyLDcgKzUyLDcgQEAKICAgIHN0YXR1c19vZl9jYWxsID0gIHBzYS0+Y2FsbChoYW5kbGUsIE5VTEwsIDAsIG91dHZlYywgMSk7CiAKICAgIC8qIEV4cGVjdGF0aW9uIGlzIHNlcnZlciB0ZXN0IHNob3VsZCBoYW5nIGFuZCBjb250cm9sIHNob3VsZG4ndCBoYXZlIGNvbWUgaGVyZSAqLwotICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZXNzZWRcbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q2FsbCBzaG91bGQgZmFpbGVkIGJ1dCBzdWNjZWVkXG4iLCAwKTsKIAogICAgc3RhdHVzID0gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Ny90ZXN0X3N1cHBfaTA1Ny5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTcvdGVzdF9zdXBwX2kwNTcuYwppbmRleCA1NGQ2ZGFkLi4yYjA1MTBlIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1Ny90ZXN0X3N1cHBfaTA1Ny5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU3L3Rlc3Rfc3VwcF9pMDU3LmMKQEAgLTE1LDggKzE1LDEzIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CiAKIGludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX3dyaXRlX3dpdGhfaW52YWxpZF9idWZmZXJfYWRkcih2b2lkKTsKIApAQCAtMzQsNTIgKzM5LDY0IEBACiAgICAgbWlzY2VsbGFuZW91c19kZXNjX3QgICAgKm1pc2NfZGVzYzsKICAgICBtZW1vcnlfZGVzY190ICAgICAgICAgICAqbWVtb3J5X2Rlc2M7CiAKLSAgIC8qIFRlc3QgaXMgdGFyZ2V0aW5nIGZhdGFsIGVycm9yIGNvbmRpdGlvbiBhbmQgaXQgd2lsbCBleHBlY3QgYW4gZXJyb3IgcmVjb3ZlcnkocmVib290KQotICAgICogdG8gaGFwcGVuLiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIHdhcyBpbnRlbmRlZCBhcyBwZXIgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKKyAgIC8qCisgICAgKiBUaGlzIHRlc3QgY2hlY2tzIGZvciB0aGUgUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24gZm9yIHRoZSBQU0EgQVBJLiBBUEkncyByZXNwb25kIHRvCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvdWxkIGJlIGVpdGhlciB0byByZXR1cm4gYXBwcm9wcmlhdGUgc3RhdHVzIGNvZGUgb3IgcGFuaWMgdGhlIGNhbGxlci4KKyAgICAqIFdoZW4gYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljcywgdGhlIFNQRSBjYW5ub3QgY29udGludWUgbm9ybWFsIGV4ZWN1dGlvbiwgYXMgZGVmaW5lZAorICAgICogaW4gdGhpcyBzcGVjaWZpY2F0aW9uLiBUaGUgYmVoYXZpb3Igb2YgdGhlIFNQTSBmb2xsb3dpbmcgYSBTZWN1cmUgUGFydGl0aW9uIHBhbmljIGlzCisgICAgKiBJTVBMRU1FTlRBVElPTiBERUZJTkVELSBBcm0gcmVjb21tZW5kcyB0aGF0IHRoZSBTUE0gY2F1c2VzIHRoZSBzeXN0ZW0gdG8gcmVzdGFydCBpbgorICAgICogdGhpcyBzaXR1YXRpb24uIFJlZmVyIFBTQS1GRiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYW5pYy4KKyAgICAqIEZvciB0aGUgY2FzZXMgd2hlcmUsIFNQTSBjYW5ub3QgY2FwYWJsZSB0byByZWJvb3QgdGhlIHN5c3RlbSAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSwKKyAgICAqIGEgd2F0Y2hkb2cgdGltZXIgc2V0IGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuIFRoaXMgd2lsbAorICAgICogdGVzdHMgY29udGludWl0eSBhbmQgYWJsZSB0byBqdW1wIHRvIG5leHQgdGVzdHMuIFRoZXJlZm9yZSwgZWFjaCB0ZXN0IHdobyBjaGVja3MgZm9yCisgICAgKiBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiwgZXhwZWN0cyBzeXN0ZW0gdG8gZ2V0IHJlc2V0IGVpdGhlciBieSBTUE0gb3Igd2F0Y2hkb2cgc2V0IGJ5CisgICAgKiB0aGUgdGVzdCBoYXJuZXNzIGZ1bmN0aW9uLgorICAgICoKKyAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZworICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgorICAgICoKKyAgICAqIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgYXMgaW50ZW5kZWQgYnkgdGVzdCBzY2VuYXJpbyBvciBpdCBoYXBwZW5kZWQKICAgICAqIGR1ZSB0byBvdGhlciByZWFzb25zLCB0ZXN0IGlzIHNldHRpbmcgYSBib290IHNpZ25hdHVyZSBpbnRvIG5vbi12b2xhdGlsZSBtZW1vcnkgYmVmb3JlIGFuZAogICAgICogYWZ0ZXIgdGFyZ2V0ZWQgdGVzdCBjaGVjay4gQWZ0ZXIgYSByZWJvb3QsIHRoZXNlIGJvb3Qgc2lnbmF0dXJlcyBhcmUgYmVpbmcgcmVhZCBieSB0aGUKICAgICAqIFZBTCBBUElzIHRvIGRlY2lkZSB0ZXN0IHN0YXR1cy4KLSAgICAqCi0gICAgKiBOb3RlOiBJZiBTUE0gaXMgbm90IGNhcGFibGUgb2YgcmVib290aW5nIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pIGluIGZhdGFsIGVycm9yIGNvbmRpdGlvbiwKLSAgICAqIGEgd2F0Y2hkb2cgdGltZXIgZW5hYmxlZCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LgotICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCi0gICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCiAgICAgKi8KIAotICAgIHN0YXR1cyA9IHZhbF9wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7Ci0gICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKSkKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKSkKICAgICB7Ci0gICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKIAotICAgIC8qIFNlbGVjdGlvbiBvZiBpbnZhbGlkIGJ1ZmZlciBhZGRyOgorICAgIC8qCisgICAgICogU2VsZWN0aW9uIG9mIGludmFsaWQgYnVmZmVyIGFkZHI6CisgICAgICoKICAgICAgKiAgaWYgKElTT0xBVElPTl9MRVZFTCA+IDEpCiAgICAgICogICAgICAgYnVmZmVyID0gZHJpdmVyX21taW9fcmVnaW9uX2Jhc2U7CiAgICAgICogIGVsc2UKICAgICAgKiAgICAgICBidWZmZXIgPSBOVUxMOwogICAgICAqLwogCi0gICAgc3RhdHVzID0gdmFsX3RhcmdldF9nZXRfY29uZmlnKFRBUkdFVF9DT05GSUdfQ1JFQVRFX0lEKEdST1VQX01JU0NFTExBTkVPVVMsCisgICAgc3RhdHVzID0gdmFsLT50YXJnZXRfZ2V0X2NvbmZpZyhUQVJHRVRfQ09ORklHX0NSRUFURV9JRChHUk9VUF9NSVNDRUxMQU5FT1VTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSVNDRUxMQU5FT1VTX0RVVCwgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QgKiopJm1pc2NfZGVzYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QgKilzaXplb2YobWlzY2VsbGFuZW91c19kZXNjX3QpKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQorICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAogICAgIGlmIChtaXNjX2Rlc2MtPmltcGxlbWVudGVkX3BzYV9maXJtd2FyZV9pc29sYXRpb25fbGV2ZWwgPiBMRVZFTDEpCiAgICAgewotICAgICAgICBzdGF0dXMgPSB2YWxfdGFyZ2V0X2dldF9jb25maWcoVEFSR0VUX0NPTkZJR19DUkVBVEVfSUQoR1JPVVBfTUVNT1JZLAorICAgICAgICBzdGF0dXMgPSB2YWwtPnRhcmdldF9nZXRfY29uZmlnKFRBUkdFVF9DT05GSUdfQ1JFQVRFX0lEKEdST1VQX01FTU9SWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVNT1JZX0RSSVZFUl9QQVJUSVRJT05fTU1JTywgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90ICoqKSZtZW1vcnlfZGVzYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90ICopc2l6ZW9mKG1lbW9yeV9kZXNjX3QpKTsKLSAgICAgICAgaWYgKHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKKyAgICAgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMyksIHN0YXR1cykpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgICAgICB9CiAKQEAgLTg3LDQ2ICsxMDQsNDYgQEAKICAgICB9CiAKICAgICAvKiBBY2NlcHQgdGhlIGNvbm5lY3Rpb24gKi8KLSAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOwogCiAgICAgLyogU2VydmVyIHBzYV9jYWxsICovCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIC0yKTsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCAtMik7CiAgICAgfQogICAgIGVsc2UKICAgICB7CiAgICAgICAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLwotICAgICAgICBzdGF0dXMgPSB2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKTsKLSAgICAgICAgaWYodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDUpLCBzdGF0dXMpKQorICAgICAgICBzdGF0dXMgPSB2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUyk7CisgICAgICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDUpLCBzdGF0dXMpKQogICAgICAgICB7Ci0gICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7Ci0gICAgICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgLTMpOworICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTMpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgLyogVGVzdCBjaGVjay0gcHNhX3dyaXRlIHdpdGggaW52YWxpZCBidWZmZXIgYWRkciAqLwotICAgICAgICAgICAgcHNhX3dyaXRlKG1zZy5oYW5kbGUsIDAsICh2b2lkICopYnVmZmVyLCBtc2cuaW5fc2l6ZVswXSk7CisgICAgICAgICAgICAvKiBUZXN0IGNoZWNrLSBwc2Ffd3JpdGUgd2l0aCBpbnZhbGlkIGJ1ZmZlciBhZGRyLCBjYWxsIHNob3VsZCBwYW5pYyAqLworICAgICAgICAgICAgcHNhLT53cml0ZShtc2cuaGFuZGxlLCAwLCAodm9pZCAqKWJ1ZmZlciwgbXNnLm91dF9zaXplWzBdKTsKIAogICAgICAgICAgICAgLyogc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCi0gICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsCi0gICAgICAgICAgICAgICAgIlx0cHNhX3dyaXRlIHdpdGggaW52YWxpZCBidWZmZXIgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2Vzc2VkXG4iLCAwKTsKKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsCisgICAgICAgICAgICAgICAgIlx0cHNhX3dyaXRlIHdpdGggaW52YWxpZCBidWZmZXIgc2hvdWxkIGZhaWxlZCBidXQgc3VjY2VlZFxuIiwgMCk7CiAKICAgICAgICAgICAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLwotICAgICAgICAgICAgaWYgKHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCisgICAgICAgICAgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7Ci0gICAgICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgLTQpOworICAgICAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCAtNCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2YWxfZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwNiksIHN0YXR1cyk7Ci0gICAgc3RhdHVzID0gKCh2YWxfcHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpKQorICAgIHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwNiksIHN0YXR1cyk7CisgICAgc3RhdHVzID0gKCh2YWwtPnByb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSkKICAgICAgICAgICAgICAgID8gVkFMX1NUQVRVU19FUlJPUiA6IHN0YXR1cyk7Ci0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKICAgICByZXR1cm4gc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTgvdGVzdF9pMDU4LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1OC90ZXN0X2kwNTguYwppbmRleCA0OWUyYTkyLi42NjM5Y2QwIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1OC90ZXN0X2kwNTguYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1OC90ZXN0X2kwNTguYwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTA1OC5oIgpAQCAtNDAsNyArNDAsNyBAQAogI2VuZGlmCiAKICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwKLSAgICAgICAgICAgICJbQ2hlY2sxXSBUZXN0IFBTQV9ET09SQkVMTCBzaWduYWxcbiIsIDApOworICAgICAgICAgICAgIltDaGVjayAxXSBUZXN0IFBTQV9ET09SQkVMTCBzaWduYWxcbiIsIDApOwogCiAgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpOwogICAgaWYgKGhhbmRsZSA8IDApCkBAIC02MCw3ICs2MCw4IEBACiAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0cHNhX3dhaXQgZGlkbid0IHJlY2VpdmUgZG9vcmJlbGwgc2lnbmFsXG4iLCAwKTsKICAgIH0KIAotICAgLyogV2FpdCBmb3IgZG9vcmJhbGwgbm90aWZpY2F0aW9uIGFnYWluIHRvIGNoZWNrIC0KKyAgIC8qCisgICAgKiBXYWl0IGZvciBkb29yYmFsbCBub3RpZmljYXRpb24gYWdhaW4gdG8gY2hlY2sgLQogICAgICogRG9vcmJlbGwgc2hvdWxkIHJlbWFpbiBhc3NlcnRlZCB1bnRpbCBwc2FfY2xlYXIgaXMgY2FsbGVkLgogICAgICovCiAgICBzaWduYWxzID0gcHNhX3dhaXQoUFNBX0RPT1JCRUxMLCBQU0FfQkxPQ0spOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTgvdGVzdF9zdXBwX2kwNTguYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU4L3Rlc3Rfc3VwcF9pMDU4LmMKaW5kZXggZTNlZDNiOS4uOWEwMWVmNyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTgvdGVzdF9zdXBwX2kwNTguYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1OC90ZXN0X3N1cHBfaTA1OC5jCkBAIC0xNSw4ICsxNSwxMyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KIAotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKworI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfc2VydmVyX3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfc2VydmVyX3NwKQorZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOwogCiBpbnQzMl90IHNlcnZlcl90ZXN0X3BzYV9kb29yYmVsbF9zaWduYWwodm9pZCk7CiAKQEAgLTMyLDMyICszNywzMiBAQAogICAgIHBzYV9tc2dfdCAgICAgICAgICAgICAgIG1zZyA9IHswfTsKIAogICAgIC8qIFNlcnZlIHBzYV9jb25uZWN0ICovCi0gICAgc3RhdHVzID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKLSAgICBpZiAodmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQogICAgIHsKLSAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAogICAgIC8qIEFjY2VwdCB0aGUgY29ubmVjdGlvbiAqLwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CiAKICAgICBpZiAobXNnLmNsaWVudF9pZCA+IDApCiAgICAgewogICAgICAgICAvKiBEb29yYmVsbCBzaWduYWwgdG8gY2xpZW50IHBhcnRpdGl0b24gKi8KLSAgICAgICAgcHNhX25vdGlmeShtc2cuY2xpZW50X2lkKTsKKyAgICAgICAgcHNhLT5ub3RpZnkobXNnLmNsaWVudF9pZCk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CiAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKLSAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiQ2FsbGVyIGlzIGZyb20gbm9uLXNlY3VyZVxuIiwgMCk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJDYWxsZXIgaXMgZnJvbSBub24tc2VjdXJlXG4iLCAwKTsKICAgICB9CiAKICAgICAvKiBTZXJ2ZSBwc2FfY2xvc2UgKi8KLSAgICBzdGF0dXMgPSAoKHZhbF9wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZykpCisgICAgc3RhdHVzID0gKCh2YWwtPnByb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSkKICAgICAgICAgICAgICAgID8gVkFMX1NUQVRVU19FUlJPUiA6IHN0YXR1cyk7Ci0gICAgdmFsX2Vycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpOwotICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgdmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKTsKKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKIAogICAgIHJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1OS90ZXN0X2kwNTkuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU5L3Rlc3RfaTA1OS5jCmluZGV4IDZlYmViZjkuLjBmNGMzYjcgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU5L3Rlc3RfaTA1OS5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU5L3Rlc3RfaTA1OS5jCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDU5LmgiCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1OS90ZXN0X3N1cHBfaTA1OS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNTkvdGVzdF9zdXBwX2kwNTkuYwppbmRleCA5NGQ2MjlkLi5lZDA4Nzg0IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA1OS90ZXN0X3N1cHBfaTA1OS5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDU5L3Rlc3Rfc3VwcF9pMDU5LmMKQEAgLTE1LDggKzE1LDEzIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CiAKICNkZWZpbmUgTkVHX1BBUlRfSUQgLTEwCiAKQEAgLTMxLDM3ICszNiw0NyBAQAogaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2Ffbm90aWZ5X3dpdGhfbmVnX3BhcnRfaWQodm9pZCkKIHsKIAotICAgLyogVGVzdCBpcyB0YXJnZXRpbmcgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCBpdCB3aWxsIGV4cGVjdCBhbiBlcnJvciByZWNvdmVyeShyZWJvb3QpCi0gICAgKiB0byBoYXBwZW4uIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgd2FzIGludGVuZGVkIGFzIHBlciB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAxXSBUZXN0IHBzYV9ub3RpZnkgd2l0aCBuZWcgcGFydGl0aW9uIGlkXG4iLCAwKTsKKworICAgLyoKKyAgICAqIFRoaXMgdGVzdCBjaGVja3MgZm9yIHRoZSBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiBmb3IgdGhlIFBTQSBBUEkuIEFQSSdzIHJlc3BvbmQgdG8KKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY291bGQgYmUgZWl0aGVyIHRvIHJldHVybiBhcHByb3ByaWF0ZSBzdGF0dXMgY29kZSBvciBwYW5pYyB0aGUgY2FsbGVyLgorICAgICogV2hlbiBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWNzLCB0aGUgU1BFIGNhbm5vdCBjb250aW51ZSBub3JtYWwgZXhlY3V0aW9uLCBhcyBkZWZpbmVkCisgICAgKiBpbiB0aGlzIHNwZWNpZmljYXRpb24uIFRoZSBiZWhhdmlvciBvZiB0aGUgU1BNIGZvbGxvd2luZyBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWMgaXMKKyAgICAqIElNUExFTUVOVEFUSU9OIERFRklORUQtIEFybSByZWNvbW1lbmRzIHRoYXQgdGhlIFNQTSBjYXVzZXMgdGhlIHN5c3RlbSB0byByZXN0YXJ0IGluCisgICAgKiB0aGlzIHNpdHVhdGlvbi4gUmVmZXIgUFNBLUZGIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhbmljLgorICAgICogRm9yIHRoZSBjYXNlcyB3aGVyZSwgU1BNIGNhbm5vdCBjYXBhYmxlIHRvIHJlYm9vdCB0aGUgc3lzdGVtIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBzZXQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4gVGhpcyB3aWxsCisgICAgKiB0ZXN0cyBjb250aW51aXR5IGFuZCBhYmxlIHRvIGp1bXAgdG8gbmV4dCB0ZXN0cy4gVGhlcmVmb3JlLCBlYWNoIHRlc3Qgd2hvIGNoZWNrcyBmb3IKKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uLCBleHBlY3RzIHN5c3RlbSB0byBnZXQgcmVzZXQgZWl0aGVyIGJ5IFNQTSBvciB3YXRjaGRvZyBzZXQgYnkKKyAgICAqIHRoZSB0ZXN0IGhhcm5lc3MgZnVuY3Rpb24uCisgICAgKgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKgorICAgICogVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCBhcyBpbnRlbmRlZCBieSB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAogICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCiAgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQogICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgotICAgICoKLSAgICAqIE5vdGU6IElmIFNQTSBpcyBub3QgY2FwYWJsZSBvZiByZWJvb3RpbmcgKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93bikgaW4gZmF0YWwgZXJyb3IgY29uZGl0aW9uLAotICAgICogYSB3YXRjaGRvZyB0aW1lciBlbmFibGVkIGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuCi0gICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKLSAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KICAgICAqLwogCi0gICAgdmFsX3ByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sxXSBUZXN0IHBzYV9ub3RpZnkgd2l0aCBuZWcgcGFydGl0aW9uIGlkXG4iLCAwKTsKLQogICAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLwotICAgIGlmICh2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKSkKKyAgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpKQogICAgIHsKLSAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOworICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOwogICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKICAgICB9CiAKLSAgICAvKiBwc2Ffbm90aWZ5X3dpdGhfbmVnX3BhcnRfaWQgKi8KLSAgICBwc2Ffbm90aWZ5KE5FR19QQVJUX0lEKTsKKyAgICAvKiBwc2Ffbm90aWZ5X3dpdGhfbmVnX3BhcnRfaWQsIGNhbGwgc2hvdWxkIHBhbmljICovCisgICAgcHNhLT5ub3RpZnkoTkVHX1BBUlRfSUQpOwogCiAgICAgLyogc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCi0gICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRwc2Ffbm90aWZ5KC12ZV9wYXJ0X2lwKSBjaGVjayBmYWlsZWRcbiIsIDApOworICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdHBzYS0+bm90aWZ5KC12ZV9wYXJ0X2lwKSBjaGVjayBmYWlsZWRcbiIsIDApOwogCiAgICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCi0gICAgaWYgKHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCisgICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQogICAgIHsKLSAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2MC90ZXN0X2kwNjAuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYwL3Rlc3RfaTA2MC5jCmluZGV4IDNjNjliNGMuLmQyZjE3YTQgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYwL3Rlc3RfaTA2MC5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYwL3Rlc3RfaTA2MC5jCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2Vsc2UKICNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKICNlbmRpZgogCiAjaW5jbHVkZSAidGVzdF9pMDYwLmgiCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2MC90ZXN0X3N1cHBfaTA2MC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjAvdGVzdF9zdXBwX2kwNjAuYwppbmRleCA5Y2U3ODg2Li4wNWIzYjdmIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2MC90ZXN0X3N1cHBfaTA2MC5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYwL3Rlc3Rfc3VwcF9pMDYwLmMKQEAgLTE1LDggKzE1LDEzIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CiAKICNkZWZpbmUgSU5WQUxJRF9QT1NJVElWRV9QQVJUX0lEIDIwMAogCkBAIC0zMSwzNyArMzYsNDcgQEAKIGludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX25vdGlmeV93aXRoX2ludmFsaWRfcG9zX3BhcnRfaWQodm9pZCkKIHsKIAotICAgLyogVGVzdCBpcyB0YXJnZXRpbmcgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCBpdCB3aWxsIGV4cGVjdCBhbiBlcnJvciByZWNvdmVyeShyZWJvb3QpCi0gICAgKiB0byBoYXBwZW4uIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgd2FzIGludGVuZGVkIGFzIHBlciB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAxXSBUZXN0IHBzYV9ub3RpZnkgd2l0aCBpbnZhbGlkIHBvc2l0aXZlIHBhcnQtaWRcbiIsIDApOworCisgICAvKgorICAgICogVGhpcyB0ZXN0IGNoZWNrcyBmb3IgdGhlIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uIGZvciB0aGUgUFNBIEFQSS4gQVBJJ3MgcmVzcG9uZCB0bworICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb3VsZCBiZSBlaXRoZXIgdG8gcmV0dXJuIGFwcHJvcHJpYXRlIHN0YXR1cyBjb2RlIG9yIHBhbmljIHRoZSBjYWxsZXIuCisgICAgKiBXaGVuIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pY3MsIHRoZSBTUEUgY2Fubm90IGNvbnRpbnVlIG5vcm1hbCBleGVjdXRpb24sIGFzIGRlZmluZWQKKyAgICAqIGluIHRoaXMgc3BlY2lmaWNhdGlvbi4gVGhlIGJlaGF2aW9yIG9mIHRoZSBTUE0gZm9sbG93aW5nIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pYyBpcworICAgICogSU1QTEVNRU5UQVRJT04gREVGSU5FRC0gQXJtIHJlY29tbWVuZHMgdGhhdCB0aGUgU1BNIGNhdXNlcyB0aGUgc3lzdGVtIHRvIHJlc3RhcnQgaW4KKyAgICAqIHRoaXMgc2l0dWF0aW9uLiBSZWZlciBQU0EtRkYgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFuaWMuCisgICAgKiBGb3IgdGhlIGNhc2VzIHdoZXJlLCBTUE0gY2Fubm90IGNhcGFibGUgdG8gcmVib290IHRoZSBzeXN0ZW0gKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93biksCisgICAgKiBhIHdhdGNoZG9nIHRpbWVyIHNldCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LiBUaGlzIHdpbGwKKyAgICAqIHRlc3RzIGNvbnRpbnVpdHkgYW5kIGFibGUgdG8ganVtcCB0byBuZXh0IHRlc3RzLiBUaGVyZWZvcmUsIGVhY2ggdGVzdCB3aG8gY2hlY2tzIGZvcgorICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24sIGV4cGVjdHMgc3lzdGVtIHRvIGdldCByZXNldCBlaXRoZXIgYnkgU1BNIG9yIHdhdGNoZG9nIHNldCBieQorICAgICogdGhlIHRlc3QgaGFybmVzcyBmdW5jdGlvbi4KKyAgICAqCisgICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKKyAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KKyAgICAqCisgICAgKiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIGFzIGludGVuZGVkIGJ5IHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCiAgICAgKiBkdWUgdG8gb3RoZXIgcmVhc29ucywgdGVzdCBpcyBzZXR0aW5nIGEgYm9vdCBzaWduYXR1cmUgaW50byBub24tdm9sYXRpbGUgbWVtb3J5IGJlZm9yZSBhbmQKICAgICAqIGFmdGVyIHRhcmdldGVkIHRlc3QgY2hlY2suIEFmdGVyIGEgcmVib290LCB0aGVzZSBib290IHNpZ25hdHVyZXMgYXJlIGJlaW5nIHJlYWQgYnkgdGhlCiAgICAgKiBWQUwgQVBJcyB0byBkZWNpZGUgdGVzdCBzdGF0dXMuCi0gICAgKgotICAgICogTm90ZTogSWYgU1BNIGlzIG5vdCBjYXBhYmxlIG9mIHJlYm9vdGluZyAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSBpbiBmYXRhbCBlcnJvciBjb25kaXRpb24sCi0gICAgKiBhIHdhdGNoZG9nIHRpbWVyIGVuYWJsZWQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4KLSAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZwotICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgogICAgICovCiAKLSAgICB2YWxfcHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazFdIFRlc3QgcHNhX25vdGlmeSB3aXRoIGludmFsaWQgcG9zaXRpdmUgcGFydC1pZFxuIiwgMCk7Ci0KICAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KLSAgICBpZiAodmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUykpCisgICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKSkKICAgICB7Ci0gICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CiAgICAgfQogCi0gICAgLyogcHNhX25vdGlmeV93aXRoX2ludmFsaWRfcG9zX3BhcnRfaWQgKi8KLSAgICBwc2Ffbm90aWZ5KElOVkFMSURfUE9TSVRJVkVfUEFSVF9JRCk7CisgICAgLyogcHNhX25vdGlmeV93aXRoX2ludmFsaWRfcG9zX3BhcnRfaWQsIGNhbGwgc2hvdWxkIHBhbmljICovCisgICAgcHNhLT5ub3RpZnkoSU5WQUxJRF9QT1NJVElWRV9QQVJUX0lEKTsKIAogICAgIC8qIHNob3VsZG4ndCBoYXZlIHJlYWNoZWQgaGVyZSAqLwotICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0cHNhX25vdGlmeShpbnZhbGlkXyt2ZV9fcGFydF9pcCkgY2hlY2sgZmFpbGVkXG4iLCAwKTsKKyAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRwc2EtPm5vdGlmeShpbnZhbGlkXyt2ZV9fcGFydF9pcCkgY2hlY2sgZmFpbGVkXG4iLCAwKTsKIAogICAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLwotICAgIGlmICh2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKICAgICB7Ci0gICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CiAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjEvdGVzdF9pMDYxLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2MS90ZXN0X2kwNjEuYwppbmRleCAxZjljZDRlLi40YmUyMWE2IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2MS90ZXN0X2kwNjEuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2MS90ZXN0X2kwNjEuYwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTA2MS5oIgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjEvdGVzdF9zdXBwX2kwNjEuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYxL3Rlc3Rfc3VwcF9pMDYxLmMKaW5kZXggNzIwOTAzZi4uMTU0MjExNCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjEvdGVzdF9zdXBwX2kwNjEuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2MS90ZXN0X3N1cHBfaTA2MS5jCkBAIC0xNSw4ICsxNSwxMyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KIAotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKworI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfc2VydmVyX3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfc2VydmVyX3NwKQorZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOwogCiBpbnQzMl90IHNlcnZlcl90ZXN0X3BzYV9jbGVhcl9hdF91bmFzc2VydGVkX2Rvb3JiZWxsX3NpZyh2b2lkKTsKIApAQCAtMjksMzcgKzM0LDQ3IEBACiBpbnQzMl90IHNlcnZlcl90ZXN0X3BzYV9jbGVhcl9hdF91bmFzc2VydGVkX2Rvb3JiZWxsX3NpZyh2b2lkKQogewogCi0gICAvKiBUZXN0IGlzIHRhcmdldGluZyBmYXRhbCBlcnJvciBjb25kaXRpb24gYW5kIGl0IHdpbGwgZXhwZWN0IGFuIGVycm9yIHJlY292ZXJ5KHJlYm9vdCkKLSAgICAqIHRvIGhhcHBlbi4gVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCB3YXMgaW50ZW5kZWQgYXMgcGVyIHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCisgICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDFdIFRlc3QgcHNhX2NsZWFyIGF0IHVuYXNzZXJ0ZWQgZG9vcmJlbGwgc2lnXG4iLCAwKTsKKworICAgLyoKKyAgICAqIFRoaXMgdGVzdCBjaGVja3MgZm9yIHRoZSBQUk9HUkFNTUVSIEVSUk9SIGNvbmRpdGlvbiBmb3IgdGhlIFBTQSBBUEkuIEFQSSdzIHJlc3BvbmQgdG8KKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY291bGQgYmUgZWl0aGVyIHRvIHJldHVybiBhcHByb3ByaWF0ZSBzdGF0dXMgY29kZSBvciBwYW5pYyB0aGUgY2FsbGVyLgorICAgICogV2hlbiBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWNzLCB0aGUgU1BFIGNhbm5vdCBjb250aW51ZSBub3JtYWwgZXhlY3V0aW9uLCBhcyBkZWZpbmVkCisgICAgKiBpbiB0aGlzIHNwZWNpZmljYXRpb24uIFRoZSBiZWhhdmlvciBvZiB0aGUgU1BNIGZvbGxvd2luZyBhIFNlY3VyZSBQYXJ0aXRpb24gcGFuaWMgaXMKKyAgICAqIElNUExFTUVOVEFUSU9OIERFRklORUQtIEFybSByZWNvbW1lbmRzIHRoYXQgdGhlIFNQTSBjYXVzZXMgdGhlIHN5c3RlbSB0byByZXN0YXJ0IGluCisgICAgKiB0aGlzIHNpdHVhdGlvbi4gUmVmZXIgUFNBLUZGIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhbmljLgorICAgICogRm9yIHRoZSBjYXNlcyB3aGVyZSwgU1BNIGNhbm5vdCBjYXBhYmxlIHRvIHJlYm9vdCB0aGUgc3lzdGVtIChqdXN0IGhhbmdzIG9yIHBvd2VyIGRvd24pLAorICAgICogYSB3YXRjaGRvZyB0aW1lciBzZXQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4gVGhpcyB3aWxsCisgICAgKiB0ZXN0cyBjb250aW51aXR5IGFuZCBhYmxlIHRvIGp1bXAgdG8gbmV4dCB0ZXN0cy4gVGhlcmVmb3JlLCBlYWNoIHRlc3Qgd2hvIGNoZWNrcyBmb3IKKyAgICAqIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uLCBleHBlY3RzIHN5c3RlbSB0byBnZXQgcmVzZXQgZWl0aGVyIGJ5IFNQTSBvciB3YXRjaGRvZyBzZXQgYnkKKyAgICAqIHRoZSB0ZXN0IGhhcm5lc3MgZnVuY3Rpb24uCisgICAgKgorICAgICogSWYgcHJvZ3JhbW1lZCB0aW1lb3V0IHZhbHVlIGlzbid0IHN1ZmZpY2llbnQgZm9yIHlvdXIgc3lzdGVtLCBpdCBjYW4gYmUgcmVjb25maWd1cmVkIHVzaW5nCisgICAgKiB0aW1lb3V0IGVudHJpZXMgYXZhaWxhYmxlIGluIHRhcmdldC5jZmcuCisgICAgKgorICAgICogVG8gZGVjaWRlLCBhIHJlYm9vdCBoYXBwZW5lZCBhcyBpbnRlbmRlZCBieSB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAogICAgICogZHVlIHRvIG90aGVyIHJlYXNvbnMsIHRlc3QgaXMgc2V0dGluZyBhIGJvb3Qgc2lnbmF0dXJlIGludG8gbm9uLXZvbGF0aWxlIG1lbW9yeSBiZWZvcmUgYW5kCiAgICAgKiBhZnRlciB0YXJnZXRlZCB0ZXN0IGNoZWNrLiBBZnRlciBhIHJlYm9vdCwgdGhlc2UgYm9vdCBzaWduYXR1cmVzIGFyZSBiZWluZyByZWFkIGJ5IHRoZQogICAgICogVkFMIEFQSXMgdG8gZGVjaWRlIHRlc3Qgc3RhdHVzLgotICAgICoKLSAgICAqIE5vdGU6IElmIFNQTSBpcyBub3QgY2FwYWJsZSBvZiByZWJvb3RpbmcgKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93bikgaW4gZmF0YWwgZXJyb3IgY29uZGl0aW9uLAotICAgICogYSB3YXRjaGRvZyB0aW1lciBlbmFibGVkIGJ5IHZhbF90ZXN0X2luaXQgY2FuIHJlYm9vdCB0aGUgc3lzdGVtIG9uIHRpbWVvdXQgZXZlbnQuCi0gICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKLSAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KICAgICAqLwogCi0gICAgdmFsX3ByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sxXSBUZXN0IHBzYV9jbGVhciBhdCB1bmFzc2VydGVkIGRvb3JiZWxsIHNpZ1xuIiwgMCk7Ci0KICAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KLSAgICBpZiAodmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUykpCisgICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKSkKICAgICB7Ci0gICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CiAgICAgfQogCi0gICAgLyogcHNhX2NsZWFyIHdoZW4gdW5hc3NlcnRlZCBkb29yYmVsbCBzaWcgKi8KLSAgICBwc2FfY2xlYXIoKTsKKyAgICAvKiBwc2FfY2xlYXIgd2hlbiB1bmFzc2VydGVkIGRvb3JiZWxsIHNpZywgY2FsbCBzaG91bGQgcGFuaWMgKi8KKyAgICBwc2EtPmNsZWFyKCk7CiAKICAgICAvKiBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KLSAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdHBzYV9jbGVhcigpIGNoZWNrIGZhaWxlZCBmb3IgdW5hc3NlcnRlZCBkb29yYmVsIHNpZ25hbFxuIiwgMCk7CisgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0cHNhLT5jbGVhcigpIGNoZWNrIGZhaWxlZCBmb3IgdW5hc3NlcnRlZCBkb29yYmVsIHNpZ25hbFxuIiwgMCk7CiAKICAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KLSAgICBpZiAodmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCiAgICAgewotICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOwogICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYyL3Rlc3RfaTA2Mi5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjIvdGVzdF9pMDYyLmMKaW5kZXggZmIyOGZlMS4uZjlmZjRjYiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjIvdGVzdF9pMDYyLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjIvdGVzdF9pMDYyLmMKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwNjIuaCIKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYyL3Rlc3Rfc3VwcF9pMDYyLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2Mi90ZXN0X3N1cHBfaTA2Mi5jCmluZGV4IDgwMjljMGEuLjMwZTJkNWQgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYyL3Rlc3Rfc3VwcF9pMDYyLmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjIvdGVzdF9zdXBwX2kwNjIuYwpAQCAtMTUsOCArMTUsMTMgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKIAogLyogc2lnbmFsIGJpdC0zMSBzaG91bGQgYmUgdW5hc3NpZ25lZCB0byBzZXJ2ZXIgcGFydGl0aW9uICovCiAjZGVmaW5lIElOVkFMSURfU0lHTkFMX01BU0sgMHg4MDAwMDAwMApAQCAtMzIsMzcgKzM3LDQ3IEBACiBpbnQzMl90IHNlcnZlcl90ZXN0X3BzYV93YWl0X3dpdGhfdW5hc3NpZ25lZF9zaWduYWwodm9pZCkKIHsKIAotICAgLyogVGVzdCBpcyB0YXJnZXRpbmcgZmF0YWwgZXJyb3IgY29uZGl0aW9uIGFuZCBpdCB3aWxsIGV4cGVjdCBhbiBlcnJvciByZWNvdmVyeShyZWJvb3QpCi0gICAgKiB0byBoYXBwZW4uIFRvIGRlY2lkZSwgYSByZWJvb3QgaGFwcGVuZWQgd2FzIGludGVuZGVkIGFzIHBlciB0ZXN0IHNjZW5hcmlvIG9yIGl0IGhhcHBlbmRlZAorICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAxXSBUZXN0IHBzYV93YWl0IHdpdGggdW5hc3NpZ25lZCBzaWduYWxcbiIsIDApOworCisgICAvKgorICAgICogVGhpcyB0ZXN0IGNoZWNrcyBmb3IgdGhlIFBST0dSQU1NRVIgRVJST1IgY29uZGl0aW9uIGZvciB0aGUgUFNBIEFQSS4gQVBJJ3MgcmVzcG9uZCB0bworICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb3VsZCBiZSBlaXRoZXIgdG8gcmV0dXJuIGFwcHJvcHJpYXRlIHN0YXR1cyBjb2RlIG9yIHBhbmljIHRoZSBjYWxsZXIuCisgICAgKiBXaGVuIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pY3MsIHRoZSBTUEUgY2Fubm90IGNvbnRpbnVlIG5vcm1hbCBleGVjdXRpb24sIGFzIGRlZmluZWQKKyAgICAqIGluIHRoaXMgc3BlY2lmaWNhdGlvbi4gVGhlIGJlaGF2aW9yIG9mIHRoZSBTUE0gZm9sbG93aW5nIGEgU2VjdXJlIFBhcnRpdGlvbiBwYW5pYyBpcworICAgICogSU1QTEVNRU5UQVRJT04gREVGSU5FRC0gQXJtIHJlY29tbWVuZHMgdGhhdCB0aGUgU1BNIGNhdXNlcyB0aGUgc3lzdGVtIHRvIHJlc3RhcnQgaW4KKyAgICAqIHRoaXMgc2l0dWF0aW9uLiBSZWZlciBQU0EtRkYgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcGFuaWMuCisgICAgKiBGb3IgdGhlIGNhc2VzIHdoZXJlLCBTUE0gY2Fubm90IGNhcGFibGUgdG8gcmVib290IHRoZSBzeXN0ZW0gKGp1c3QgaGFuZ3Mgb3IgcG93ZXIgZG93biksCisgICAgKiBhIHdhdGNoZG9nIHRpbWVyIHNldCBieSB2YWxfdGVzdF9pbml0IGNhbiByZWJvb3QgdGhlIHN5c3RlbSBvbiB0aW1lb3V0IGV2ZW50LiBUaGlzIHdpbGwKKyAgICAqIHRlc3RzIGNvbnRpbnVpdHkgYW5kIGFibGUgdG8ganVtcCB0byBuZXh0IHRlc3RzLiBUaGVyZWZvcmUsIGVhY2ggdGVzdCB3aG8gY2hlY2tzIGZvcgorICAgICogUFJPR1JBTU1FUiBFUlJPUiBjb25kaXRpb24sIGV4cGVjdHMgc3lzdGVtIHRvIGdldCByZXNldCBlaXRoZXIgYnkgU1BNIG9yIHdhdGNoZG9nIHNldCBieQorICAgICogdGhlIHRlc3QgaGFybmVzcyBmdW5jdGlvbi4KKyAgICAqCisgICAgKiBJZiBwcm9ncmFtbWVkIHRpbWVvdXQgdmFsdWUgaXNuJ3Qgc3VmZmljaWVudCBmb3IgeW91ciBzeXN0ZW0sIGl0IGNhbiBiZSByZWNvbmZpZ3VyZWQgdXNpbmcKKyAgICAqIHRpbWVvdXQgZW50cmllcyBhdmFpbGFibGUgaW4gdGFyZ2V0LmNmZy4KKyAgICAqCisgICAgKiBUbyBkZWNpZGUsIGEgcmVib290IGhhcHBlbmVkIGFzIGludGVuZGVkIGJ5IHRlc3Qgc2NlbmFyaW8gb3IgaXQgaGFwcGVuZGVkCiAgICAgKiBkdWUgdG8gb3RoZXIgcmVhc29ucywgdGVzdCBpcyBzZXR0aW5nIGEgYm9vdCBzaWduYXR1cmUgaW50byBub24tdm9sYXRpbGUgbWVtb3J5IGJlZm9yZSBhbmQKICAgICAqIGFmdGVyIHRhcmdldGVkIHRlc3QgY2hlY2suIEFmdGVyIGEgcmVib290LCB0aGVzZSBib290IHNpZ25hdHVyZXMgYXJlIGJlaW5nIHJlYWQgYnkgdGhlCiAgICAgKiBWQUwgQVBJcyB0byBkZWNpZGUgdGVzdCBzdGF0dXMuCi0gICAgKgotICAgICogTm90ZTogSWYgU1BNIGlzIG5vdCBjYXBhYmxlIG9mIHJlYm9vdGluZyAoanVzdCBoYW5ncyBvciBwb3dlciBkb3duKSBpbiBmYXRhbCBlcnJvciBjb25kaXRpb24sCi0gICAgKiBhIHdhdGNoZG9nIHRpbWVyIGVuYWJsZWQgYnkgdmFsX3Rlc3RfaW5pdCBjYW4gcmVib290IHRoZSBzeXN0ZW0gb24gdGltZW91dCBldmVudC4KLSAgICAqIElmIHByb2dyYW1tZWQgdGltZW91dCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50IGZvciB5b3VyIHN5c3RlbSwgaXQgY2FuIGJlIHJlY29uZmlndXJlZCB1c2luZwotICAgICogdGltZW91dCBlbnRyaWVzIGF2YWlsYWJsZSBpbiB0YXJnZXQuY2ZnLgogICAgICovCiAKLSAgICB2YWxfcHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazFdIFRlc3QgcHNhX3dhaXQgd2l0aCB1bmFzc2lnbmVkIHNpZ25hbFxuIiwgMCk7Ci0KICAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KLSAgICBpZiAodmFsX3NldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUykpCisgICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKSkKICAgICB7Ci0gICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CiAgICAgfQogCi0gICAgLyogcHNhX3dhaXQgd2l0aCBzaWduYWwgbWFzayB0aGF0IGRvZXNuJ3QgaW5jbHVkZSBhbnkgYXNzaWduZWQgc2lnbmFsKi8KLSAgICBwc2Ffd2FpdChJTlZBTElEX1NJR05BTF9NQVNLLCBQU0FfUE9MTCk7CisgICAgLyogcHNhX3dhaXQgd2l0aCBzaWduYWwgbWFzayB0aGF0IGRvZXNuJ3QgaW5jbHVkZSBhbnkgYXNzaWduZWQgc2lnbmFsLCBjYWxsIHNob3VsZCBwYW5pYyAqLworICAgIHBzYS0+d2FpdChJTlZBTElEX1NJR05BTF9NQVNLLCBQU0FfUE9MTCk7CiAKICAgICAvKiBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KLSAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdHBzYV93YWl0KCkgY2hlY2sgZmFpbGVkIGZvciB1bmFzc2lnbmVkIHNpZ25hbFxuIiwgMCk7CisgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0cHNhX3dhaXQoKSBjaGVjayBmYWlsZWQgZm9yIHVuYXNzaWduZWQgc2lnbmFsXG4iLCAwKTsKIAogICAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLwotICAgIGlmICh2YWxfc2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKICAgICB7Ci0gICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CiAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjMvdGVzdF9pMDYzLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2My90ZXN0X2kwNjMuYwppbmRleCBiZThkNzllLi44ODUzZjNkIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2My90ZXN0X2kwNjMuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2My90ZXN0X2kwNjMuYwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTA2My5oIgpAQCAtMzUsMTEgKzM1LDExIEBACiB7CiAgICBwc2FfaGFuZGxlX3QgICAgIGhhbmRsZSA9IDA7CiAKLSAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazFdIFRlc3QgcHNhX3dhaXQgc2lnbmFsIG1hc2tcbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDFdIFRlc3QgcHNhX3dhaXQgc2lnbmFsIG1hc2tcbiIsIDApOwogCiAgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpOwogCi0gICBpZiAoaGFuZGxlICE9IFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpCisgICBpZiAoaGFuZGxlICE9IFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpCiAgICB7CiAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgInBzYV9jb25uZWN0IGZhaWxlZCAtMVxuIiwgMCk7CiAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRF9IQU5ETEU7CkBAIC00Nyw3ICs0Nyw3IEBACiAKICAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChTRVJWRVJfUkVMQVhfTUlOT1JfVkVSU0lPTl9TSUQsIDEpOwogCi0gICBpZiAoaGFuZGxlICE9IFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpCisgICBpZiAoaGFuZGxlICE9IFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpCiAgICB7CiAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgInBzYV9jb25uZWN0IGZhaWxlZCAtMlxuIiwgMCk7CiAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRF9IQU5ETEU7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2My90ZXN0X3N1cHBfaTA2My5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjMvdGVzdF9zdXBwX2kwNjMuYwppbmRleCA5OTk5MGUyLi5kNzU1NWU5IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2My90ZXN0X3N1cHBfaTA2My5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDYzL3Rlc3Rfc3VwcF9pMDYzLmMKQEAgLTE1LDggKzE1LDEzIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CiAKIGludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX3dhaXRfc2lnbmFsX21hc2sodm9pZCk7CiAKQEAgLTM0LDY4ICszOSw3MCBAQAogICAgIHBzYV9zaWduYWxfdCAgICBzaWduYWxfbWFzayA9IChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRyB8IFNFUlZFUl9SRUxBWF9NSU5PUl9WRVJTSU9OX1NJRyk7CiAKICAgICAvKiBEZWJ1ZyBwcmludCAqLwotICAgIHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjExKSwgVkFMX1NUQVRVU19TVUNDRVNTKTsKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMTEpLCBWQUxfU1RBVFVTX1NVQ0NFU1MpOwogCi0gICAgLyogTm90aWZ5IGNsaWVudCBwYXJ0aXRpb24gdG8gbWFrZSBTRVJWRVJfU0VDVVJFX0NPTk5FQ1RfT05MWV9TSUQgY29ubmVjdGlvbiByZXF1ZXN0LgotICAgICAqIFRoaXMgY29ubmVjdGlvbiByZXF1ZXN0IGFjdCBhcyBpcnJpdGF0b3IgdG8gcHNhX3dhaXQoc2lnbmFsX21hc2spIGNhbGwgYW5kIGl0IGlzIHVzZWQKKyAgICAvKgorICAgICAqIE5vdGlmeSBjbGllbnQgcGFydGl0aW9uIHRvIG1ha2UgU0VSVkVSX1NFQ1VSRV9DT05ORUNUX09OTFlfU0lEIGNvbm5lY3Rpb24gcmVxdWVzdC4KKyAgICAgKiBUaGlzIGNvbm5lY3Rpb24gcmVxdWVzdCBhY3QgYXMgaXJyaXRhdG9yIHRvIHBzYS0+d2FpdChzaWduYWxfbWFzaykgY2FsbCBhbmQgaXQgaXMgdXNlZAogICAgICAqIHRvIGNvdmVyIHRoZSBydWxlIC0gU2lnbmFscyB0aGF0IGFyZSBub3QgaW4gc2lnbmFsX21hc2sgc2hvdWxkIGJlIGlnbm9yZWQgYnkgcHNhX3dhaXQuCiAgICAgICogVGhpcyBtZWFucywgZHVyaW5nIHRoZSBmb2xsb3dpbmcgd2hpbGUgbG9vcCwgcmV0dXJuZWQgc2lnbmFsIHZhdWxlIHNob3VsZCBub3QgYmUKICAgICAgKiBTRVJWRVJfU0VDVVJFX0NPTk5FQ1RfT05MWV9TSUcgYXMgdGhpcyBzaWduYWwgaXMgbm90IHBhcnQgb2Ygc2lnbmFsX21hc2suCiAgICAgICovCi0gICAgcHNhX25vdGlmeShDTElFTlRfUEFSVElUSU9OKTsKKyAgICBwc2EtPm5vdGlmeShDTElFTlRfUEFSVElUSU9OKTsKIAogICAgIHdoaWxlIChsb29wX2NudCAhPSAwKQogICAgIHsKLSAgICAgICAgIHNpZ25hbHMgPSBwc2Ffd2FpdChzaWduYWxfbWFzaywgUFNBX0JMT0NLKTsKKyAgICAgICAgIHNpZ25hbHMgPSBwc2EtPndhaXQoc2lnbmFsX21hc2ssIFBTQV9CTE9DSyk7CiAKLSAgICAgICAgIC8qIFJ1bGUgLSBSZXR1cm5lZCBzaWduYWxzIHZhbHVlIG11c3QgYmUgc3Vic2V0IHNpZ25hbHMgaW5kaWNhdGVkIGluIHRoZSBzaWduYWxfbWFzay4KLSAgICAgICAgICAqCisgICAgICAgICAvKgorICAgICAgICAgICogUnVsZSAtIFJldHVybmVkIHNpZ25hbHMgdmFsdWUgbXVzdCBiZSBzdWJzZXQgc2lnbmFscyBpbmRpY2F0ZWQgaW4gdGhlIHNpZ25hbF9tYXNrLgogICAgICAgICAgICogVGhpcyBtZWFuIHNpZ25hbCB2YWx1ZSBzaG91bGQgYmUgZWl0aGVyIFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHCiAgICAgICAgICAgKiBvciBTRVJWRVJfUkVMQVhfTUlOT1JfVkVSU0lPTl9TSUcuCiAgICAgICAgICAgKi8KICAgICAgICAgIGlmICgoKHNpZ25hbHMgJiBzaWduYWxfbWFzaykgPT0gMCkgJiYKICAgICAgICAgICAgICAoKHNpZ25hbHMgfCBzaWduYWxfbWFzaykgIT0gc2lnbmFsX21hc2spKQogICAgICAgICAgewotICAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwKKyAgICAgICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLAogICAgICAgICAgICAgICAgICAgICAgInBzYV93YWl0LTEgcmV0dXJuZWQgd2l0aCBpbnZhbGlkIHNpZ25hbCB2YWx1ZSA9IDB4JXhcbiIsIHNpZ25hbHMpOwogICAgICAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoc2lnbmFscyAmIFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHKQogICAgICAgICAgewotICAgICAgICAgICAgIGlmIChwc2FfZ2V0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKSAhPSBQU0FfU1VDQ0VTUykKKyAgICAgICAgICAgICBpZiAocHNhLT5nZXQoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpICE9IFBTQV9TVUNDRVNTKQogICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgIGxvb3BfY250LS07Ci0gICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChzaWduYWxzICYgU0VSVkVSX1JFTEFYX01JTk9SX1ZFUlNJT05fU0lHKQogICAgICAgICAgewotICAgICAgICAgICAgIGlmIChwc2FfZ2V0KFNFUlZFUl9SRUxBWF9NSU5PUl9WRVJTSU9OX1NJRywgJm1zZykgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgICAgICAgaWYgKHBzYS0+Z2V0KFNFUlZFUl9SRUxBWF9NSU5PUl9WRVJTSU9OX1NJRywgJm1zZykgIT0gUFNBX1NVQ0NFU1MpCiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICAgbG9vcF9jbnQtLTsKLSAgICAgICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgUFNBX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICAgICAgIH0KICAgICB9CiAKICAgICAvKiBEZWJ1ZyBwcmludCAqLwotICAgIHZhbF9lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjEyKSwgVkFMX1NUQVRVU19TVUNDRVNTKTsKKyAgICB2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMTIpLCBWQUxfU1RBVFVTX1NVQ0NFU1MpOwogCiB3YWl0OgotICAgIC8qIEF0IHRoZSBlbmQsIGNvbXBsZXRlcyB0aGUgc3RhcnZlZCBjb25uZWN0aW9uCisgICAgLyoKKyAgICAgKiBBdCB0aGUgZW5kLCBjb21wbGV0ZXMgdGhlIHN0YXJ2ZWQgY29ubmVjdGlvbgogICAgICAqIHJlcXVlc3Qgb2YgU0VSVkVSX1NFQ1VSRV9DT05ORUNUX09OTFlfU0lELgogICAgICAqLwotICAgIHNpZ25hbHMgPSBwc2Ffd2FpdChTRVJWRVJfU0VDVVJFX0NPTk5FQ1RfT05MWV9TSUcsIFBTQV9CTE9DSyk7CisgICAgc2lnbmFscyA9IHBzYS0+d2FpdChTRVJWRVJfU0VDVVJFX0NPTk5FQ1RfT05MWV9TSUcsIFBTQV9CTE9DSyk7CiAgICAgaWYgKChzaWduYWxzICYgU0VSVkVSX1NFQ1VSRV9DT05ORUNUX09OTFlfU0lHKSA9PSAwKQogICAgIHsKLSAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsCisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwKICAgICAgICAgICAgICAgICAicHNhX3dhaXQtMiByZXR1cm5lZCB3aXRoIGludmFsaWQgc2lnbmFsIHZhbHVlID0gMHgleFxuIiwgc2lnbmFscyk7CiAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CiAgICAgfQogCi0gICAgaWYgKHBzYV9nZXQoU0VSVkVSX1NFQ1VSRV9DT05ORUNUX09OTFlfU0lHLCAmbXNnKSAhPSBQU0FfU1VDQ0VTUykKKyAgICBpZiAocHNhLT5nZXQoU0VSVkVSX1NFQ1VSRV9DT05ORUNUX09OTFlfU0lHLCAmbXNnKSAhPSBQU0FfU1VDQ0VTUykKICAgICAgICAgZ290byB3YWl0OwogCi0gICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY0L3Rlc3RfaTA2NC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjQvdGVzdF9pMDY0LmMKaW5kZXggNDZmZTNjOS4uZjAzN2NmYSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjQvdGVzdF9pMDY0LmMKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjQvdGVzdF9pMDY0LmMKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCiAjZWxzZQogI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgotI2luY2x1ZGUgInZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICJ0ZXN0X2kwNjQuaCIKQEAgLTMzLDIwICszMywyMCBAQAogCiBpbnQzMl90IGNsaWVudF90ZXN0X3BzYV9lb2lfd2l0aF9ub25faW50cl9zaWduYWwoc2VjdXJpdHlfdCBjYWxsZXIpCiB7Ci0gICBwc2FfaGFuZGxlX3QgICAgICAgICBoYW5kbGU7Ci0gICB0ZXN0X2ludHJfZm5faWRfdCAgICB0ZXN0X2ludHJfZm5faWQgPSBURVNUX1BTQV9FT0lfV0lUSF9OT05fSU5UUl9TSUdOQUw7CisgICBwc2FfaGFuZGxlX3QgICAgICAgICAgIGhhbmRsZTsKKyAgIGRyaXZlcl90ZXN0X2ZuX2lkX3QgICAgZHJpdmVyX3Rlc3RfZm5faWQgPSBURVNUX1BTQV9FT0lfV0lUSF9OT05fSU5UUl9TSUdOQUw7CiAKICAgIC8qCiAgICAgKiBUaGUgaW50ZXJydXB0IHJlbGF0ZWQgdGVzdCBjaGVjayBpcyBjYXB0dXJlZCBpbiBkcml2ZXJfcGFydGl0aW9uLmMgYXMgdGhpcyBpcyB0aGUKICAgICAqIG9ubHkgcGFydGl0aW9uIGluIHRlc3Qgc3VpdGUgdGhhdCBob2xkcyB0aGUgaW50ZXJydXB0IGxpbmUuIFRoZSBpbnRlcnJ1cHQgdGVzdCBjaGVjawotICAgICogaXMgaW52b2tlZCBieSBjbGllbnQgYnkgY2FsbGluZyB0byBURVNUX0lOVFJfU0lEIFJvVCBzZXJ2aWNlIG9mIGRyaXZlciBwYXJ0aXRpb24gdGhhdAorICAgICogaXMgaW52b2tlZCBieSBjbGllbnQgYnkgY2FsbGluZyB0byBEUklWRVJfVEVTVF9TSUQgUm9UIHNlcnZpY2Ugb2YgZHJpdmVyIHBhcnRpdGlvbiB0aGF0CiAgICAgKiBob2xkIHRoZSB0ZXN0IGNoZWNrLgogICAgICovCiAKLSAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjazFdIFRlc3QgcHNhX2VvaSB3aXRoIG5vbi1pbnRlcnJ1cHQgc2lnbmFsXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAxXSBUZXN0IHBzYV9lb2kgd2l0aCBub24taW50ZXJydXB0IHNpZ25hbFxuIiwgMCk7CiAKLSAgIC8qIENvbm5lY3QgdG8gVEVTVF9JTlRSX1NJRCAqLwotICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFRFU1RfSU5UUl9TSUQsIDEpOworICAgLyogQ29ubmVjdCB0byBEUklWRVJfVEVTVF9TSUQgKi8KKyAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChEUklWRVJfVEVTVF9TSUQsIDEpOwogICAgaWYgKGhhbmRsZSA8IDApCiAgICB7CiAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0IHBzYV9jb25uZWN0IGZhaWxlZC4gaGFuZGxlPTB4JXhcbiIsIGhhbmRsZSk7CkBAIC01NCwxMSArNTQsMTEgQEAKICAgIH0KIAogICAgLyogRXhlY3V0ZSBkcml2ZXIgZnVuY3Rpb24gcmVsYXRlZCB0byBURVNUX1BTQV9FT0lfV0lUSF9OT05fSU5UUl9TSUdOQUwgKi8KLSAgIHBzYV9pbnZlYyBpbnZlYyA9IHsmdGVzdF9pbnRyX2ZuX2lkLCBzaXplb2YodGVzdF9pbnRyX2ZuX2lkKX07CisgICBwc2FfaW52ZWMgaW52ZWMgPSB7JmRyaXZlcl90ZXN0X2ZuX2lkLCBzaXplb2YoZHJpdmVyX3Rlc3RfZm5faWQpfTsKICAgIHBzYS0+Y2FsbChoYW5kbGUsICZpbnZlYywgMSwgTlVMTCwgMCk7CiAKICAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKIAotICAgLyogVGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgZHJpdmVyIHBhcnRpdGlvbiBoYW5nIGFuZCBjb250cm9sIG5ldmVyIHJlYWNoZXMgaGVyZS4gKi8KKyAgIC8qIFRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IGRyaXZlciBwYXJ0aXRpb24gZ2V0IHBhbmljIGFuZCBjb250cm9sIG5ldmVyIHJlYWNoZXMgaGVyZS4gKi8KICAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2NC90ZXN0X3N1cHBfaTA2NC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjQvdGVzdF9zdXBwX2kwNjQuYwppbmRleCA1ZWIxMTQzLi41YzQ4NmE3IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2NC90ZXN0X3N1cHBfaTA2NC5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY0L3Rlc3Rfc3VwcF9pMDY0LmMKQEAgLTE1LDggKzE1LDEzIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CiAKIGludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX2VvaV93aXRoX25vbl9pbnRyX3NpZ25hbCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjUvdGVzdF9pMDY1LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2NS90ZXN0X2kwNjUuYwppbmRleCA5MmNkZWRhLi4xNTA4MWZiIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2NS90ZXN0X2kwNjUuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2NS90ZXN0X2kwNjUuYwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTA2NS5oIgpAQCAtMzMsMjAgKzMzLDIwIEBACiAKIGludDMyX3QgY2xpZW50X3Rlc3RfcHNhX2VvaV93aXRoX3VuYXNzZXJ0ZWRfc2lnbmFsKHNlY3VyaXR5X3QgY2FsbGVyKQogewotICAgcHNhX2hhbmRsZV90ICAgICAgICAgaGFuZGxlOwotICAgdGVzdF9pbnRyX2ZuX2lkX3QgICAgdGVzdF9pbnRyX2ZuX2lkID0gVEVTVF9QU0FfRU9JX1dJVEhfVU5BU1NFUlRFRF9TSUdOQUw7CisgICBwc2FfaGFuZGxlX3QgICAgICAgICAgIGhhbmRsZTsKKyAgIGRyaXZlcl90ZXN0X2ZuX2lkX3QgICAgZHJpdmVyX3Rlc3RfZm5faWQgPSBURVNUX1BTQV9FT0lfV0lUSF9VTkFTU0VSVEVEX1NJR05BTDsKIAogICAgLyoKICAgICAqIFRoZSBpbnRlcnJ1cHQgcmVsYXRlZCB0ZXN0IGNoZWNrIGlzIGNhcHR1cmVkIGluIGRyaXZlcl9wYXJ0aXRpb24uYyBhcyB0aGlzIGlzIHRoZQogICAgICogb25seSBwYXJ0aXRpb24gaW4gdGVzdCBzdWl0ZSB0aGF0IGhvbGRzIHRoZSBpbnRlcnJ1cHQgbGluZS4gVGhlIGludGVycnVwdCB0ZXN0IGNoZWNrCi0gICAgKiBpcyBpbnZva2VkIGJ5IGNsaWVudCBieSBjYWxsaW5nIHRvIFRFU1RfSU5UUl9TSUQgUm9UIHNlcnZpY2Ugb2YgZHJpdmVyIHBhcnRpdGlvbiB0aGF0CisgICAgKiBpcyBpbnZva2VkIGJ5IGNsaWVudCBieSBjYWxsaW5nIHRvIERSSVZFUl9URVNUX1NJRCBSb1Qgc2VydmljZSBvZiBkcml2ZXIgcGFydGl0aW9uIHRoYXQKICAgICAqIGhvbGQgdGhlIHRlc3QgY2hlY2suCiAgICAgKi8KIAotICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrMV0gVGVzdCBwc2FfZW9pIHdpdGggbXVsdGlwbGUgc2lnbmFsXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAxXSBUZXN0IHBzYV9lb2kgd2l0aCBtdWx0aXBsZSBzaWduYWxcbiIsIDApOwogCi0gICAvKiBDb25uZWN0IHRvIFRFU1RfSU5UUl9TSUQgKi8KLSAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChURVNUX0lOVFJfU0lELCAxKTsKKyAgIC8qIENvbm5lY3QgdG8gRFJJVkVSX1RFU1RfU0lEICovCisgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoRFJJVkVSX1RFU1RfU0lELCAxKTsKICAgIGlmIChoYW5kbGUgPCAwKQogICAgewogICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdCBwc2FfY29ubmVjdCBmYWlsZWQuIGhhbmRsZT0weCV4XG4iLCBoYW5kbGUpOwpAQCAtNTQsMTEgKzU0LDExIEBACiAgICB9CiAKICAgIC8qIEV4ZWN1dGUgZHJpdmVyIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gVEVTVF9QU0FfRU9JX1dJVEhfVU5BU1NFUlRFRF9TSUdOQUwgKi8KLSAgIHBzYV9pbnZlYyBpbnZlYyA9IHsmdGVzdF9pbnRyX2ZuX2lkLCBzaXplb2YodGVzdF9pbnRyX2ZuX2lkKX07CisgICBwc2FfaW52ZWMgaW52ZWMgPSB7JmRyaXZlcl90ZXN0X2ZuX2lkLCBzaXplb2YoZHJpdmVyX3Rlc3RfZm5faWQpfTsKICAgIHBzYS0+Y2FsbChoYW5kbGUsICZpbnZlYywgMSwgTlVMTCwgMCk7CiAKICAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKIAotICAgLyogVGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgZHJpdmVyIHBhcnRpdGlvbiBoYW5nIGFuZCBjb250cm9sIG5ldmVyIHJlYWNoZXMgaGVyZS4gKi8KKyAgIC8qIFRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IGRyaXZlciBwYXJ0aXRpb24gZ2V0IHBhbmljIGFuZCBjb250cm9sIG5ldmVyIHJlYWNoZXMgaGVyZS4gKi8KICAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2NS90ZXN0X3N1cHBfaTA2NS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjUvdGVzdF9zdXBwX2kwNjUuYwppbmRleCAxMzg4ODQwLi41YzFkOGUwIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2NS90ZXN0X3N1cHBfaTA2NS5jCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY1L3Rlc3Rfc3VwcF9pMDY1LmMKQEAgLTE1LDggKzE1LDEzIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKLSNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CiAKIGludDMyX3Qgc2VydmVyX3Rlc3RfcHNhX2VvaV93aXRoX25vbl9pbnRyX3NpZ25hbCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjYvdGVzdF9pMDY2LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2Ni90ZXN0X2kwNjYuYwppbmRleCBmYjExMGQ2Li5jNDUyZGMwIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2Ni90ZXN0X2kwNjYuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2Ni90ZXN0X2kwNjYuYwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKICNlbHNlCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgInRlc3RfaTA2Ni5oIgpAQCAtMzMsMjAgKzMzLDIwIEBACiAKIGludDMyX3QgY2xpZW50X3Rlc3RfcHNhX2VvaV93aXRoX211bHRpcGxlX3NpZ25hbHMoc2VjdXJpdHlfdCBjYWxsZXIpCiB7Ci0gICBwc2FfaGFuZGxlX3QgICAgICAgICBoYW5kbGU7Ci0gICB0ZXN0X2ludHJfZm5faWRfdCAgICB0ZXN0X2ludHJfZm5faWQgPSBURVNUX1BTQV9FT0lfV0lUSF9NVUxUSVBMRV9TSUdOQUxTOworICAgcHNhX2hhbmRsZV90ICAgICAgICAgICBoYW5kbGU7CisgICBkcml2ZXJfdGVzdF9mbl9pZF90ICAgIGRyaXZlcl90ZXN0X2ZuX2lkID0gVEVTVF9QU0FfRU9JX1dJVEhfTVVMVElQTEVfU0lHTkFMUzsKIAogICAgLyoKICAgICAqIFRoZSBpbnRlcnJ1cHQgcmVsYXRlZCB0ZXN0IGNoZWNrIGlzIGNhcHR1cmVkIGluIGRyaXZlcl9wYXJ0aXRpb24uYyBhcyB0aGlzIGlzIHRoZQogICAgICogb25seSBwYXJ0aXRpb24gaW4gdGVzdCBzdWl0ZSB0aGF0IGhvbGRzIHRoZSBpbnRlcnJ1cHQgbGluZS4gVGhlIGludGVycnVwdCB0ZXN0IGNoZWNrCi0gICAgKiBpcyBpbnZva2VkIGJ5IGNsaWVudCBieSBjYWxsaW5nIHRvIFRFU1RfSU5UUl9TSUQgUm9UIHNlcnZpY2Ugb2YgZHJpdmVyIHBhcnRpdGlvbiB0aGF0CisgICAgKiBpcyBpbnZva2VkIGJ5IGNsaWVudCBieSBjYWxsaW5nIHRvIERSSVZFUl9URVNUX1NJRCBSb1Qgc2VydmljZSBvZiBkcml2ZXIgcGFydGl0aW9uIHRoYXQKICAgICAqIGhvbGQgdGhlIHRlc3QgY2hlY2suCiAgICAgKi8KIAotICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrMV0gVGVzdCBwc2FfZW9pIHdpdGggbXVsdGlwbGUgc2lnbmFsc1xuIiwgMCk7CisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMV0gVGVzdCBwc2FfZW9pIHdpdGggbXVsdGlwbGUgc2lnbmFsc1xuIiwgMCk7CiAKLSAgIC8qIENvbm5lY3QgdG8gVEVTVF9JTlRSX1NJRCAqLwotICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFRFU1RfSU5UUl9TSUQsIDEpOworICAgLyogQ29ubmVjdCB0byBEUklWRVJfVEVTVF9TSUQgKi8KKyAgIGhhbmRsZSA9IHBzYS0+Y29ubmVjdChEUklWRVJfVEVTVF9TSUQsIDEpOwogICAgaWYgKGhhbmRsZSA8IDApCiAgICB7CiAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0IHBzYV9jb25uZWN0IGZhaWxlZC4gaGFuZGxlPTB4JXhcbiIsIGhhbmRsZSk7CkBAIC01NCwxMSArNTQsMTEgQEAKICAgIH0KIAogICAgLyogRXhlY3V0ZSBkcml2ZXIgZnVuY3Rpb24gcmVsYXRlZCB0byBURVNUX1BTQV9FT0lfV0lUSF9NVUxUSVBMRV9TSUdOQUxTICovCi0gICBwc2FfaW52ZWMgaW52ZWMgPSB7JnRlc3RfaW50cl9mbl9pZCwgc2l6ZW9mKHRlc3RfaW50cl9mbl9pZCl9OworICAgcHNhX2ludmVjIGludmVjID0geyZkcml2ZXJfdGVzdF9mbl9pZCwgc2l6ZW9mKGRyaXZlcl90ZXN0X2ZuX2lkKX07CiAgICBwc2EtPmNhbGwoaGFuZGxlLCAmaW52ZWMsIDEsIE5VTEwsIDApOwogCiAgICBwc2EtPmNsb3NlKGhhbmRsZSk7CiAKLSAgIC8qIFRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IGRyaXZlciBwYXJ0aXRpb24gaGFuZyBhbmQgY29udHJvbCBuZXZlciByZWFjaGVzIGhlcmUuICovCisgICAvKiBUaGUgZXhwZWN0YXRpb24gaXMgdGhhdCBkcml2ZXIgcGFydGl0aW9uIGdldCBwYW5pYyBhbmQgY29udHJvbCBuZXZlciByZWFjaGVzIGhlcmUuICovCiAgICByZXR1cm4gVkFMX1NUQVRVU19TUE1fRkFJTEVEOwogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjYvdGVzdF9zdXBwX2kwNjYuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY2L3Rlc3Rfc3VwcF9pMDY2LmMKaW5kZXggODc0ODk1MS4uOWI2NGNhYSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjYvdGVzdF9zdXBwX2kwNjYuYworKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2Ni90ZXN0X3N1cHBfaTA2Ni5jCkBAIC0xNSw4ICsxNSwxMyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KIAotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKworI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfc2VydmVyX3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfc2VydmVyX3NwKQorZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOwogCiBpbnQzMl90IHNlcnZlcl90ZXN0X3BzYV9lb2lfd2l0aF9ub25faW50cl9zaWduYWwodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY3L3NvdXJjZS5tayBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY3L3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzQ3MjY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjcvc291cmNlLm1rCkBAIC0wLDAgKzEsMjUgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfaTA2Ny5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CisKK0NDX1NPVVJDRV9TUEUgID0gdGVzdF9pMDY3LmMgdGVzdF9zdXBwX2kwNjcuYworQ0NfT1BUSU9OU19TUEUgPQorQVNfU09VUkNFX1NQRSAgPQorQVNfT1BUSU9OU19TUEUgPQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY3L3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY3L3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDM1MGFiCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjcvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2kwNjcuaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9GRl9CQVNFLCA2NykKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb25cbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbDsKK3BzYV9hcGlfdCAqcHNhOworCit2b2lkIHRlc3RfZW50cnkodmFsX2FwaV90ICp2YWxfYXBpLCBwc2FfYXBpX3QgKnBzYV9hcGkpCit7CisgICAgaW50MzJfdCAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgIHZhbCA9IHZhbF9hcGk7CisgICAgcHNhID0gcHNhX2FwaTsKKworICAgIC8qIHRlc3QgaW5pdCAqLworICAgIHZhbC0+dGVzdF9pbml0KFRFU1RfTlVNLCBURVNUX0RFU0MsIFRFU1RfRklFTEQoVEVTVF9JU09MQVRJT05fTDEsIFdEX0xPV19USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIFN3aXRjaCB0byBzZWN1cmUgc2lkZSAoY2xpZW50X3BhcnRpdGlvbi5jKSBhbmQgZXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbgorICAgIHRlc3RbbnVtXV9jbGllbnRfdGVzdHNfbGlzdCBmcm9tIFNlY3VyZSBzaWRlICovCisgICAgc3RhdHVzID0gdmFsLT5zd2l0Y2hfdG9fc2VjdXJlX2NsaWVudChURVNUX05VTSk7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY3L3Rlc3RfaTA2Ny5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjcvdGVzdF9pMDY3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU2ZjI3ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY3L3Rlc3RfaTA2Ny5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAorI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2Vsc2UKKyNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNlbmRpZgorCisjaW5jbHVkZSAidGVzdF9pMDY3LmgiCisKKyNpZiAoU1BfSEVBUF9NRU1fU1VQUCA9PSAxKQordm9pZCAqbWFsbG9jKHNpemVfdCBzaXplKTsKK3ZvaWQgZnJlZSh2b2lkICpwdHIpOworI2VuZGlmCisKK2NsaWVudF90ZXN0X3QgdGVzdF9pMDY3X2NsaWVudF90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBjbGllbnRfdGVzdF9keW5hbWljX21lbV9hbGxvY19mbiwKKyAgICBOVUxMLAorfTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9keW5hbWljX21lbV9hbGxvY19mbihzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgLyogQ2hlY2sgaGVhcCBtZW1vcnkgc3VwcG9ydCBhdmFpbGFibGUgdG8gc2VjdXJlIHBhcnRpdGlvbiAqLworI2lmIChTUF9IRUFQX01FTV9TVVBQID09IDEpCisgIHVpbnQ4X3QgICAgICAgICAgICAgICpidWZmZXI7CisKKyAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDFdIFRlc3QgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvblxuIiwgMCk7CisKKyAgLyogSWYgaGVhcF9zaXplIGZpZWxkIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIG1hbmlmZXN0IHRoZW4gdGhlIFNQTSBjYW4gYXNzdW1lIHRoZSBzaXplIGlzIDAgKi8KKyAgYnVmZmVyID0gKHVpbnQ4X3QgKiltYWxsb2Moc2l6ZW9mKHVpbnQ4X3QpICogOCk7CisgIGlmIChidWZmZXIgIT0gTlVMTCkKKyAgeworICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0bWFsbG9jIGZhaWxlZCBmb3IgdW5zcGVjaWZpZWQgaGVhcCBzaXplXG4iLCAwKTsKKyAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CisgIH0KKworI2Vsc2UKKworICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMV0gVGVzdCBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uXG4iLCAwKTsKKworICAvKiBTa2lwIHRoZSB0ZXN0ICovCisgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFNraXBwaW5nIHRlc3QgYXMgaGVhcCBtZW1vcnkgbm90IHN1cHBvcnRlZFxuIiwgMCk7CisgIHJldHVybiBSRVNVTFRfU0tJUChWQUxfU1RBVFVTX0hFQVBfTk9UX0FWQUlMQUJMRSk7CisKKyNlbmRpZgorICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjcvdGVzdF9pMDY3LmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2Ny90ZXN0X2kwNjcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODRkYTZlCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjcvdGVzdF9pMDY3LmgKQEAgLTAsMCArMSwzNyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfSTA2N19DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTA2N19DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8saTA2NykKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKyNlbHNlCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9jbGllbnRfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9jbGllbnRfc3ApCisjZW5kaWYKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNjdfY2xpZW50X3Rlc3RzX2xpc3RbXTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9keW5hbWljX21lbV9hbGxvY19mbihzZWN1cml0eV90KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjcvdGVzdF9zdXBwX2kwNjcuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY3L3Rlc3Rfc3VwcF9pMDY3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZkMDc3OQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY3L3Rlc3Rfc3VwcF9pMDY3LmMKQEAgLTAsMCArMSwxMjcgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKKworI2RlZmluZSBTRVJWRVJfSEVBUF9TSVpFIDB4MTAwIC8qIFRoZSBzaXplIGlzIHNhbWUgYXMgaGVhcF9zaXplIGZpZWxkIGluIG1hbmlmZXN0ICovCisKKyNpZiAoU1BfSEVBUF9NRU1fU1VQUCA9PSAxKQordm9pZCAqbWFsbG9jKHNpemVfdCBzaXplKTsKK3ZvaWQgZnJlZSh2b2lkICpwdHIpOwordm9pZCAqcmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBzaXplKTsKKyNlbmRpZgorCitpbnQzMl90IHNlcnZlcl90ZXN0X2R5bmFtaWNfbWVtX2FsbG9jX2ZuKHZvaWQpOworCitzZXJ2ZXJfdGVzdF90IHRlc3RfaTA2N19zZXJ2ZXJfdGVzdHNfbGlzdFtdID0geworICAgIE5VTEwsCisgICAgc2VydmVyX3Rlc3RfZHluYW1pY19tZW1fYWxsb2NfZm4sCisgICAgTlVMTCwKK307CisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfZHluYW1pY19tZW1fYWxsb2NfZm4odm9pZCkKK3sKKyAgIC8qIFBlcmZvcm0gY2hlY2tzIG9ubHkgaWYgaGVhcCBtZW1vcnkgc3VwcG9ydCBhdmFpbGFibGUgdG8gc2VjdXJlIHBhcnRpdGlvbiAqLworI2lmIChTUF9IRUFQX01FTV9TVVBQID09IDEpCisgICB1aW50OF90ICAgICAgICAgICAgICAqYnVmZmVyLCAqYnVmZmVyMTsKKyAgIHVpbnQ4X3QgICAgICAgICAgICAgIGNtcGJ1ZmZbU0VSVkVSX0hFQVBfU0laRV0gPSB7MH07CisKKyAgIG1lbXNldCgodWludDhfdCAqKWNtcGJ1ZmYsIDAsIFNFUlZFUl9IRUFQX1NJWkUpOworCisgICAvKiBBbGxvY2F0ZSB3aG9sZSBoZWFwIG1lbW9yeSBzaXplICovCisgICBidWZmZXIgPSAodWludDhfdCAqKW1hbGxvYyhzaXplb2YodWludDhfdCkgKiBTRVJWRVJfSEVBUF9TSVpFKTsKKyAgIGlmIChidWZmZXIgPT0gTlVMTCkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRtYWxsb2MgZmFpbGVkIGZvciBmdWxsIG1lbW9yeSBhbGxvY2F0aW9uXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19TUE1fRkFJTEVEOworICAgfQorCisgICAvKiBDaGVjayBmb3IgemVybyBpbml0IGJ5IG1hbGxvYygpICovCisgICBpZiAobWVtY21wKGJ1ZmZlciwgY21wYnVmZiwgU0VSVkVSX0hFQVBfU0laRSkpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0VW5lcXVhbCBkYXRhIGluIGNvbXBhcmVkIGJ1ZmZlcnMtMVxuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKKyAgIH0KKworICAgLyogQ2hlY2sgZm9yIGhlYXAgbWVtb3J5IG92ZXIgcnVuICovCisgICBidWZmZXIxID0gKHVpbnQ4X3QgKiltYWxsb2Moc2l6ZW9mKHVpbnQ4X3QpICogOCk7CisgICBpZiAoYnVmZmVyMSAhPSBOVUxMKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdG1hbGxvYyBmYWlsZWQgZm9yIG92ZXIgbWVtIGFsbG9jXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19TUE1fRkFJTEVEOworICAgfQorCisgICAvKiBTZXQgYnVmZmVyIHRvIG5vbi16ZXJvIHZhbHVlICovCisgICBtZW1zZXQoKHVpbnQ4X3QgKilidWZmZXIsIDEsIFNFUlZFUl9IRUFQX1NJWkUpOworCisgICAvKiBGcmVlIHVwIHRoZSBtZW1vcnkgKi8KKyAgIGZyZWUoYnVmZmVyKTsKKworICAgLyogQ2hlY2sgZm9yIG1lbW9yeSBzY3J1YiBieSBmcmVlKCkgKi8KKyAgIGlmICgqYnVmZmVyID09IDEpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0VW5lcXVhbCBkYXRhIGluIGNvbXBhcmVkIGJ1ZmZlcnMtMlxuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKKyAgIH0KKworICAgLyogQWxsb2NhdGUgMzIgYnl0ZSBtZW1vcnkgdG8gdGVzdCByZWxsb2FjICovCisgICBidWZmZXIgPSAodWludDhfdCAqKW1hbGxvYyhzaXplb2YodWludDhfdCkgKiAzMik7CisgICBpZiAoYnVmZmVyID09IE5VTEwpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0bWFsbG9jIGZhaWxlZFxuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKKyAgIH0KKworICAgLyogU2V0IGJ1ZmZlciB0byBub24temVybyB2YWx1ZSAqLworICAgbWVtc2V0KCh1aW50OF90ICopYnVmZmVyLCAxLCAzMik7CisgICBtZW1zZXQoKHVpbnQ4X3QgKiljbXBidWZmLCAxLCAzMik7CisKKyAgIC8qIFJlLWFsbG9jYXRlIHRoZSBidWZmZXIsIFNpemUgPSA2NCBieXRlICovCisgICBidWZmZXIxID0gKHVpbnQ4X3QgKilyZWFsbG9jKGJ1ZmZlciwgKHNpemVvZih1aW50OF90KSAqIDY0KSk7CisKKyAgIC8qIENoZWNrIG9sZGVyIG9iamVjdCBpcyBkZWFsbG9jYXRlZCAqLworICAgaWYgKG1lbWNtcChidWZmZXIsIChjbXBidWZmICsgNjQpLCAzMikpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0VW5lcXVhbCBkYXRhIGluIGNvbXBhcmVkIGJ1ZmZlcnMtM1xuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKKyAgIH0KKworICAgLyogQ2hlY2sgbmV3IG9iamVjdCBoYXMgcHJldmlvdXMgZGF0YSBvZiBvbGRlciBvYmplY3QgKi8KKyAgIGlmIChtZW1jbXAoYnVmZmVyMSwgY21wYnVmZiwgMzIpKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFVuZXF1YWwgZGF0YSBpbiBjb21wYXJlZCBidWZmZXJzLTRcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CisgICB9CisKKyAgIC8qIENoZWNrIG5ldyBhbGxvY2F0ZWQgc2l6ZSBpcyB6ZXJvIGluaXQgKi8KKyAgIGlmIChtZW1jbXAoKGJ1ZmZlcjEgKyAzMiksIChjbXBidWZmICsgMzIpLCAzMikpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0VW5lcXVhbCBkYXRhIGluIGNvbXBhcmVkIGJ1ZmZlcnMtNVxuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKKyAgIH0KKworICAgZnJlZShidWZmZXIxKTsKKworI2VuZGlmCisgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjgvc291cmNlLm1rIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjgvc291cmNlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2Y2IwZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2OC9zb3VyY2UubWsKQEAgLTAsMCArMSwyNSBAQAorIyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisjICoKKyMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjICoKKyMgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjICoKKyMgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjKiovCisKK0NDX1NPVVJDRSAgPSB0ZXN0X2VudHJ5LmMgdGVzdF9pMDY4LmMKK0NDX09QVElPTlMgPQorQVNfU09VUkNFICA9CitBU19PUFRJT05TID0KKworQ0NfU09VUkNFX1NQRSAgPSB0ZXN0X2kwNjguYyB0ZXN0X3N1cHBfaTA2OC5jCitDQ19PUFRJT05TX1NQRSA9CitBU19TT1VSQ0VfU1BFICA9CitBU19PUFRJT05TX1NQRSA9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjgvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjgvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMjhmOGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2OC90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfaTA2OC5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0ZGX0JBU0UsIDY4KQorI2RlZmluZSBURVNUX0RFU0MgIlRlc3RpbmcgSW5zdHIgZXhlY3V0aW9uIGZyb20gd3JpdGFibGUgbWVtb3J5XG4iCitURVNUX1BVQkxJU0goVEVTVF9OVU0sIHRlc3RfZW50cnkpOwordmFsX2FwaV90ICp2YWw7Citwc2FfYXBpX3QgKnBzYTsKKwordm9pZCB0ZXN0X2VudHJ5KHZhbF9hcGlfdCAqdmFsX2FwaSwgcHNhX2FwaV90ICpwc2FfYXBpKQoreworICAgIGludDMyX3QgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9MT1dfVElNRU9VVCkpOworICAgIGlmICghSVNfVEVTVF9TVEFSVCh2YWwtPmdldF9zdGF0dXMoKSkpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBTd2l0Y2ggdG8gc2VjdXJlIHNpZGUgKGNsaWVudF9wYXJ0aXRpb24uYykgYW5kIGV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4KKyAgICB0ZXN0W251bV1fY2xpZW50X3Rlc3RzX2xpc3QgZnJvbSBTZWN1cmUgc2lkZSAqLworICAgIHN0YXR1cyA9IHZhbC0+c3dpdGNoX3RvX3NlY3VyZV9jbGllbnQoVEVTVF9OVU0pOworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2OC90ZXN0X2kwNjguYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY4L3Rlc3RfaTA2OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYjkyZGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2OC90ZXN0X2kwNjguYwpAQCAtMCwwICsxLDk0IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNlbHNlCisjaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjZW5kaWYKKworI2luY2x1ZGUgInRlc3RfaTA2OC5oIgorCisjZGVmaW5lIE5PX09GX0JZVEVTIDE2Cit0eXBlZGVmIHZvaWQgKCpmcHRyX3QpKHZvaWQpOwordm9pZCB0ZXN0X2kwNjhfZHVtbXlfZnVuYyh2b2lkKTsKK2ZwdHJfdCBmcHRyOworCitjaGFyIG9wY29kZVtOT19PRl9CWVRFU10gPSB7MH07IC8vIERhdGEgbWVtb3J5CisKK2NsaWVudF90ZXN0X3QgdGVzdF9pMDY4X2NsaWVudF90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBjbGllbnRfdGVzdF9pbnN0cl9leGVjX2Zyb21fd3JpdGFibGVfbWVtLAorICAgIE5VTEwsCit9OworCitzdGF0aWMgdm9pZCBjb3B5X21lbSh2b2lkICphZGRyLCB2b2lkICpkYXRhLCBzaXplX3QgbCkKK3sKKyAgIGludCBpOworICAgY2hhciAqc3JjID0gKGNoYXIgKilkYXRhOworICAgY2hhciAqZGVzdCA9IChjaGFyICopYWRkcjsKKworICAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykKKyAgIHsKKyAgICAgICBkZXN0W2ldID0gc3JjW2ldOworICAgfQorfQorCisvKiBFbXB0eSBmdW5jdGlvbiB0byBjcmVhdGUgb3Bjb2RlIGRhdGEgc2V0ICovCit2b2lkIHRlc3RfaTA2OF9kdW1teV9mdW5jKHZvaWQpCit7Cit9CisKK2ludDMyX3QgY2xpZW50X3Rlc3RfaW5zdHJfZXhlY19mcm9tX3dyaXRhYmxlX21lbShzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDFdIFRlc3QgSW5zdHIgZXhlY3V0aW9uIGZyb20gd3JpdGFibGUgbWVtb3J5XG4iLCAwKTsKKworICAvKgorICAgKiBDb3B5IHRlc3RfaTA2OF9kdW1teV9mdW5jIGZ1bmN0aW9uIGNvZGUgaW50byBkYXRhIG1lbW9yeQorICAgKiBBc3N1bWluZyBmdW5jdGlvbiBzaXplIHRvIGJlIDMyIGJ5dGVzIG1heAorICAgKi8KKyAgY29weV9tZW0oJm9wY29kZSwgJnRlc3RfaTA2OF9kdW1teV9mdW5jLCBOT19PRl9CWVRFUyk7CisKKyAgLyogUG9pbnQgZnVuY3Rpb24gcG9pbnRlciB0byBkYXRhIG1lbW9yeSAqLworICBmcHRyID0gKGZwdHJfdCkgb3Bjb2RlOworICB2YWwtPnByaW50KFBSSU5UX0RFQlVHLCAiXHQmb3Bjb2RlID0gMHgleFxuIiwgKHVpbnQzMl90KSAmb3Bjb2RlKTsKKyAgdmFsLT5wcmludChQUklOVF9ERUJVRywgIlx0ZnB0ciA9IDB4JXhcbiIsKHVpbnQzMl90KSBmcHRyKTsKKworICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9TKSkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgfQorCisgIC8qIENoZWNrIC0gRXhlY3V0ZSBvcGNvZGUgZnJvbSBkYXRhIG1lbW9yeS4gVGhpcyBzaG91bGQgZ2VuZXJhdGUgaW50ZXJuYWwgZmF1bHQgKi8KKyAgZnB0cigpOworCisgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENvbnRyb2wgc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlXG4iLCAwKTsKKworICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KKyAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICB7CisgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgIH0KKworICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKK30KKworCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2OC90ZXN0X2kwNjguaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY4L3Rlc3RfaTA2OC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MjZmMzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2OC90ZXN0X2kwNjguaApAQCAtMCwwICsxLDM3IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9JMDY4X0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDY4X0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisKKyNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxpMDY4KQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorI2Vsc2UKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX2NsaWVudF9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX2NsaWVudF9zcCkKKyNlbmRpZgorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CisKK2V4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfaTA2OF9jbGllbnRfdGVzdHNfbGlzdFtdOworCitpbnQzMl90IGNsaWVudF90ZXN0X2luc3RyX2V4ZWNfZnJvbV93cml0YWJsZV9tZW0oc2VjdXJpdHlfdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDY4L3Rlc3Rfc3VwcF9pMDY4LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2OC90ZXN0X3N1cHBfaTA2OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYTg3ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2OC90ZXN0X3N1cHBfaTA2OC5jCkBAIC0wLDAgKzEsMzcgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9pbnN0cl9leGVjX2Zyb21fd3JpdGFibGVfbWVtKHZvaWQpOworCitzZXJ2ZXJfdGVzdF90IHRlc3RfaTA2OF9zZXJ2ZXJfdGVzdHNfbGlzdFtdID0geworICAgIE5VTEwsCisgICAgc2VydmVyX3Rlc3RfaW5zdHJfZXhlY19mcm9tX3dyaXRhYmxlX21lbSwKKyAgICBOVUxMLAorfTsKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9pbnN0cl9leGVjX2Zyb21fd3JpdGFibGVfbWVtKHZvaWQpCit7CisgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjkvc291cmNlLm1rIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjkvc291cmNlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNzQ1YTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2OS9zb3VyY2UubWsKQEAgLTAsMCArMSwyNSBAQAorIyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisjICoKKyMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjICoKKyMgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjICoKKyMgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjKiovCisKK0NDX1NPVVJDRSAgPSB0ZXN0X2VudHJ5LmMgdGVzdF9pMDY5LmMKK0NDX09QVElPTlMgPQorQVNfU09VUkNFICA9CitBU19PUFRJT05TID0KKworQ0NfU09VUkNFX1NQRSAgPSB0ZXN0X2kwNjkuYyB0ZXN0X3N1cHBfaTA2OS5jCitDQ19PUFRJT05TX1NQRSA9CitBU19TT1VSQ0VfU1BFICA9CitBU19PUFRJT05TX1NQRSA9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjkvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjkvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNDExYTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2OS90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfaTA2OS5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0ZGX0JBU0UsIDY5KQorI2RlZmluZSBURVNUX0RFU0MgIlRlc3Rpbmcgd3JpdGUgdG8gY29kZSBzcGFjZVxuIgorVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKK3ZhbF9hcGlfdCAqdmFsOworcHNhX2FwaV90ICpwc2E7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfTE9XX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogU3dpdGNoIHRvIHNlY3VyZSBzaWRlIChjbGllbnRfcGFydGl0aW9uLmMpIGFuZCBleGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluCisgICAgdGVzdFtudW1dX2NsaWVudF90ZXN0c19saXN0IGZyb20gU2VjdXJlIHNpZGUgKi8KKyAgICBzdGF0dXMgPSB2YWwtPnN3aXRjaF90b19zZWN1cmVfY2xpZW50KFRFU1RfTlVNKTsKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKK3Rlc3RfZXhpdDoKKyAgICB2YWwtPnRlc3RfZXhpdCgpOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjkvdGVzdF9pMDY5LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2OS90ZXN0X2kwNjkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2FmY2UzCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjkvdGVzdF9pMDY5LmMKQEAgLTAsMCArMSw2OCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2lmZGVmIE5PTlNFQ1VSRV9URVNUX0JVSUxECisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjZWxzZQorI2luY2x1ZGUgInZhbC9jb21tb24vdmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ0ZXN0X2kwNjkuaCIKKworY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNjlfY2xpZW50X3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIGNsaWVudF90ZXN0X3dyaXRlX3RvX2NvZGVfc3BhY2UsCisgICAgTlVMTCwKK307CisKK2ludDMyX3QgY2xpZW50X3Rlc3Rfd3JpdGVfdG9fY29kZV9zcGFjZShzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgaW50MzJfdCAqcDsKKworICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMV0gVGVzdCB3cml0ZSB0byBjb2RlIHNwYWNlXG4iLCAwKTsKKworICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9TKSkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgfQorCisgIHAgPSAoaW50MzJfdCAqKSZjbGllbnRfdGVzdF93cml0ZV90b19jb2RlX3NwYWNlOworCisgIC8qIENoZWNrIC0gV3JpdGUgdG8gY29kZSBtZW1vcnkuIFRoaXMgc2hvdWxkIGdlbmVyYXRlIGludGVybmFsIGZhdWx0ICovCisgICpwID0gMHgwOworCisgIGlmICgqcCA9PSAoaW50MzJfdCljbGllbnRfdGVzdF93cml0ZV90b19jb2RlX3NwYWNlKQorICB7CisgICAgICAvKiBUaGlzIG1lYW5zLCB3cml0ZSBpZ25vcmVkICovCisgICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworICB9CisgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFdyaXRlIHRvIGNvZGUgbWVtb3J5IGNoZWNrIGZhaWxlZFxuIiwgMCk7CisKKyAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCisgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgeworICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICB9CisKKyAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7Cit9CisKKwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjkvdGVzdF9pMDY5LmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2OS90ZXN0X2kwNjkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmIzZTUwCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjkvdGVzdF9pMDY5LmgKQEAgLTAsMCArMSwzNyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfSTA2OV9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTA2OV9DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8saTA2OSkKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKyNlbHNlCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9jbGllbnRfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9jbGllbnRfc3ApCisjZW5kaWYKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNjlfY2xpZW50X3Rlc3RzX2xpc3RbXTsKKworaW50MzJfdCBjbGllbnRfdGVzdF93cml0ZV90b19jb2RlX3NwYWNlKHNlY3VyaXR5X3QpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA2OS90ZXN0X3N1cHBfaTA2OS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjkvdGVzdF9zdXBwX2kwNjkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWEzY2ExCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNjkvdGVzdF9zdXBwX2kwNjkuYwpAQCAtMCwwICsxLDM3IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CisKK2ludDMyX3Qgc2VydmVyX3Rlc3Rfd3JpdGVfdG9fY29kZV9zcGFjZSh2b2lkKTsKKworc2VydmVyX3Rlc3RfdCB0ZXN0X2kwNjlfc2VydmVyX3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIHNlcnZlcl90ZXN0X3dyaXRlX3RvX2NvZGVfc3BhY2UsCisgICAgTlVMTCwKK307CisKK2ludDMyX3Qgc2VydmVyX3Rlc3Rfd3JpdGVfdG9fY29kZV9zcGFjZSh2b2lkKQoreworICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDcwL3NvdXJjZS5tayBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDcwL3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzk5MjI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzAvc291cmNlLm1rCkBAIC0wLDAgKzEsMjUgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfaTA3MC5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CisKK0NDX1NPVVJDRV9TUEUgID0gdGVzdF9pMDcwLmMgdGVzdF9zdXBwX2kwNzAuYworQ0NfT1BUSU9OU19TUEUgPQorQVNfU09VUkNFX1NQRSAgPQorQVNfT1BUSU9OU19TUEUgPQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDcwL3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDcwL3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWE1NThjCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzAvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2kwNzAuaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9GRl9CQVNFLCA3MCkKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIHdyaXRlIHRvIGNvbnN0IGRhdGFcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbDsKK3BzYV9hcGlfdCAqcHNhOworCit2b2lkIHRlc3RfZW50cnkodmFsX2FwaV90ICp2YWxfYXBpLCBwc2FfYXBpX3QgKnBzYV9hcGkpCit7CisgICAgaW50MzJfdCAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgIHZhbCA9IHZhbF9hcGk7CisgICAgcHNhID0gcHNhX2FwaTsKKworICAgIC8qIHRlc3QgaW5pdCAqLworICAgIHZhbC0+dGVzdF9pbml0KFRFU1RfTlVNLCBURVNUX0RFU0MsIFRFU1RfRklFTEQoVEVTVF9JU09MQVRJT05fTDEsIFdEX0xPV19USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIFN3aXRjaCB0byBzZWN1cmUgc2lkZSAoY2xpZW50X3BhcnRpdGlvbi5jKSBhbmQgZXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbgorICAgIHRlc3RbbnVtXV9jbGllbnRfdGVzdHNfbGlzdCBmcm9tIFNlY3VyZSBzaWRlICovCisgICAgc3RhdHVzID0gdmFsLT5zd2l0Y2hfdG9fc2VjdXJlX2NsaWVudChURVNUX05VTSk7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDcwL3Rlc3RfaTA3MC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzAvdGVzdF9pMDcwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVjNWRjOQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDcwL3Rlc3RfaTA3MC5jCkBAIC0wLDAgKzEsNzUgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAorI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2Vsc2UKKyNpbmNsdWRlICJ2YWwvY29tbW9uL3ZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaCIKKyNlbmRpZgorCisjaW5jbHVkZSAidGVzdF9pMDcwLmgiCisKK2NsaWVudF90ZXN0X3QgdGVzdF9pMDcwX2NsaWVudF90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBjbGllbnRfdGVzdF93cml0ZV90b19jb25zdF9kYXRhLAorICAgIE5VTEwsCit9OworCitpbnQzMl90IGNsaWVudF90ZXN0X3dyaXRlX3RvX2NvbnN0X2RhdGEoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgIGNvbnN0IGNoYXIgKnN0cmluZyA9ICJUaGlzIHRleHQgc2hvdWxkIGJlIGluIFJPIHNwYWNlIjsKKyAgY2hhciAgICAgICAqcDsKKworICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMV0gVGVzdCB3cml0ZSB0byBjb25zdCBkYXRhXG4iLCAwKTsKKworICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9TKSkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgfQorCisgIHAgPSAoY2hhciAqKSBzdHJpbmc7CisgIHZhbC0+cHJpbnQoUFJJTlRfREVCVUcsICJcdHN0cmluZ1swXSA9IDB4JXhcbiIsICh1aW50MzJfdCkgc3RyaW5nKTsKKyAgdmFsLT5wcmludChQUklOVF9ERUJVRywgIlx0cFswXSA9IDB4JXhcbiIsICh1aW50MzJfdCkgcCk7CisKKyAgLyoKKyAgICogQ2hlY2sgLSBXcml0ZSB0byBjb25zdCBkYXRhIHN0cmluZ1swXS4KKyAgICogVGhpcyBzaG91bGQgZ2VuZXJhdGUgaW50ZXJuYWwgZmF1bHQgb3Igd3JpdGUgaWdub3JlZAorICAgKi8KKyAgcFswXSA9ICdhJzsKKworICBpZiAocFswXSA9PSAnVCcpCisgIHsKKyAgICAgIC8qIFRoaXMgbWVhbnMsIHdyaXRlIGlnbm9yZWQgKi8KKyAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgIH0KKworICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRXcml0ZSB0byBjb25zdGFudCBkYXRhIGNoZWNrIGZhaWxlZFxuIiwgMCk7CisKKyAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCisgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgeworICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICB9CisKKyAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7Cit9CisKKwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzAvdGVzdF9pMDcwLmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3MC90ZXN0X2kwNzAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTg5Yjg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzAvdGVzdF9pMDcwLmgKQEAgLTAsMCArMSwzNyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfSTA3MF9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTA3MF9DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8saTA3MCkKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKyNlbHNlCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9jbGllbnRfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9jbGllbnRfc3ApCisjZW5kaWYKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNzBfY2xpZW50X3Rlc3RzX2xpc3RbXTsKKworaW50MzJfdCBjbGllbnRfdGVzdF93cml0ZV90b19jb25zdF9kYXRhKHNlY3VyaXR5X3QpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3MC90ZXN0X3N1cHBfaTA3MC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzAvdGVzdF9zdXBwX2kwNzAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTA5MGZhCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzAvdGVzdF9zdXBwX2kwNzAuYwpAQCAtMCwwICsxLDM3IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CisKK2ludDMyX3Qgc2VydmVyX3Rlc3Rfd3JpdGVfdG9fY29uc3RfZGF0YSh2b2lkKTsKKworc2VydmVyX3Rlc3RfdCB0ZXN0X2kwNzBfc2VydmVyX3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIHNlcnZlcl90ZXN0X3dyaXRlX3RvX2NvbnN0X2RhdGEsCisgICAgTlVMTCwKK307CisKK2ludDMyX3Qgc2VydmVyX3Rlc3Rfd3JpdGVfdG9fY29uc3RfZGF0YSh2b2lkKQoreworICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDcxL3NvdXJjZS5tayBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDcxL3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmVhZGUwCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzEvc291cmNlLm1rCkBAIC0wLDAgKzEsMjUgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfaTA3MS5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CisKK0NDX1NPVVJDRV9TUEUgID0gdGVzdF9pMDcxLmMgdGVzdF9zdXBwX2kwNzEuYworQ0NfT1BUSU9OU19TUEUgPQorQVNfU09VUkNFX1NQRSAgPQorQVNfT1BUSU9OU19TUEUgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzEvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzEvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MDUwYjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3MS90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfaTA3MS5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0ZGX0JBU0UsIDcxKQorI2RlZmluZSBURVNUX0RFU0MgIlRlc3RpbmcgbWVtb3J5IG1hbmlwdWxhdGlvbiBmdW5jdGlvbnNcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbDsKK3BzYV9hcGlfdCAqcHNhOworCit2b2lkIHRlc3RfZW50cnkodmFsX2FwaV90ICp2YWxfYXBpLCBwc2FfYXBpX3QgKnBzYV9hcGkpCit7CisgICAgaW50MzJfdCAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgIHZhbCA9IHZhbF9hcGk7CisgICAgcHNhID0gcHNhX2FwaTsKKworICAgIC8qIHRlc3QgaW5pdCAqLworICAgIHZhbC0+dGVzdF9pbml0KFRFU1RfTlVNLCBURVNUX0RFU0MsIFRFU1RfRklFTEQoVEVTVF9JU09MQVRJT05fTDEsIFdEX0xPV19USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIFN3aXRjaCB0byBzZWN1cmUgc2lkZSAoY2xpZW50X3BhcnRpdGlvbi5jKSBhbmQgZXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbgorICAgIHRlc3RbbnVtXV9jbGllbnRfdGVzdHNfbGlzdCBmcm9tIFNlY3VyZSBzaWRlICovCisgICAgc3RhdHVzID0gdmFsLT5zd2l0Y2hfdG9fc2VjdXJlX2NsaWVudChURVNUX05VTSk7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDcxL3Rlc3RfaTA3MS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzEvdGVzdF9pMDcxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM1NmEwMgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDcxL3Rlc3RfaTA3MS5jCkBAIC0wLDAgKzEsMTIwIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNlbHNlCisjaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgiCisjZW5kaWYKKworI2luY2x1ZGUgInRlc3RfaTA3MS5oIgorCisjZGVmaW5lIEJVRkZfU0laRSAzMgorCitjbGllbnRfdGVzdF90IHRlc3RfaTA3MV9jbGllbnRfdGVzdHNfbGlzdFtdID0geworICAgIE5VTEwsCisgICAgY2xpZW50X3Rlc3RfbWVtX21hbmlwdWxhdGlvbl9mbiwKKyAgICBOVUxMLAorfTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9tZW1fbWFuaXB1bGF0aW9uX2ZuKHNlY3VyaXR5X3QgY2FsbGVyKQoreworICB1aW50OF90ICAgIGJ1ZmZlcltCVUZGX1NJWkVdID0gezB9OworICB1aW50OF90ICAgIGJ1ZmZlcjFbQlVGRl9TSVpFXSA9IHswfTsKKyAgaW50ICAgICAgICAgaTsKKworICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMV0gVGVzdCBtZW1vcnkgbWFuaXB1bGF0aW9uIGZ1bmN0aW9uc1xuIiwgMCk7CisKKyAgLyogVGVzdCBtZW1zZXQoKS0gU2V0IGFsbCBidWZmZXIgZWxlbWVudHMgIHdpdGggemVybyAqLworICBtZW1zZXQoKHVpbnQ4X3QgKilidWZmZXIsIDAsIEJVRkZfU0laRSk7CisgIGZvciAoaSA9IDA7IGkgPCBCVUZGX1NJWkU7IGkrKykKKyAgeworICAgICAgaWYgKGJ1ZmZlcltpXSAhPSAwKQorICAgICAgeworICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLAorICAgICAgICAgICAgICAgICAgIlx0bWVtc2V0KCkgZmFpbGVkLCBmb3VuZCBidWZmZXIgd2l0aCBub24temVybyB2YWx1ZSA9ICV4XG4iLCBidWZmZXJbaV0pOworICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgICAgIH0KKyAgfQorCisgIC8qIFRlc3QgbWVtc2V0KCktIFNldCBhbGwgYnVmZmVyIGVsZW1lbnRzICB3aXRoIDB4MyAqLworICBtZW1zZXQoKHVpbnQ4X3QgKilidWZmZXIsIDB4MywgQlVGRl9TSVpFKTsKKyAgZm9yIChpID0gMDsgaSA8IEJVRkZfU0laRTsgaSsrKQorICB7CisgICAgICBpZiAoYnVmZmVyW2ldICE9IDB4MykKKyAgICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwKKyAgICAgICAgICAgICAgICAgICJcdG1lbXNldCgpIGZhaWxlZCwgZm91bmQgYnVmZmVyIHdpdGggd3JvbmcgdmFsdWUgPSAleFxuIiwgYnVmZmVyW2ldKTsKKyAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICAgICB9CisgIH0KKworICAvKiBUZXN0IG1lbWNweSgpLCBjb3B5IGJ1ZmZlciB0byBidWZmZXIxICovCisgIG1lbWNweSgodWludDhfdCAqKWJ1ZmZlcjEsICh1aW50OF90ICopYnVmZmVyLCBCVUZGX1NJWkUpOworICBmb3IgKGkgPSAwOyBpIDwgQlVGRl9TSVpFOyBpKyspCisgIHsKKyAgICAgIGlmIChidWZmZXIxW2ldICE9IDB4MykKKyAgICAgIHsKKyAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsCisgICAgICAgICAgICAgICAgICAiXHRtZW1jcHkoKSBmYWlsZWQsIGZvdW5kIGJ1ZmZlciB3aXRoIHdyb25nIHZhbHVlID0gJXhcbiIsIGJ1ZmZlcjFbaV0pOworICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICAgICB9CisgIH0KKworICAvKiBUZXN0IG1lbWNtcCgpIHdpdGggZXF1YWwgYnVmZmVyICovCisgIGlmIChtZW1jbXAoKHVpbnQ4X3QgKilidWZmZXIxLCAodWludDhfdCAqKWJ1ZmZlciwgQlVGRl9TSVpFKSkKKyAgeworICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwKKyAgICAgICAgICAgICAgICAgIlx0bWVtY21wKCkgZmFpbGVkIGZvciB0d28gZXF1YWwgYnVmZmVyXG4iLCAwKTsKKyAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICB9CisKKyAgYnVmZmVyMVswXSA9IDB4NDsKKyAgLyogVGVzdCBtZW1jbXAoKSB3aXRoIHVuZXF1YWwgYnVmZmVyICovCisgIGlmICghbWVtY21wKCh1aW50OF90ICopYnVmZmVyMSwgKHVpbnQ4X3QgKilidWZmZXIsIEJVRkZfU0laRSkpCisgIHsKKyAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsCisgICAgICAgICAgICAgICAgICJcdG1lbWNtcCgpIGZhaWxlZCBmb3IgdHdvIHVuZXF1YWwgYnVmZmVyXG4iLCAwKTsKKyAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICB9CisKKyAgLyogYnVmZmVyWzAtNF0gPSAxIGFuZCBidWZmZXJbNS0zMV0gPSAyICovCisgIG1lbXNldCgodWludDhfdCAqKWJ1ZmZlciwgMSwgQlVGRl9TSVpFKTsKKyAgbWVtc2V0KCh1aW50OF90ICopYnVmZmVyKzUsIDIsIEJVRkZfU0laRS01KTsKKworICAvKiBUZXN0IG1lbW1vdmUoKSwgZXhwZWN0ZWQgcmVzdWx0IGlzIGJ1ZmZlclswLTldID0gMSBhbmQgYnVmZmVyWzEwLTMxXSA9IDIgKi8KKyAgbWVtbW92ZSgodWludDhfdCAqKWJ1ZmZlcis1LCAodWludDhfdCAqKWJ1ZmZlciwgQlVGRl9TSVpFLTUpOworICBmb3IgKGkgPSAwOyBpIDwgQlVGRl9TSVpFOyBpKyspCisgIHsKKyAgICAgIGlmICgoYnVmZmVyW2ldICE9IDB4MSkgJiYgKGkgPCAxMCkpCisgICAgICB7CisgICAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0bWVtbW92ZSgpIGZhaWxlZC0xXG4iLCAwKTsKKyAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKChidWZmZXJbaV0gIT0gMHgyKSAmJiAoaSA+MTApKQorICAgICAgeworICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdG1lbW1vdmUoKSBmYWlsZWQtMlxuIiwgMCk7CisgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICAgICB9CisgIH0KKworICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCisKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDcxL3Rlc3RfaTA3MS5oIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzEvdGVzdF9pMDcxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYxYmFjZgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDcxL3Rlc3RfaTA3MS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisjaWZuZGVmIF9URVNUX0kwNzFfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0kwNzFfQ0xJRU5UX1RFU1RTX0hfCisKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKworI2lmZGVmIE5PTlNFQ1VSRV9URVNUX0JVSUxECisjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLGkwNzEpCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLHRlc3RfZW50cnkpCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLHRlc3RfZW50cnkpCisjZWxzZQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfY2xpZW50X3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfY2xpZW50X3NwKQorI2VuZGlmCisKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKKworZXh0ZXJuIGNsaWVudF90ZXN0X3QgdGVzdF9pMDcxX2NsaWVudF90ZXN0c19saXN0W107CisKK2ludDMyX3QgY2xpZW50X3Rlc3RfbWVtX21hbmlwdWxhdGlvbl9mbihzZWN1cml0eV90KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzEvdGVzdF9zdXBwX2kwNzEuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDcxL3Rlc3Rfc3VwcF9pMDcxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NlMTdkOAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDcxL3Rlc3Rfc3VwcF9pMDcxLmMKQEAgLTAsMCArMSwzNyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKworI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfc2VydmVyX3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfc2VydmVyX3NwKQorZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitpbnQzMl90IHNlcnZlcl90ZXN0X21lbV9tYW5pcHVsYXRpb25fZm4odm9pZCk7CisKK3NlcnZlcl90ZXN0X3QgdGVzdF9pMDcxX3NlcnZlcl90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBzZXJ2ZXJfdGVzdF9tZW1fbWFuaXB1bGF0aW9uX2ZuLAorICAgIE5VTEwsCit9OworCitpbnQzMl90IHNlcnZlcl90ZXN0X21lbV9tYW5pcHVsYXRpb25fZm4odm9pZCkKK3sKKyAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3Mi9zb3VyY2UubWsgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3Mi9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QzZTQ5NQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDcyL3NvdXJjZS5tawpAQCAtMCwwICsxLDI1IEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2kwNzIuYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQorCitDQ19TT1VSQ0VfU1BFICA9IHRlc3RfaTA3Mi5jIHRlc3Rfc3VwcF9pMDcyLmMKK0NDX09QVElPTlNfU1BFID0KK0FTX1NPVVJDRV9TUEUgID0KK0FTX09QVElPTlNfU1BFID0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDcyL3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDcyL3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGU2YWM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzIvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2kwNzIuaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9GRl9CQVNFLCA3MikKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIE5TUEUgYWNjZXNzIHRvIEFQUC1Sb1QgZGF0YVxuIgorVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKK3ZhbF9hcGlfdCAqdmFsID0gTlVMTDsKK3BzYV9hcGlfdCAqcHNhID0gTlVMTDsKKwordm9pZCB0ZXN0X2VudHJ5KHZhbF9hcGlfdCAqdmFsX2FwaSwgcHNhX2FwaV90ICpwc2FfYXBpKQoreworICAgIGludDMyX3QgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9MT1dfVElNRU9VVCkpOworICAgIGlmICghSVNfVEVTVF9TVEFSVCh2YWwtPmdldF9zdGF0dXMoKSkpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBFeGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluIHRlc3RbbnVtXV9jbGllbnRfdGVzdHNfbGlzdCBmcm9tIE5vbi1zZWN1cmUgc2lkZSovCisgICAgc3RhdHVzID0gdmFsLT5leGVjdXRlX25vbl9zZWN1cmVfdGVzdHMoVEVTVF9OVU0sIHRlc3RfaTA3Ml9jbGllbnRfdGVzdHNfbGlzdCwgVFJVRSk7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDcyL3Rlc3RfaTA3Mi5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzIvdGVzdF9pMDcyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE1ODZlNwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDcyL3Rlc3RfaTA3Mi5jCkBAIC0wLDAgKzEsMTI1IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNlbHNlCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ0ZXN0X2kwNzIuaCIKKworY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNzJfY2xpZW50X3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIGNsaWVudF90ZXN0X25zcGVfcmVhZF9hcHBfcm90X3ZhcmlhYmxlLAorICAgIGNsaWVudF90ZXN0X25zcGVfd3JpdGVfYXBwX3JvdF92YXJpYWJsZSwKKyAgICBOVUxMLAorfTsKKworc3RhdGljIGludDMyX3QgZ2V0X3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcyhhZGRyX3QgKmFkZHIpCit7CisgICBwc2FfaGFuZGxlX3QgICAgICAgICAgICBoYW5kbGUgPSAwOworCisgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpOworICAgaWYgKGhhbmRsZSA8IDApCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q29ubmVjdGlvbiBmYWlsZWRcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSURfSEFORExFOworICAgfQorCisgICAvKiBHZXQgQXBwLVJvVCBhZGRyZXNzICovCisgICBwc2Ffb3V0dmVjIG91dHZlY1sxXSA9IHt7YWRkciwgc2l6ZW9mKGFkZHJfdCl9fTsKKyAgIGlmIChwc2EtPmNhbGwoaGFuZGxlLCBOVUxMLCAwLCBvdXR2ZWMsIDEpICE9IFBTQV9TVUNDRVNTKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdG1zZyByZXF1ZXN0IGZhaWxlZFxuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfQ0FMTF9GQUlMRUQ7CisgICB9CisKKyAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKKyAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKK2ludDMyX3QgY2xpZW50X3Rlc3RfbnNwZV9yZWFkX2FwcF9yb3RfdmFyaWFibGUoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICBhZGRyX3QgICBhcHBfcm90X2FkZHI7CisgICB1aW50MzJfdCBkYXRhID0gMHgxMjM0OworCisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMV0gVGVzdCBOU1BFIHJlYWRpbmcgQVBQLVJvVCBkYXRhXG4iLCAwKTsKKworICAgaWYgKFZBTF9FUlJPUihnZXRfc2VjdXJlX3BhcnRpdGlvbl9hZGRyZXNzKCZhcHBfcm90X2FkZHIpKSkKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKworICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCisgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfUkVFTlRFUl9URVNUKSkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgfQorCisgICAvKiBSZWFkIEFwcGxpY2F0aW9uIFJvVCBnbG9iYWwgdmFyaWFibGUgYWRkcmVzcy4KKyAgICAqIFRoaXMgc2hvdWxkIGdlbmVyYXRlIGludGVybmFsIGZhdWx0IG9yIGlnbm9yZSB0aGUgcmVhZC4KKyAgICAqLworICAgZGF0YSA9ICoodWludDMyX3QgKilhcHBfcm90X2FkZHI7CisKKyAgIC8qIERpZCByZWFkIGlnbm9yZT8gKi8KKyAgIGlmIChkYXRhID09IDB4MTIzNCkKKyAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RXhwZWN0ZWQgcmVhZCB0byBmYXVsdCBidXQgaXQgZGlkbid0XG4iLCAwKTsKKworICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCisgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgfQorCisgICByZXR1cm4gVkFMX1NUQVRVU19TUE1fRkFJTEVEOworfQorCitpbnQzMl90IGNsaWVudF90ZXN0X25zcGVfd3JpdGVfYXBwX3JvdF92YXJpYWJsZShzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgIGFkZHJfdCAgIGFwcF9yb3RfYWRkcjsKKyAgIHVpbnQzMl90IGRhdGEgPSAweDEyMzQ7CisKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAyXSBUZXN0IE5TUEUgd3JpdGluZyBBUFAtUm9UIGRhdGFcbiIsIDApOworCisgICBpZiAoVkFMX0VSUk9SKGdldF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MoJmFwcF9yb3RfYWRkcikpKQorICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworCisgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUykpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgIH0KKworICAgLyogV3JpdGUgQXBwbGljYXRpb24gUm9UIGdsb2JhbCB2YXJpYWJsZSBhZGRyZXNzLgorICAgICogVGhpcyBzaG91bGQgZ2VuZXJhdGUgaW50ZXJuYWwgZmF1bHQgb3IgaWdub3JlIHRoZSB3cml0ZS4KKyAgICAqLworICAgKih1aW50MzJfdCAqKWFwcF9yb3RfYWRkciA9ICh1aW50MzJfdClkYXRhOworCisgICAvKiBIYW5kc2hha2Ugd2l0aCBzZXJ2ZXIgdG8gZGVjaWRlIHdyaXRlIHN0YXR1cyAqLworICAgaWYgKChwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpKSA+IDApCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RXhwZWN0ZWQgY29ubmVjdGlvbiB0byBmYWlsIGJ1dCBzdWNjZWVkXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKKyAgIH0KKyAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3Mi90ZXN0X2kwNzIuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDcyL3Rlc3RfaTA3Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NmY4ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3Mi90ZXN0X2kwNzIuaApAQCAtMCwwICsxLDM4IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9JMDcyX0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDcyX0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisKKyNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxpMDcyKQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorI2Vsc2UKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX2NsaWVudF9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX2NsaWVudF9zcCkKKyNlbmRpZgorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CisKK2V4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfaTA3Ml9jbGllbnRfdGVzdHNfbGlzdFtdOworCitpbnQzMl90IGNsaWVudF90ZXN0X25zcGVfcmVhZF9hcHBfcm90X3ZhcmlhYmxlKHNlY3VyaXR5X3QpOworaW50MzJfdCBjbGllbnRfdGVzdF9uc3BlX3dyaXRlX2FwcF9yb3RfdmFyaWFibGUoc2VjdXJpdHlfdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDcyL3Rlc3Rfc3VwcF9pMDcyLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3Mi90ZXN0X3N1cHBfaTA3Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1Y2Y5MTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3Mi90ZXN0X3N1cHBfaTA3Mi5jCkBAIC0wLDAgKzEsMTEzIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfbnNwZV9yZWFkX2FwcF9yb3RfdmFyaWFibGUodm9pZCk7CitpbnQzMl90IHNlcnZlcl90ZXN0X25zcGVfd3JpdGVfYXBwX3JvdF92YXJpYWJsZSh2b2lkKTsKKworI2RlZmluZSBEQVRBX1ZBTFVFIDB4NTQ2NworCisvKiBBcHBsaWNhdGlvbiBSb1QgZGF0YSByZWdpb24gKi8KK3ZvbGF0aWxlIHVpbnQzMl90IGdfdGVzdF9pMDcyID0gREFUQV9WQUxVRTsKKworc2VydmVyX3Rlc3RfdCB0ZXN0X2kwNzJfc2VydmVyX3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIHNlcnZlcl90ZXN0X25zcGVfcmVhZF9hcHBfcm90X3ZhcmlhYmxlLAorICAgIHNlcnZlcl90ZXN0X25zcGVfd3JpdGVfYXBwX3JvdF92YXJpYWJsZSwKKyAgICBOVUxMLAorfTsKKworc3RhdGljIGludDMyX3Qgc2VuZF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3Modm9pZCkKK3sKKyAgICBpbnQzMl90ICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworICAgIHBzYV9tc2dfdCAgICAgICBtc2cgPSB7MH07CisKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKSkKKyAgICB7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKKyAgICB7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTIpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qIFNlbmQgQXBwbGljYXRpb24gUm9UIGRhdGEgYWRkcmVzcyAtIGdsb2JhbCB2YXJpYWJsZSAqLworICAgIHBzYS0+d3JpdGUobXNnLmhhbmRsZSwgMCwgKHZvaWQgKikmZ190ZXN0X2kwNzIsIHNpemVvZihnX3Rlc3RfaTA3MikpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMyksIHN0YXR1cykpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCitpbnQzMl90IHNlcnZlcl90ZXN0X25zcGVfcmVhZF9hcHBfcm90X3ZhcmlhYmxlKHZvaWQpCit7CisgICAgcmV0dXJuIHNlbmRfc2VjdXJlX3BhcnRpdGlvbl9hZGRyZXNzKCk7Cit9CisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfbnNwZV93cml0ZV9hcHBfcm90X3ZhcmlhYmxlKHZvaWQpCit7CisgICAgaW50MzJfdCAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKyAgICBwc2FfbXNnX3QgICAgICAgbXNnID0gezB9OworCisgICAgc3RhdHVzID0gc2VuZF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MoKTsKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICAvKiBXYWl0IGZvciB3cml0ZSB0byBnZXQgcGVyZm9ybWVkIGJ5IGNsaWVudCAqLworICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpKQorICAgIHsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICAvKiBDb25uZWN0aW9uIHJlcXVlc3QgaXMganVzdCBmb3IgaGFuZHNoYWtlLCByZWplY3QgY29ubmVjdGlvbiBhbnl3YXlzICovCisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKKworICAgIC8qIFJlYWNoZWQgaGVyZSBtZWFucyB0aGVyZSBjb3VsZCBiZSB3cml0ZSBzdWNjZWVkIG9yIGlnbm9yZWQgKi8KKyAgICBpZiAoZ190ZXN0X2kwNzIgPT0gREFUQV9WQUxVRSkKKyAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEV4cGVjdGVkIHdyaXRlIHRvIGZhdWx0IGJ1dCBpdCBkaWRuJ3RcbiIsIDApOworCisgICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCisgICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgICB9CisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDczL3NvdXJjZS5tayBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDczL3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2VhNmM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzMvc291cmNlLm1rCkBAIC0wLDAgKzEsMjUgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfaTA3My5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CisKK0NDX1NPVVJDRV9TUEUgID0gdGVzdF9pMDczLmMgdGVzdF9zdXBwX2kwNzMuYworQ0NfT1BUSU9OU19TUEUgPQorQVNfU09VUkNFX1NQRSAgPQorQVNfT1BUSU9OU19TUEUgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzMvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzMvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YjM4MTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3My90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MSBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfaTA3My5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0ZGX0JBU0UsIDczKQorI2RlZmluZSBURVNUX0RFU0MgIlRlc3RpbmcgTlNQRSBhY2Nlc3MgdG8gQVBQLVJvVCBzdGFja1xuIgorVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKK3ZhbF9hcGlfdCAqdmFsID0gTlVMTDsKK3BzYV9hcGlfdCAqcHNhID0gTlVMTDsKKwordm9pZCB0ZXN0X2VudHJ5KHZhbF9hcGlfdCAqdmFsX2FwaSwgcHNhX2FwaV90ICpwc2FfYXBpKQoreworICAgIGludDMyX3QgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9MT1dfVElNRU9VVCkpOworICAgIGlmICghSVNfVEVTVF9TVEFSVCh2YWwtPmdldF9zdGF0dXMoKSkpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBFeGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluIHRlc3RbbnVtXV9jbGllbnRfdGVzdHNfbGlzdCBmcm9tIE5vbi1zZWN1cmUgc2lkZSovCisgICAgc3RhdHVzID0gdmFsLT5leGVjdXRlX25vbl9zZWN1cmVfdGVzdHMoVEVTVF9OVU0sIHRlc3RfaTA3M19jbGllbnRfdGVzdHNfbGlzdCwgVFJVRSk7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDczL3Rlc3RfaTA3My5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzMvdGVzdF9pMDczLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE3MmVjNAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDczL3Rlc3RfaTA3My5jCkBAIC0wLDAgKzEsMTI1IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNlbHNlCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ0ZXN0X2kwNzMuaCIKKworY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNzNfY2xpZW50X3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIGNsaWVudF90ZXN0X25zcGVfcmVhZF9hcHBfcm90X3N0YWNrLAorICAgIGNsaWVudF90ZXN0X25zcGVfd3JpdGVfYXBwX3JvdF9zdGFjaywKKyAgICBOVUxMLAorfTsKKworc3RhdGljIGludDMyX3QgZ2V0X3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcyhhZGRyX3QgKmFkZHIpCit7CisgICBwc2FfaGFuZGxlX3QgICAgICAgICAgICBoYW5kbGUgPSAwOworCisgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpOworICAgaWYgKGhhbmRsZSA8IDApCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q29ubmVjdGlvbiBmYWlsZWRcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSURfSEFORExFOworICAgfQorCisgICAvKiBHZXQgQXBwLVJvVCBhZGRyZXNzICovCisgICBwc2Ffb3V0dmVjIG91dHZlY1sxXSA9IHt7YWRkciwgc2l6ZW9mKGFkZHJfdCl9fTsKKyAgIGlmIChwc2EtPmNhbGwoaGFuZGxlLCBOVUxMLCAwLCBvdXR2ZWMsIDEpICE9IFBTQV9TVUNDRVNTKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdG1zZyByZXF1ZXN0IGZhaWxlZFxuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfQ0FMTF9GQUlMRUQ7CisgICB9CisKKyAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKKyAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKK2ludDMyX3QgY2xpZW50X3Rlc3RfbnNwZV9yZWFkX2FwcF9yb3Rfc3RhY2soc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICBhZGRyX3QgICBhcHBfcm90X2FkZHI7CisgICB1aW50MzJfdCBkYXRhID0gMHgxMjM0OworCisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMV0gVGVzdCBOU1BFIHJlYWRpbmcgQVBQLVJvVCBzdGFja1xuIiwgMCk7CisKKyAgIGlmIChWQUxfRVJST1IoZ2V0X3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcygmYXBwX3JvdF9hZGRyKSkpCisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisKKyAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLworICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX1JFRU5URVJfVEVTVCkpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgIH0KKworICAgLyogUmVhZCBBcHBsaWNhdGlvbiBSb1Qgc3RhY2sgYWRkcmVzcy4KKyAgICAqIFRoaXMgc2hvdWxkIGdlbmVyYXRlIGludGVybmFsIGZhdWx0IG9yIGlnbm9yZSB0aGUgcmVhZC4KKyAgICAqLworICAgZGF0YSA9ICoodWludDMyX3QgKilhcHBfcm90X2FkZHI7CisKKyAgIC8qIERpZCByZWFkIGlnbm9yZT8gKi8KKyAgIGlmIChkYXRhID09IDB4MTIzNCkKKyAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RXhwZWN0ZWQgcmVhZCB0byBmYXVsdCBidXQgaXQgZGlkbid0XG4iLCAwKTsKKworICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCisgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgfQorCisgICByZXR1cm4gVkFMX1NUQVRVU19TUE1fRkFJTEVEOworfQorCitpbnQzMl90IGNsaWVudF90ZXN0X25zcGVfd3JpdGVfYXBwX3JvdF9zdGFjayhzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgIGFkZHJfdCAgIGFwcF9yb3RfYWRkcjsKKyAgIHVpbnQzMl90IGRhdGEgPSAweDEyMzQ7CisKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAyXSBUZXN0IE5TUEUgd3JpdGluZyBBUFAtUm9UIHN0YWNrXG4iLCAwKTsKKworICAgaWYgKFZBTF9FUlJPUihnZXRfc2VjdXJlX3BhcnRpdGlvbl9hZGRyZXNzKCZhcHBfcm90X2FkZHIpKSkKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKworICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCisgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICB9CisKKyAgIC8qIFdyaXRlIEFwcGxpY2F0aW9uIFJvVCBzdGFjayBhZGRyZXNzLgorICAgICogVGhpcyBzaG91bGQgZ2VuZXJhdGUgaW50ZXJuYWwgZmF1bHQgb3IgaWdub3JlIHRoZSB3cml0ZS4KKyAgICAqLworICAgKih1aW50MzJfdCAqKWFwcF9yb3RfYWRkciA9ICh1aW50MzJfdClkYXRhOworCisgICAvKiBIYW5kc2hha2Ugd2l0aCBzZXJ2ZXIgdG8gZGVjaWRlIHdyaXRlIHN0YXR1cyAqLworICAgaWYgKChwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpKSA+IDApCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RXhwZWN0ZWQgY29ubmVjdGlvbiB0byBmYWlsIGJ1dCBzdWNjZWVkXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKKyAgIH0KKyAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3My90ZXN0X2kwNzMuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDczL3Rlc3RfaTA3My5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiYWRjMjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3My90ZXN0X2kwNzMuaApAQCAtMCwwICsxLDM4IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9JMDczX0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDczX0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisKKyNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxpMDczKQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorI2Vsc2UKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX2NsaWVudF9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX2NsaWVudF9zcCkKKyNlbmRpZgorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CisKK2V4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfaTA3M19jbGllbnRfdGVzdHNfbGlzdFtdOworCitpbnQzMl90IGNsaWVudF90ZXN0X25zcGVfcmVhZF9hcHBfcm90X3N0YWNrKHNlY3VyaXR5X3QpOworaW50MzJfdCBjbGllbnRfdGVzdF9uc3BlX3dyaXRlX2FwcF9yb3Rfc3RhY2soc2VjdXJpdHlfdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDczL3Rlc3Rfc3VwcF9pMDczLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3My90ZXN0X3N1cHBfaTA3My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNGIwYTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3My90ZXN0X3N1cHBfaTA3My5jCkBAIC0wLDAgKzEsMTIwIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfbnNwZV9yZWFkX2FwcF9yb3Rfc3RhY2sodm9pZCk7CitpbnQzMl90IHNlcnZlcl90ZXN0X25zcGVfd3JpdGVfYXBwX3JvdF9zdGFjayh2b2lkKTsKKworI2RlZmluZSBEQVRBX1ZBTFVFIDB4NTQ2NworCitzZXJ2ZXJfdGVzdF90IHRlc3RfaTA3M19zZXJ2ZXJfdGVzdHNfbGlzdFtdID0geworICAgIE5VTEwsCisgICAgc2VydmVyX3Rlc3RfbnNwZV9yZWFkX2FwcF9yb3Rfc3RhY2ssCisgICAgc2VydmVyX3Rlc3RfbnNwZV93cml0ZV9hcHBfcm90X3N0YWNrLAorICAgIE5VTEwsCit9OworCitzdGF0aWMgaW50MzJfdCBzZW5kX3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcyhhZGRyX3QgKnN0YWNrKQoreworICAgIGludDMyX3QgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICAgcHNhX21zZ190ICAgICAgIG1zZyA9IHswfTsKKworICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgIHsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKworICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQorICAgIHsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCAtMik7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgLyogU2VuZCBBcHBsaWNhdGlvbiBSb1Qgc3RhY2sgYWRkcmVzcyAqLworICAgIHBzYS0+d3JpdGUobXNnLmhhbmRsZSwgMCwgKHZvaWQgKilzdGFjaywgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfbnNwZV9yZWFkX2FwcF9yb3Rfc3RhY2sodm9pZCkKK3sKKyAgICAvKiBBcHBsaWNhdGlvbiBSb1Qgc3RhY2sgLSBsb2NhbCB2YXJpYWJsZSAqLworICAgIHVpbnQzMl90ICAgICAgICBsX3Rlc3RfaTA3MyA9IERBVEFfVkFMVUU7CisgICAgaW50MzJfdCAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgIHN0YXR1cyA9IHNlbmRfc2VjdXJlX3BhcnRpdGlvbl9hZGRyZXNzKCZsX3Rlc3RfaTA3Myk7CisKKyAgICAvKiBEdW1teSBwcmludCB0byBhdm9pZCBjb21waWxlciBvcHRpbWlzYXRpb24gb24gbG9jYWwgdmFyaWFibGUgKi8KKyAgICB2YWwtPnByaW50KFBSSU5UX0lORk8sICJcdERhdGEgdmFsdWUgMHgleFxuIiwgbF90ZXN0X2kwNzMpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfbnNwZV93cml0ZV9hcHBfcm90X3N0YWNrKHZvaWQpCit7CisgICAgLyogQXBwbGljYXRpb24gUm9UIHN0YWNrIC0gbG9jYWwgdmFyaWFibGUgKi8KKyAgICB1aW50MzJfdCAgICAgICAgbF90ZXN0X2kwNzMgPSBEQVRBX1ZBTFVFOworICAgIGludDMyX3QgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICAgcHNhX21zZ190ICAgICAgIG1zZyA9IHswfTsKKworICAgIHN0YXR1cyA9IHNlbmRfc2VjdXJlX3BhcnRpdGlvbl9hZGRyZXNzKCZsX3Rlc3RfaTA3Myk7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgLyogV2FpdCBmb3Igd3JpdGUgdG8gZ2V0IHBlcmZvcm1lZCBieSBjbGllbnQgKi8KKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjA0KSwgc3RhdHVzKSkKKyAgICB7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgLyogQ29ubmVjdGlvbiByZXF1ZXN0IGlzIGp1c3QgZm9yIGhhbmRzaGFrZSwgcmVqZWN0IGNvbm5lY3Rpb24gYW55d2F5cyAqLworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisKKyAgICAvKiBSZWFjaGVkIGhlcmUgbWVhbnMgdGhlcmUgY291bGQgYmUgd3JpdGUgc3VjY2VlZCBvciBpZ25vcmVkICovCisgICAgaWYgKGxfdGVzdF9pMDczID09IERBVEFfVkFMVUUpCisgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRFeHBlY3RlZCB3cml0ZSB0byBmYXVsdCBidXQgaXQgZGlkbid0XG4iLCAwKTsKKworICAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLworICAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgICB7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICAgfQorICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3NC9zb3VyY2UubWsgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3NC9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgyZTg5MAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc0L3NvdXJjZS5tawpAQCAtMCwwICsxLDI1IEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2kwNzQuYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQorCitDQ19TT1VSQ0VfU1BFICA9IHRlc3RfaTA3NC5jIHRlc3Rfc3VwcF9pMDc0LmMKK0NDX09QVElPTlNfU1BFID0KK0FTX1NPVVJDRV9TUEUgID0KK0FTX09QVElPTlNfU1BFID0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc0L3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc0L3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDY4Y2M4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzQvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2kwNzQuaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9GRl9CQVNFLCA3NCkKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIE5TUEUgYWNjZXNzIHRvIEFQUC1Sb1QgaGVhcFxuIgorVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKK3ZhbF9hcGlfdCAqdmFsID0gTlVMTDsKK3BzYV9hcGlfdCAqcHNhID0gTlVMTDsKKwordm9pZCB0ZXN0X2VudHJ5KHZhbF9hcGlfdCAqdmFsX2FwaSwgcHNhX2FwaV90ICpwc2FfYXBpKQoreworICAgIGludDMyX3QgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9MT1dfVElNRU9VVCkpOworICAgIGlmICghSVNfVEVTVF9TVEFSVCh2YWwtPmdldF9zdGF0dXMoKSkpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBFeGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluIHRlc3RbbnVtXV9jbGllbnRfdGVzdHNfbGlzdCBmcm9tIE5vbi1zZWN1cmUgc2lkZSovCisgICAgc3RhdHVzID0gdmFsLT5leGVjdXRlX25vbl9zZWN1cmVfdGVzdHMoVEVTVF9OVU0sIHRlc3RfaTA3NF9jbGllbnRfdGVzdHNfbGlzdCwgVFJVRSk7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc0L3Rlc3RfaTA3NC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzQvdGVzdF9pMDc0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM1OGNhOQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc0L3Rlc3RfaTA3NC5jCkBAIC0wLDAgKzEsMTQ1IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNlbHNlCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ0ZXN0X2kwNzQuaCIKKworI2RlZmluZSBEQVRBX1ZBTFVFX09SRyAweDExCisjZGVmaW5lIERBVEFfVkFMVUUgICAgIDB4MTIKKyNkZWZpbmUgQlVGRkVSX1NJWkUgICAgMHg0CisKK2NsaWVudF90ZXN0X3QgdGVzdF9pMDc0X2NsaWVudF90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBjbGllbnRfdGVzdF9uc3BlX3JlYWRfYXBwX3JvdF9oZWFwLAorICAgIGNsaWVudF90ZXN0X25zcGVfd3JpdGVfYXBwX3JvdF9oZWFwLAorICAgIE5VTEwsCit9OworCisjaWYgKFNQX0hFQVBfTUVNX1NVUFAgPT0gMSkKK3N0YXRpYyBpbnQzMl90IGdldF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MoYWRkcl90ICphZGRyKQoreworICAgcHNhX2hhbmRsZV90ICAgICAgICAgICAgaGFuZGxlID0gMDsKKworICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxKTsKKyAgIGlmIChoYW5kbGUgPCAwKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENvbm5lY3Rpb24gZmFpbGVkXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKKyAgIH0KKworICAgLyogR2V0IEFwcC1Sb1QgYWRkcmVzcyAqLworICAgcHNhX291dHZlYyBvdXR2ZWNbMV0gPSB7e2FkZHIsIEJVRkZFUl9TSVpFfX07CisgICBpZiAocHNhLT5jYWxsKGhhbmRsZSwgTlVMTCwgMCwgb3V0dmVjLCAxKSAhPSBQU0FfU1VDQ0VTUykKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRtc2cgcmVxdWVzdCBmYWlsZWRcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0NBTExfRkFJTEVEOworICAgfQorCisgICBwc2EtPmNsb3NlKGhhbmRsZSk7CisgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCitpbnQzMl90IGNsaWVudF90ZXN0X25zcGVfcmVhZF9hcHBfcm90X2hlYXAoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICBhZGRyX3QgICBhcHBfcm90X2FkZHI7CisgICB1aW50OF90ICBkYXRhID0gREFUQV9WQUxVRTsKKworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDFdIFRlc3QgTlNQRSByZWFkaW5nIEFQUC1Sb1QgaGVhcFxuIiwgMCk7CisKKyAgIGlmIChWQUxfRVJST1IoZ2V0X3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcygmYXBwX3JvdF9hZGRyKSkpCisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisKKyAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLworICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX1JFRU5URVJfVEVTVCkpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgIH0KKworICAgLyogUmVhZCBBcHBsaWNhdGlvbiBSb1QgaGVhcCBhZGRyZXNzLgorICAgICogVGhpcyBzaG91bGQgZ2VuZXJhdGUgaW50ZXJuYWwgZmF1bHQgb3IgaWdub3JlIHRoZSByZWFkLgorICAgICovCisgICBkYXRhID0gKih1aW50OF90ICopYXBwX3JvdF9hZGRyOworCisgICAvKiBEaWQgcmVhZCBpZ25vcmU/ICovCisgICBpZiAoZGF0YSA9PSBEQVRBX1ZBTFVFKQorICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRFeHBlY3RlZCByZWFkIHRvIGZhdWx0IGJ1dCBpdCBkaWRuJ3RcbiIsIDApOworCisgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICB9CisKKyAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7Cit9CisKK2ludDMyX3QgY2xpZW50X3Rlc3RfbnNwZV93cml0ZV9hcHBfcm90X2hlYXAoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICBhZGRyX3QgICBhcHBfcm90X2FkZHI7CisgICB1aW50OF90ICBkYXRhID0gREFUQV9WQUxVRTsKKworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDJdIFRlc3QgTlNQRSB3cml0aW5nIEFQUC1Sb1QgaGVhcFxuIiwgMCk7CisKKyAgIGlmIChWQUxfRVJST1IoZ2V0X3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcygmYXBwX3JvdF9hZGRyKSkpCisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisKKyAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLworICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKSkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgfQorCisgICAvKiBXcml0ZSBBcHBsaWNhdGlvbiBSb1QgaGVhcCBhZGRyZXNzLgorICAgICogVGhpcyBzaG91bGQgZ2VuZXJhdGUgaW50ZXJuYWwgZmF1bHQgb3IgaWdub3JlIHRoZSB3cml0ZS4KKyAgICAqLworICAgKih1aW50OF90ICopYXBwX3JvdF9hZGRyID0gKHVpbnQ4X3QpZGF0YTsKKworICAgLyogSGFuZHNoYWtlIHdpdGggc2VydmVyIHRvIGRlY2lkZSB3cml0ZSBzdGF0dXMgKi8KKyAgIGlmICgocHNhLT5jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxKSkgPiAwKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEV4cGVjdGVkIGNvbm5lY3Rpb24gdG8gZmFpbCBidXQgc3VjY2VlZFxuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRF9IQU5ETEU7CisgICB9CisgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorI2Vsc2UKK2ludDMyX3QgY2xpZW50X3Rlc3RfbnNwZV9yZWFkX2FwcF9yb3RfaGVhcChzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAxXSBUZXN0IE5TUEUgcmVhZGluZyBBUFAtUm9UIGhlYXBcbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0U2tpcHBpbmcgdGVzdCBhcyBoZWFwIG1lbW9yeSBub3Qgc3VwcG9ydGVkXG4iLCAwKTsKKyAgIHJldHVybiBSRVNVTFRfU0tJUChWQUxfU1RBVFVTX0hFQVBfTk9UX0FWQUlMQUJMRSk7Cit9CisKK2ludDMyX3QgY2xpZW50X3Rlc3RfbnNwZV93cml0ZV9hcHBfcm90X2hlYXAoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMl0gVGVzdCBOU1BFIHdyaXRpbmcgQVBQLVJvVCBoZWFwXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFNraXBwaW5nIHRlc3QgYXMgaGVhcCBtZW1vcnkgbm90IHN1cHBvcnRlZFxuIiwgMCk7CisgICByZXR1cm4gUkVTVUxUX1NLSVAoVkFMX1NUQVRVU19IRUFQX05PVF9BVkFJTEFCTEUpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3NC90ZXN0X2kwNzQuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc0L3Rlc3RfaTA3NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZDFkOGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3NC90ZXN0X2kwNzQuaApAQCAtMCwwICsxLDM4IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9JMDc0X0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDc0X0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisKKyNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxpMDc0KQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorI2Vsc2UKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX2NsaWVudF9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX2NsaWVudF9zcCkKKyNlbmRpZgorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CisKK2V4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfaTA3NF9jbGllbnRfdGVzdHNfbGlzdFtdOworCitpbnQzMl90IGNsaWVudF90ZXN0X25zcGVfcmVhZF9hcHBfcm90X2hlYXAoc2VjdXJpdHlfdCk7CitpbnQzMl90IGNsaWVudF90ZXN0X25zcGVfd3JpdGVfYXBwX3JvdF9oZWFwKHNlY3VyaXR5X3QpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3NC90ZXN0X3N1cHBfaTA3NC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzQvdGVzdF9zdXBwX2kwNzQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmM3OTBlCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzQvdGVzdF9zdXBwX2kwNzQuYwpAQCAtMCwwICsxLDE0NiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKworI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfc2VydmVyX3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfc2VydmVyX3NwKQorZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitpbnQzMl90IHNlcnZlcl90ZXN0X25zcGVfcmVhZF9hcHBfcm90X2hlYXAodm9pZCk7CitpbnQzMl90IHNlcnZlcl90ZXN0X25zcGVfd3JpdGVfYXBwX3JvdF9oZWFwKHZvaWQpOworCisjaWYgKFNQX0hFQVBfTUVNX1NVUFAgPT0gMSkKK3ZvaWQgKm1hbGxvYyhzaXplX3Qgc2l6ZSk7Cit2b2lkIGZyZWUodm9pZCAqcHRyKTsKKyNlbmRpZgorCisjZGVmaW5lIERBVEFfVkFMVUVfT1JHIDB4MTEKKyNkZWZpbmUgQlVGRkVSX1NJWkUgICAgMHg0CisKK3NlcnZlcl90ZXN0X3QgdGVzdF9pMDc0X3NlcnZlcl90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBzZXJ2ZXJfdGVzdF9uc3BlX3JlYWRfYXBwX3JvdF9oZWFwLAorICAgIHNlcnZlcl90ZXN0X25zcGVfd3JpdGVfYXBwX3JvdF9oZWFwLAorICAgIE5VTEwsCit9OworCisjaWYgKFNQX0hFQVBfTUVNX1NVUFAgPT0gMSkKK3N0YXRpYyBpbnQzMl90IHNlbmRfc2VjdXJlX3BhcnRpdGlvbl9hZGRyZXNzKHVpbnQ4X3QgKmhlYXApCit7CisgICAgaW50MzJfdCAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKyAgICBwc2FfbXNnX3QgICAgICAgbXNnID0gezB9OworCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCisgICAgeworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2NhbGxfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCisgICAgeworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIC0yKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICAvKiBTZW5kIEFwcGxpY2F0aW9uIFJvVCBoZWFwIGFkZHJlc3MgKi8KKyAgICBwc2EtPndyaXRlKG1zZy5oYW5kbGUsIDAsICh2b2lkICopaGVhcCwgc2l6ZW9mKEJVRkZFUl9TSVpFKSk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfbnNwZV9yZWFkX2FwcF9yb3RfaGVhcCh2b2lkKQoreworICAgIC8qIEFwcGxpY2F0aW9uIFJvVCBoZWFwIGJ1ZmZlciAqLworICAgIHVpbnQ4X3QgICAgICAgICAqYnVmZmVyOworICAgIGludDMyX3QgICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgYnVmZmVyID0gKHVpbnQ4X3QgKiltYWxsb2Moc2l6ZW9mKHVpbnQ4X3QpICogQlVGRkVSX1NJWkUpOworICAgIG1lbXNldCgodWludDhfdCAqKWJ1ZmZlciwgREFUQV9WQUxVRV9PUkcsIEJVRkZFUl9TSVpFKTsKKworICAgIHN0YXR1cyA9IHNlbmRfc2VjdXJlX3BhcnRpdGlvbl9hZGRyZXNzKGJ1ZmZlcik7CisgICAgZnJlZShidWZmZXIpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9uc3BlX3dyaXRlX2FwcF9yb3RfaGVhcCh2b2lkKQoreworICAgIC8qIEFwcGxpY2F0aW9uIFJvVCBoZWFwIGJ1ZmZlciAqLworICAgIHVpbnQ4X3QgICAgICAgICAqYnVmZmVyOworICAgIGludDMyX3QgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICAgcHNhX21zZ190ICAgICAgIG1zZyA9IHswfTsKKworICAgIGJ1ZmZlciA9ICh1aW50OF90ICopbWFsbG9jKHNpemVvZih1aW50OF90KSAqIEJVRkZFUl9TSVpFKTsKKyAgICBtZW1zZXQoKHVpbnQ4X3QgKilidWZmZXIsIERBVEFfVkFMVUVfT1JHLCBCVUZGRVJfU0laRSk7CisKKyAgICBzdGF0dXMgPSBzZW5kX3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcyhidWZmZXIpOworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIC8qIFdhaXQgZm9yIHdyaXRlIHRvIGdldCBwZXJmb3JtZWQgYnkgY2xpZW50ICovCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwNCksIHN0YXR1cykpCisgICAgeworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qIENvbm5lY3Rpb24gcmVxdWVzdCBpcyBqdXN0IGZvciBoYW5kc2hha2UsIHJlamVjdCBjb25uZWN0aW9uIGFueXdheXMgKi8KKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOworCisgICAgLyogUmVhY2hlZCBoZXJlIG1lYW5zIHRoZXJlIGNvdWxkIGJlIHdyaXRlIHN1Y2NlZWQgb3IgaWdub3JlZCAqLworICAgIGlmIChidWZmZXJbMF0gPT0gREFUQV9WQUxVRV9PUkcpCisgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRFeHBlY3RlZCB3cml0ZSB0byBmYXVsdCBidXQgaXQgZGlkbid0XG4iLCAwKTsKKworICAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLworICAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgICB7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICAgfQorCisgICAgZnJlZShidWZmZXIpOworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisjZWxzZQorCitpbnQzMl90IHNlcnZlcl90ZXN0X25zcGVfcmVhZF9hcHBfcm90X2hlYXAodm9pZCkKK3sKKyAgICByZXR1cm4gUkVTVUxUX1NLSVAoVkFMX1NUQVRVU19IRUFQX05PVF9BVkFJTEFCTEUpOworfQorCitpbnQzMl90IHNlcnZlcl90ZXN0X25zcGVfd3JpdGVfYXBwX3JvdF9oZWFwKHZvaWQpCit7CisgICAgcmV0dXJuIFJFU1VMVF9TS0lQKFZBTF9TVEFUVVNfSEVBUF9OT1RfQVZBSUxBQkxFKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzUvc291cmNlLm1rIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzUvc291cmNlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiODNjODcKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3NS9zb3VyY2UubWsKQEAgLTAsMCArMSwyNSBAQAorIyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisjICoKKyMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjICoKKyMgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjICoKKyMgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjKiovCisKK0NDX1NPVVJDRSAgPSB0ZXN0X2VudHJ5LmMgdGVzdF9pMDc1LmMKK0NDX09QVElPTlMgPQorQVNfU09VUkNFICA9CitBU19PUFRJT05TID0KKworQ0NfU09VUkNFX1NQRSAgPSB0ZXN0X2kwNzUuYyB0ZXN0X3N1cHBfaTA3NS5jCitDQ19PUFRJT05TX1NQRSA9CitBU19TT1VSQ0VfU1BFICA9CitBU19PUFRJT05TX1NQRSA9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3NS90ZXN0X2VudHJ5LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3NS90ZXN0X2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEzMWE1YwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc1L3Rlc3RfZW50cnkuYwpAQCAtMCwwICsxLDUxIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9pMDc1LmgiCisKKyNkZWZpbmUgVEVTVF9OVU0gIFZBTF9DUkVBVEVfVEVTVF9JRChWQUxfRkZfQkFTRSwgNzUpCisjZGVmaW5lIFRFU1RfREVTQyAiVGVzdGluZyBOU1BFIGFjY2VzcyB0byBBUFAtUm9UIG1taW9cbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMSwgV0RfTE9XX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogRXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbiB0ZXN0W251bV1fY2xpZW50X3Rlc3RzX2xpc3QgZnJvbSBOb24tc2VjdXJlIHNpZGUqLworICAgIHN0YXR1cyA9IHZhbC0+ZXhlY3V0ZV9ub25fc2VjdXJlX3Rlc3RzKFRFU1RfTlVNLCB0ZXN0X2kwNzVfY2xpZW50X3Rlc3RzX2xpc3QsIFRSVUUpOworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3NS90ZXN0X2kwNzUuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc1L3Rlc3RfaTA3NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYzdiNmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3NS90ZXN0X2kwNzUuYwpAQCAtMCwwICsxLDEyNyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2lmZGVmIE5PTlNFQ1VSRV9URVNUX0JVSUxECisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjZWxzZQorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAidGVzdF9pMDc1LmgiCisKKyNkZWZpbmUgREFUQV9WQUxVRSAweDEyMzQKKworY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNzVfY2xpZW50X3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIGNsaWVudF90ZXN0X25zcGVfcmVhZF9hcHBfcm90X21taW8sCisgICAgY2xpZW50X3Rlc3RfbnNwZV93cml0ZV9hcHBfcm90X21taW8sCisgICAgTlVMTCwKK307CisKK3N0YXRpYyBpbnQzMl90IGdldF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MoYWRkcl90ICphZGRyKQoreworICAgcHNhX2hhbmRsZV90ICAgICAgICAgICAgaGFuZGxlID0gMDsKKworICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxKTsKKyAgIGlmIChoYW5kbGUgPCAwKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENvbm5lY3Rpb24gZmFpbGVkXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKKyAgIH0KKworICAgLyogR2V0IEFwcC1Sb1QgYWRkcmVzcyAqLworICAgcHNhX291dHZlYyBvdXR2ZWNbMV0gPSB7e2FkZHIsIHNpemVvZihhZGRyX3QpfX07CisgICBpZiAocHNhLT5jYWxsKGhhbmRsZSwgTlVMTCwgMCwgb3V0dmVjLCAxKSAhPSBQU0FfU1VDQ0VTUykKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRtc2cgcmVxdWVzdCBmYWlsZWRcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0NBTExfRkFJTEVEOworICAgfQorCisgICBwc2EtPmNsb3NlKGhhbmRsZSk7CisgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCitpbnQzMl90IGNsaWVudF90ZXN0X25zcGVfcmVhZF9hcHBfcm90X21taW8oc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICBhZGRyX3QgICBhcHBfcm90X2FkZHI7CisgICB1aW50MzJfdCBkYXRhID0gREFUQV9WQUxVRTsKKworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDFdIFRlc3QgTlNQRSByZWFkaW5nIEFQUC1Sb1QgbW1pb1xuIiwgMCk7CisKKyAgIGlmIChWQUxfRVJST1IoZ2V0X3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcygmYXBwX3JvdF9hZGRyKSkpCisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisKKyAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLworICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX1JFRU5URVJfVEVTVCkpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgIH0KKworICAgLyogUmVhZCBBcHBsaWNhdGlvbiBSb1QgbW1pbyBhZGRyZXNzLgorICAgICogVGhpcyBzaG91bGQgZ2VuZXJhdGUgaW50ZXJuYWwgZmF1bHQgb3IgaWdub3JlIHRoZSByZWFkLgorICAgICovCisgICBkYXRhID0gKih1aW50MzJfdCAqKWFwcF9yb3RfYWRkcjsKKworICAgLyogRGlkIHJlYWQgaWdub3JlPyAqLworICAgaWYgKGRhdGEgPT0gREFUQV9WQUxVRSkKKyAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RXhwZWN0ZWQgcmVhZCB0byBmYXVsdCBidXQgaXQgZGlkbid0XG4iLCAwKTsKKworICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCisgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgfQorCisgICByZXR1cm4gVkFMX1NUQVRVU19TUE1fRkFJTEVEOworfQorCitpbnQzMl90IGNsaWVudF90ZXN0X25zcGVfd3JpdGVfYXBwX3JvdF9tbWlvKHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgYWRkcl90ICAgYXBwX3JvdF9hZGRyOworICAgdWludDMyX3QgZGF0YSA9IERBVEFfVkFMVUU7CisKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAyXSBUZXN0IE5TUEUgd3JpdGluZyBBUFAtUm9UIG1taW9cbiIsIDApOworCisgICBpZiAoVkFMX0VSUk9SKGdldF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MoJmFwcF9yb3RfYWRkcikpKQorICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworCisgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUykpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgIH0KKworICAgLyogV3JpdGUgQXBwbGljYXRpb24gUm9UIG1taW8gYWRkcmVzcy4KKyAgICAqIFRoaXMgc2hvdWxkIGdlbmVyYXRlIGludGVybmFsIGZhdWx0IG9yIGlnbm9yZSB0aGUgd3JpdGUuCisgICAgKi8KKyAgICoodWludDMyX3QgKilhcHBfcm90X2FkZHIgPSAodWludDMyX3QpZGF0YTsKKworICAgLyogSGFuZHNoYWtlIHdpdGggc2VydmVyIHRvIGRlY2lkZSB3cml0ZSBzdGF0dXMgKi8KKyAgIGlmICgocHNhLT5jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxKSkgPiAwKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEV4cGVjdGVkIGNvbm5lY3Rpb24gdG8gZmFpbCBidXQgc3VjY2VlZFxuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfSU5WQUxJRF9IQU5ETEU7CisgICB9CisgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzUvdGVzdF9pMDc1LmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3NS90ZXN0X2kwNzUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2FlMzAzCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzUvdGVzdF9pMDc1LmgKQEAgLTAsMCArMSwzOCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfSTA3NV9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTA3NV9DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8saTA3NSkKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKyNlbHNlCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9jbGllbnRfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9jbGllbnRfc3ApCisjZW5kaWYKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNzVfY2xpZW50X3Rlc3RzX2xpc3RbXTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9uc3BlX3JlYWRfYXBwX3JvdF9tbWlvKHNlY3VyaXR5X3QpOworaW50MzJfdCBjbGllbnRfdGVzdF9uc3BlX3dyaXRlX2FwcF9yb3RfbW1pbyhzZWN1cml0eV90KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzUvdGVzdF9zdXBwX2kwNzUuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc1L3Rlc3Rfc3VwcF9pMDc1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk4ZmZmYgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc1L3Rlc3Rfc3VwcF9pMDc1LmMKQEAgLTAsMCArMSwxNDMgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9uc3BlX3JlYWRfYXBwX3JvdF9tbWlvKHZvaWQpOworaW50MzJfdCBzZXJ2ZXJfdGVzdF9uc3BlX3dyaXRlX2FwcF9yb3RfbW1pbyh2b2lkKTsKKworI2RlZmluZSBEQVRBX1ZBTFVFIDB4NTQ2NworCitzZXJ2ZXJfdGVzdF90IHRlc3RfaTA3NV9zZXJ2ZXJfdGVzdHNfbGlzdFtdID0geworICAgIE5VTEwsCisgICAgc2VydmVyX3Rlc3RfbnNwZV9yZWFkX2FwcF9yb3RfbW1pbywKKyAgICBzZXJ2ZXJfdGVzdF9uc3BlX3dyaXRlX2FwcF9yb3RfbW1pbywKKyAgICBOVUxMLAorfTsKKworc3RhdGljIGludDMyX3QgZ2V0X21taW9fYWRkcihhZGRyX3QgKmFkZHIpCit7CisgICBtZW1vcnlfZGVzY190ICAgICAgICAgICAqbWVtb3J5X2Rlc2M7CisgICBpbnQzMl90ICAgICAgICAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgIC8qIEdldCBBUFAtUk9UIE1NSU8gYWRkcmVzcyAqLworICAgc3RhdHVzID0gdmFsLT50YXJnZXRfZ2V0X2NvbmZpZyhUQVJHRVRfQ09ORklHX0NSRUFURV9JRChHUk9VUF9NRU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVNT1JZX1NFUlZFUl9QQVJUSVRJT05fTU1JTywgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QgKiopJm1lbW9yeV9kZXNjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCAqKXNpemVvZihtZW1vcnlfZGVzY190KSk7CisgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAxKSwgc3RhdHVzKSkKKyAgIHsKKyAgICAgICByZXR1cm4gc3RhdHVzOworICAgfQorCisgICAqYWRkciA9IG1lbW9yeV9kZXNjLT5zdGFydDsKKyAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBpbnQzMl90IHNlbmRfc2VjdXJlX3BhcnRpdGlvbl9hZGRyZXNzKGFkZHJfdCAqc3RhY2spCit7CisgICAgaW50MzJfdCAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKyAgICBwc2FfbXNnX3QgICAgICAgbXNnID0gezB9OworCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCisgICAgeworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2NhbGxfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMyksIHN0YXR1cykpCisgICAgeworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIC0yKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICAvKiBTZW5kIEFwcGxpY2F0aW9uIFJvVCBzdGFjayBhZGRyZXNzICovCisgICAgcHNhLT53cml0ZShtc2cuaGFuZGxlLCAwLCAodm9pZCAqKXN0YWNrLCBzaXplb2YodWludDMyX3QpKTsKKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKworICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9uc3BlX3JlYWRfYXBwX3JvdF9tbWlvKHZvaWQpCit7CisgICAgaW50MzJfdCAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKyAgICBhZGRyX3QgICAgICAgICAgYXBwX3JvdF9hZGRyOworCisgICAgc3RhdHVzID0gZ2V0X21taW9fYWRkcigmYXBwX3JvdF9hZGRyKTsKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICByZXR1cm4gc2VuZF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MoJmFwcF9yb3RfYWRkcik7Cit9CisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfbnNwZV93cml0ZV9hcHBfcm90X21taW8odm9pZCkKK3sKKyAgICBhZGRyX3QgICAgICAgICAgYXBwX3JvdF9hZGRyOworICAgIGludDMyX3QgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICAgcHNhX21zZ190ICAgICAgIG1zZyA9IHswfTsKKworICAgIHN0YXR1cyA9IGdldF9tbWlvX2FkZHIoJmFwcF9yb3RfYWRkcik7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgLyogSW5pdGlhbGlzZSBtbWlvIGFkZHJlc3MgKi8KKyAgICAqKHVpbnQzMl90ICopYXBwX3JvdF9hZGRyID0gKHVpbnQzMl90KURBVEFfVkFMVUU7CisgICAgc3RhdHVzID0gc2VuZF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MoJmFwcF9yb3RfYWRkcik7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgLyogV2FpdCBmb3Igd3JpdGUgdG8gZ2V0IHBlcmZvcm1lZCBieSBjbGllbnQgKi8KKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjA0KSwgc3RhdHVzKSkKKyAgICB7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgLyogQ29ubmVjdGlvbiByZXF1ZXN0IGlzIGp1c3QgZm9yIGhhbmRzaGFrZSwgcmVqZWN0IGNvbm5lY3Rpb24gYW55d2F5cyAqLworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisKKyAgICAvKiBSZWFjaGVkIGhlcmUgbWVhbnMgdGhlcmUgY291bGQgYmUgd3JpdGUgc3VjY2VlZCBvciBpZ25vcmVkICovCisgICAgaWYgKCoodWludDMyX3QgKilhcHBfcm90X2FkZHIgPT0gKHVpbnQzMl90KURBVEFfVkFMVUUpCisgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRFeHBlY3RlZCB3cml0ZSB0byBmYXVsdCBidXQgaXQgZGlkbid0XG4iLCAwKTsKKworICAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLworICAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgICB7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICAgfQorICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3Ni9zb3VyY2UubWsgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3Ni9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk4ZmM5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc2L3NvdXJjZS5tawpAQCAtMCwwICsxLDI1IEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2kwNzYuYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQorCitDQ19TT1VSQ0VfU1BFICA9IHRlc3RfaTA3Ni5jIHRlc3Rfc3VwcF9pMDc2LmMKK0NDX09QVElPTlNfU1BFID0KK0FTX1NPVVJDRV9TUEUgID0KK0FTX09QVElPTlNfU1BFID0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc2L3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc2L3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjZlNGY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzYvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2kwNzYuaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9GRl9CQVNFLCA3NikKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIE5TUEUgYWNjZXNzIHRvIFBTQS1Sb1QgZGF0YVxuIgorVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKK3ZhbF9hcGlfdCAqdmFsID0gTlVMTDsKK3BzYV9hcGlfdCAqcHNhID0gTlVMTDsKKwordm9pZCB0ZXN0X2VudHJ5KHZhbF9hcGlfdCAqdmFsX2FwaSwgcHNhX2FwaV90ICpwc2FfYXBpKQoreworICAgIGludDMyX3QgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9MT1dfVElNRU9VVCkpOworICAgIGlmICghSVNfVEVTVF9TVEFSVCh2YWwtPmdldF9zdGF0dXMoKSkpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBFeGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluIHRlc3RbbnVtXV9jbGllbnRfdGVzdHNfbGlzdCBmcm9tIE5vbi1zZWN1cmUgc2lkZSovCisgICAgc3RhdHVzID0gdmFsLT5leGVjdXRlX25vbl9zZWN1cmVfdGVzdHMoVEVTVF9OVU0sIHRlc3RfaTA3Nl9jbGllbnRfdGVzdHNfbGlzdCwgVFJVRSk7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc2L3Rlc3RfaTA3Ni5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzYvdGVzdF9pMDc2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZjMDc3YgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc2L3Rlc3RfaTA3Ni5jCkBAIC0wLDAgKzEsMTQ0IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNlbHNlCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ0ZXN0X2kwNzYuaCIKKworI2RlZmluZSBEQVRBX1ZBTFVFMSAweDEyMzQKKworY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNzZfY2xpZW50X3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIGNsaWVudF90ZXN0X25zcGVfcmVhZF9wc2Ffcm90X3ZhcmlhYmxlLAorICAgIGNsaWVudF90ZXN0X25zcGVfd3JpdGVfcHNhX3JvdF92YXJpYWJsZSwKKyAgICBOVUxMLAorfTsKKworc3RhdGljIGludDMyX3QgZ2V0X3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcyhwc2FfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl90ICphZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJfdGVzdF9mbl9pZF90IHRlc3RfZm5faWQpCit7CisgICAqaGFuZGxlID0gcHNhLT5jb25uZWN0KERSSVZFUl9URVNUX1NJRCwgMSk7CisgICBpZiAoKmhhbmRsZSA8IDApCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q29ubmVjdGlvbiBmYWlsZWRcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSURfSEFORExFOworICAgfQorCisgICAvKiBFeGVjdXRlIGRyaXZlciBmdW5jdGlvbiByZWxhdGVkIHRvIFRFU1RfSVNPTEFUSU9OX1BTQV9ST1RfKiAqLworICAgcHNhX2ludmVjIGludmVjWzFdID0ge3smdGVzdF9mbl9pZCwgc2l6ZW9mKHRlc3RfZm5faWQpfX07CisgICBwc2Ffb3V0dmVjIG91dHZlY1sxXSA9IHt7YWRkciwgc2l6ZW9mKGFkZHJfdCl9fTsKKyAgIGlmIChwc2EtPmNhbGwoKmhhbmRsZSwgaW52ZWMsIDEsIG91dHZlYywgMSkgIT0gUFNBX1NVQ0NFU1MpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0bXNnIHJlcXVlc3QgZmFpbGVkXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19DQUxMX0ZBSUxFRDsKKyAgIH0KKworICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIGludDMyX3QgZ2V0X2RyaXZlcl9zdGF0dXMocHNhX2hhbmRsZV90ICpoYW5kbGUpCit7CisgICBpZiAocHNhLT5jYWxsKCpoYW5kbGUsIE5VTEwsIDAsIE5VTEwsIDApICE9IFBTQV9TVUNDRVNTKQorICAgeworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0NBTExfRkFJTEVEOworICAgfQorICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIHZvaWQgY2xvc2VfZHJpdmVyX2ZuKHBzYV9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgcHNhLT5jbG9zZSgqaGFuZGxlKTsKK30KKworaW50MzJfdCBjbGllbnRfdGVzdF9uc3BlX3JlYWRfcHNhX3JvdF92YXJpYWJsZShzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgIGFkZHJfdCAgICAgICBwc2Ffcm90X2FkZHI7CisgICB1aW50MzJfdCAgICAgZGF0YSA9IERBVEFfVkFMVUUxOworICAgcHNhX2hhbmRsZV90IGhhbmRsZSA9IDA7CisKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAxXSBUZXN0IE5TUEUgcmVhZGluZyBQU0EtUm9UIGRhdGFcbiIsIDApOworCisgICBpZiAoVkFMX0VSUk9SKGdldF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MoJmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHNhX3JvdF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFU1RfSVNPTEFUSU9OX1BTQV9ST1RfREFUQV9SRCkpKQorICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworCisgICBjbG9zZV9kcml2ZXJfZm4oJmhhbmRsZSk7CisKKyAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLworICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX1JFRU5URVJfVEVTVCkpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgIH0KKworICAgLyogUmVhZCBQU0EgUm9UIGdsb2JhbCB2YXJpYWJsZSBhZGRyZXNzLgorICAgICogVGhpcyBzaG91bGQgZ2VuZXJhdGUgaW50ZXJuYWwgZmF1bHQgb3IgaWdub3JlIHRoZSByZWFkLgorICAgICovCisgICBkYXRhID0gKih1aW50MzJfdCAqKXBzYV9yb3RfYWRkcjsKKworICAgLyogRGlkIHJlYWQgaWdub3JlPyAqLworICAgaWYgKGRhdGEgPT0gREFUQV9WQUxVRTEpCisgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEV4cGVjdGVkIHJlYWQgdG8gZmF1bHQgYnV0IGl0IGRpZG4ndFxuIiwgMCk7CisKKyAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLworICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgIH0KKworICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKK30KKworaW50MzJfdCBjbGllbnRfdGVzdF9uc3BlX3dyaXRlX3BzYV9yb3RfdmFyaWFibGUoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICBhZGRyX3QgICAgICAgcHNhX3JvdF9hZGRyOworICAgdWludDMyX3QgICAgIGRhdGEgPSBEQVRBX1ZBTFVFMTsKKyAgIHBzYV9oYW5kbGVfdCBoYW5kbGUgPSAwOworCisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMl0gVGVzdCBOU1BFIHdyaXRpbmcgUFNBLVJvVCBkYXRhXG4iLCAwKTsKKworICAgaWYgKFZBTF9FUlJPUihnZXRfc2VjdXJlX3BhcnRpdGlvbl9hZGRyZXNzKCZoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBzYV9yb3RfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVNUX0lTT0xBVElPTl9QU0FfUk9UX0RBVEFfV1IpKSkKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKworICAgLyogV3JpdGUgUFNBIFJvVCBnbG9iYWwgdmFyaWFibGUgYWRkcmVzcy4KKyAgICAqIFRoaXMgc2hvdWxkIGdlbmVyYXRlIGludGVybmFsIGZhdWx0IG9yIGlnbm9yZSB0aGUgd3JpdGUuCisgICAgKi8KKyAgICoodWludDMyX3QgKilwc2Ffcm90X2FkZHIgPSAodWludDMyX3QpZGF0YTsKKworICAgLyogSGFuZHNoYWtlIHdpdGggZHJpdmVyIHRvIGRlY2lkZSB3cml0ZSBzdGF0dXMgKi8KKyAgIGlmIChWQUxfRVJST1IoZ2V0X2RyaXZlcl9zdGF0dXMoJmhhbmRsZSkpKQorICAgeworICAgICAgIGNsb3NlX2RyaXZlcl9mbigmaGFuZGxlKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19EUklWRVJfRk5fRkFJTEVEOworICAgfQorCisgICBjbG9zZV9kcml2ZXJfZm4oJmhhbmRsZSk7CisgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzYvdGVzdF9pMDc2LmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3Ni90ZXN0X2kwNzYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTVlMTFmCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzYvdGVzdF9pMDc2LmgKQEAgLTAsMCArMSwzOCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfSTA3Nl9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTA3Nl9DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8saTA3NikKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKyNlbHNlCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9jbGllbnRfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9jbGllbnRfc3ApCisjZW5kaWYKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNzZfY2xpZW50X3Rlc3RzX2xpc3RbXTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9uc3BlX3JlYWRfcHNhX3JvdF92YXJpYWJsZShzZWN1cml0eV90KTsKK2ludDMyX3QgY2xpZW50X3Rlc3RfbnNwZV93cml0ZV9wc2Ffcm90X3ZhcmlhYmxlKHNlY3VyaXR5X3QpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3Ni90ZXN0X3N1cHBfaTA3Ni5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzYvdGVzdF9zdXBwX2kwNzYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzJlYzJmCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzYvdGVzdF9zdXBwX2kwNzYuYwpAQCAtMCwwICsxLDQ0IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfbnNwZV9yZWFkX3BzYV9yb3RfdmFyaWFibGUodm9pZCk7CitpbnQzMl90IHNlcnZlcl90ZXN0X25zcGVfd3JpdGVfcHNhX3JvdF92YXJpYWJsZSh2b2lkKTsKKworc2VydmVyX3Rlc3RfdCB0ZXN0X2kwNzZfc2VydmVyX3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIHNlcnZlcl90ZXN0X25zcGVfcmVhZF9wc2Ffcm90X3ZhcmlhYmxlLAorICAgIHNlcnZlcl90ZXN0X25zcGVfd3JpdGVfcHNhX3JvdF92YXJpYWJsZSwKKyAgICBOVUxMLAorfTsKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9uc3BlX3JlYWRfcHNhX3JvdF92YXJpYWJsZSh2b2lkKQoreworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfbnNwZV93cml0ZV9wc2Ffcm90X3ZhcmlhYmxlKHZvaWQpCit7CisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc3L3NvdXJjZS5tayBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc3L3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWFiY2IwCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzcvc291cmNlLm1rCkBAIC0wLDAgKzEsMjUgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfaTA3Ny5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CisKK0NDX1NPVVJDRV9TUEUgID0gdGVzdF9pMDc3LmMgdGVzdF9zdXBwX2kwNzcuYworQ0NfT1BUSU9OU19TUEUgPQorQVNfU09VUkNFX1NQRSAgPQorQVNfT1BUSU9OU19TUEUgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzcvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzcvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZmE4NGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3Ny90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MSBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfaTA3Ny5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0ZGX0JBU0UsIDc3KQorI2RlZmluZSBURVNUX0RFU0MgIlRlc3RpbmcgTlNQRSBhY2Nlc3MgdG8gUFNBLVJvVCBzdGFja1xuIgorVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKK3ZhbF9hcGlfdCAqdmFsID0gTlVMTDsKK3BzYV9hcGlfdCAqcHNhID0gTlVMTDsKKwordm9pZCB0ZXN0X2VudHJ5KHZhbF9hcGlfdCAqdmFsX2FwaSwgcHNhX2FwaV90ICpwc2FfYXBpKQoreworICAgIGludDMyX3QgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9MT1dfVElNRU9VVCkpOworICAgIGlmICghSVNfVEVTVF9TVEFSVCh2YWwtPmdldF9zdGF0dXMoKSkpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBFeGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluIHRlc3RbbnVtXV9jbGllbnRfdGVzdHNfbGlzdCBmcm9tIE5vbi1zZWN1cmUgc2lkZSovCisgICAgc3RhdHVzID0gdmFsLT5leGVjdXRlX25vbl9zZWN1cmVfdGVzdHMoVEVTVF9OVU0sIHRlc3RfaTA3N19jbGllbnRfdGVzdHNfbGlzdCwgVFJVRSk7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc3L3Rlc3RfaTA3Ny5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzcvdGVzdF9pMDc3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY0ZTRkNwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc3L3Rlc3RfaTA3Ny5jCkBAIC0wLDAgKzEsMTQ1IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNlbHNlCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ0ZXN0X2kwNzcuaCIKKworI2RlZmluZSBEQVRBX1ZBTFVFMSAweDEyMzQKKworY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNzdfY2xpZW50X3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIGNsaWVudF90ZXN0X25zcGVfcmVhZF9wc2Ffcm90X3N0YWNrLAorICAgIGNsaWVudF90ZXN0X25zcGVfd3JpdGVfcHNhX3JvdF9zdGFjaywKKyAgICBOVUxMLAorfTsKKworc3RhdGljIGludDMyX3QgZ2V0X3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcyhwc2FfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl90ICphZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJfdGVzdF9mbl9pZF90IHRlc3RfZm5faWQpCit7CisgICAqaGFuZGxlID0gcHNhLT5jb25uZWN0KERSSVZFUl9URVNUX1NJRCwgMSk7CisgICBpZiAoKmhhbmRsZSA8IDApCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q29ubmVjdGlvbiBmYWlsZWRcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSURfSEFORExFOworICAgfQorCisgICAvKiBFeGVjdXRlIGRyaXZlciBmdW5jdGlvbiByZWxhdGVkIHRvIFRFU1RfSVNPTEFUSU9OX1BTQV9ST1RfREFUQV9SRCAqLworICAgcHNhX2ludmVjIGludmVjWzFdID0ge3smdGVzdF9mbl9pZCwgc2l6ZW9mKHRlc3RfZm5faWQpfX07CisgICBwc2Ffb3V0dmVjIG91dHZlY1sxXSA9IHt7YWRkciwgc2l6ZW9mKGFkZHJfdCl9fTsKKyAgIGlmIChwc2EtPmNhbGwoKmhhbmRsZSwgaW52ZWMsIDEsIG91dHZlYywgMSkgIT0gUFNBX1NVQ0NFU1MpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0bXNnIHJlcXVlc3QgZmFpbGVkXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19DQUxMX0ZBSUxFRDsKKyAgIH0KKworICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIGludDMyX3QgZ2V0X2RyaXZlcl9zdGF0dXMocHNhX2hhbmRsZV90ICpoYW5kbGUpCit7CisgICBpZiAocHNhLT5jYWxsKCpoYW5kbGUsIE5VTEwsIDAsIE5VTEwsIDApICE9IFBTQV9TVUNDRVNTKQorICAgeworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0NBTExfRkFJTEVEOworICAgfQorICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIHZvaWQgY2xvc2VfZHJpdmVyX2ZuKHBzYV9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgcHNhLT5jbG9zZSgqaGFuZGxlKTsKK30KKworCitpbnQzMl90IGNsaWVudF90ZXN0X25zcGVfcmVhZF9wc2Ffcm90X3N0YWNrKHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgYWRkcl90ICAgICAgIHBzYV9yb3RfYWRkcjsKKyAgIHVpbnQzMl90ICAgICBkYXRhID0gREFUQV9WQUxVRTE7CisgICBwc2FfaGFuZGxlX3QgaGFuZGxlID0gMDsKKworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDFdIFRlc3QgTlNQRSByZWFkaW5nIFBTQS1Sb1Qgc3RhY2tcbiIsIDApOworCisgICBpZiAoVkFMX0VSUk9SKGdldF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MoJmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHNhX3JvdF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFU1RfSVNPTEFUSU9OX1BTQV9ST1RfU1RBQ0tfUkQpKSkKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKworICAgY2xvc2VfZHJpdmVyX2ZuKCZoYW5kbGUpOworCisgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9SRUVOVEVSX1RFU1QpKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICB9CisKKyAgIC8qIFJlYWQgUFNBIFJvVCBzdGFjayBhZGRyZXNzLgorICAgICogVGhpcyBzaG91bGQgZ2VuZXJhdGUgaW50ZXJuYWwgZmF1bHQgb3IgaWdub3JlIHRoZSByZWFkLgorICAgICovCisgICBkYXRhID0gKih1aW50MzJfdCAqKXBzYV9yb3RfYWRkcjsKKworICAgLyogRGlkIHJlYWQgaWdub3JlPyAqLworICAgaWYgKGRhdGEgPT0gREFUQV9WQUxVRTEpCisgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEV4cGVjdGVkIHJlYWQgdG8gZmF1bHQgYnV0IGl0IGRpZG4ndFxuIiwgMCk7CisKKyAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLworICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgIH0KKworICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKK30KKworaW50MzJfdCBjbGllbnRfdGVzdF9uc3BlX3dyaXRlX3BzYV9yb3Rfc3RhY2soc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICBhZGRyX3QgICAgICAgcHNhX3JvdF9hZGRyOworICAgdWludDMyX3QgICAgIGRhdGEgPSBEQVRBX1ZBTFVFMTsKKyAgIHBzYV9oYW5kbGVfdCBoYW5kbGUgPSAwOworCisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMl0gVGVzdCBOU1BFIHdyaXRpbmcgUFNBLVJvVCBzdGFja1xuIiwgMCk7CisKKyAgIGlmIChWQUxfRVJST1IoZ2V0X3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcygmaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwc2Ffcm90X2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVTVF9JU09MQVRJT05fUFNBX1JPVF9TVEFDS19XUikpKQorICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworCisgICAvKiBXcml0ZSBQU0EgUm9UIHN0YWNrIGFkZHJlc3MuCisgICAgKiBUaGlzIHNob3VsZCBnZW5lcmF0ZSBpbnRlcm5hbCBmYXVsdCBvciBpZ25vcmUgdGhlIHdyaXRlLgorICAgICovCisgICAqKHVpbnQzMl90ICopcHNhX3JvdF9hZGRyID0gKHVpbnQzMl90KWRhdGE7CisKKyAgIC8qIEhhbmRzaGFrZSB3aXRoIGRyaXZlciB0byBkZWNpZGUgd3JpdGUgc3RhdHVzICovCisgICBpZiAoVkFMX0VSUk9SKGdldF9kcml2ZXJfc3RhdHVzKCZoYW5kbGUpKSkKKyAgIHsKKyAgICAgICBjbG9zZV9kcml2ZXJfZm4oJmhhbmRsZSk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRFJJVkVSX0ZOX0ZBSUxFRDsKKyAgIH0KKworICAgY2xvc2VfZHJpdmVyX2ZuKCZoYW5kbGUpOworICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc3L3Rlc3RfaTA3Ny5oIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzcvdGVzdF9pMDc3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdhMzZhOAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc3L3Rlc3RfaTA3Ny5oCkBAIC0wLDAgKzEsMzggQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisjaWZuZGVmIF9URVNUX0kwNzdfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0kwNzdfQ0xJRU5UX1RFU1RTX0hfCisKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKworI2lmZGVmIE5PTlNFQ1VSRV9URVNUX0JVSUxECisjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLGkwNzcpCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLHRlc3RfZW50cnkpCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLHRlc3RfZW50cnkpCisjZWxzZQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfY2xpZW50X3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfY2xpZW50X3NwKQorI2VuZGlmCisKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKKworZXh0ZXJuIGNsaWVudF90ZXN0X3QgdGVzdF9pMDc3X2NsaWVudF90ZXN0c19saXN0W107CisKK2ludDMyX3QgY2xpZW50X3Rlc3RfbnNwZV9yZWFkX3BzYV9yb3Rfc3RhY2soc2VjdXJpdHlfdCk7CitpbnQzMl90IGNsaWVudF90ZXN0X25zcGVfd3JpdGVfcHNhX3JvdF9zdGFjayhzZWN1cml0eV90KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzcvdGVzdF9zdXBwX2kwNzcuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc3L3Rlc3Rfc3VwcF9pMDc3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNhNDIxNwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc3L3Rlc3Rfc3VwcF9pMDc3LmMKQEAgLTAsMCArMSw0NCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKworI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfc2VydmVyX3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfc2VydmVyX3NwKQorZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitpbnQzMl90IHNlcnZlcl90ZXN0X25zcGVfcmVhZF9wc2Ffcm90X3N0YWNrKHZvaWQpOworaW50MzJfdCBzZXJ2ZXJfdGVzdF9uc3BlX3dyaXRlX3BzYV9yb3Rfc3RhY2sodm9pZCk7CisKK3NlcnZlcl90ZXN0X3QgdGVzdF9pMDc3X3NlcnZlcl90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBzZXJ2ZXJfdGVzdF9uc3BlX3JlYWRfcHNhX3JvdF9zdGFjaywKKyAgICBzZXJ2ZXJfdGVzdF9uc3BlX3dyaXRlX3BzYV9yb3Rfc3RhY2ssCisgICAgTlVMTCwKK307CisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfbnNwZV9yZWFkX3BzYV9yb3Rfc3RhY2sodm9pZCkKK3sKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCitpbnQzMl90IHNlcnZlcl90ZXN0X25zcGVfd3JpdGVfcHNhX3JvdF9zdGFjayh2b2lkKQoreworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3OC9zb3VyY2UubWsgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3OC9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI4YTI4MgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc4L3NvdXJjZS5tawpAQCAtMCwwICsxLDI1IEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2kwNzguYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQorCitDQ19TT1VSQ0VfU1BFICA9IHRlc3RfaTA3OC5jIHRlc3Rfc3VwcF9pMDc4LmMKK0NDX09QVElPTlNfU1BFID0KK0FTX1NPVVJDRV9TUEUgID0KK0FTX09QVElPTlNfU1BFID0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc4L3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc4L3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGFlNzlhCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzgvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2kwNzguaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9GRl9CQVNFLCA3OCkKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIE5TUEUgYWNjZXNzIHRvIFBTQS1Sb1QgaGVhcFxuIgorVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKK3ZhbF9hcGlfdCAqdmFsID0gTlVMTDsKK3BzYV9hcGlfdCAqcHNhID0gTlVMTDsKKwordm9pZCB0ZXN0X2VudHJ5KHZhbF9hcGlfdCAqdmFsX2FwaSwgcHNhX2FwaV90ICpwc2FfYXBpKQoreworICAgIGludDMyX3QgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9MT1dfVElNRU9VVCkpOworICAgIGlmICghSVNfVEVTVF9TVEFSVCh2YWwtPmdldF9zdGF0dXMoKSkpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBFeGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluIHRlc3RbbnVtXV9jbGllbnRfdGVzdHNfbGlzdCBmcm9tIE5vbi1zZWN1cmUgc2lkZSovCisgICAgc3RhdHVzID0gdmFsLT5leGVjdXRlX25vbl9zZWN1cmVfdGVzdHMoVEVTVF9OVU0sIHRlc3RfaTA3OF9jbGllbnRfdGVzdHNfbGlzdCwgVFJVRSk7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc4L3Rlc3RfaTA3OC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzgvdGVzdF9pMDc4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM4Yjc4MQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc4L3Rlc3RfaTA3OC5jCkBAIC0wLDAgKzEsMTYyIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNlbHNlCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ0ZXN0X2kwNzguaCIKKworI2RlZmluZSBEQVRBX1ZBTFVFX09SRyAweDExCisjZGVmaW5lIERBVEFfVkFMVUUgICAgIDB4MTIKKyNkZWZpbmUgQlVGRkVSX1NJWkUgICAgMHg0CisKK2NsaWVudF90ZXN0X3QgdGVzdF9pMDc4X2NsaWVudF90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBjbGllbnRfdGVzdF9uc3BlX3JlYWRfcHNhX3JvdF9oZWFwLAorICAgIGNsaWVudF90ZXN0X25zcGVfd3JpdGVfcHNhX3JvdF9oZWFwLAorICAgIE5VTEwsCit9OworCisjaWYgKFNQX0hFQVBfTUVNX1NVUFAgPT0gMSkKK3N0YXRpYyBpbnQzMl90IGdldF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MocHNhX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfdCAqYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyX3Rlc3RfZm5faWRfdCB0ZXN0X2ZuX2lkKQoreworICAgKmhhbmRsZSA9IHBzYS0+Y29ubmVjdChEUklWRVJfVEVTVF9TSUQsIDEpOworICAgaWYgKCpoYW5kbGUgPCAwKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENvbm5lY3Rpb24gZmFpbGVkXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKKyAgIH0KKworICAgLyogRXhlY3V0ZSBkcml2ZXIgZnVuY3Rpb24gcmVsYXRlZCB0byBURVNUX0lTT0xBVElPTl9QU0FfUk9UX0RBVEFfUkQgKi8KKyAgIHBzYV9pbnZlYyBpbnZlY1sxXSA9IHt7JnRlc3RfZm5faWQsIHNpemVvZih0ZXN0X2ZuX2lkKX19OworICAgcHNhX291dHZlYyBvdXR2ZWNbMV0gPSB7e2FkZHIsIHNpemVvZihhZGRyX3QpfX07CisgICBpZiAocHNhLT5jYWxsKCpoYW5kbGUsIGludmVjLCAxLCBvdXR2ZWMsIDEpICE9IFBTQV9TVUNDRVNTKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdG1zZyByZXF1ZXN0IGZhaWxlZFxuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfQ0FMTF9GQUlMRUQ7CisgICB9CisKKyAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBpbnQzMl90IGdldF9kcml2ZXJfc3RhdHVzKHBzYV9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgaWYgKHBzYS0+Y2FsbCgqaGFuZGxlLCBOVUxMLCAwLCBOVUxMLCAwKSAhPSBQU0FfU1VDQ0VTUykKKyAgIHsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19DQUxMX0ZBSUxFRDsKKyAgIH0KKyAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyB2b2lkIGNsb3NlX2RyaXZlcl9mbihwc2FfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgIHBzYS0+Y2xvc2UoKmhhbmRsZSk7Cit9CisKK2ludDMyX3QgY2xpZW50X3Rlc3RfbnNwZV9yZWFkX3BzYV9yb3RfaGVhcChzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgIGFkZHJfdCAgICAgICBwc2Ffcm90X2FkZHI7CisgICB1aW50OF90ICAgICAgZGF0YSA9IERBVEFfVkFMVUU7CisgICBwc2FfaGFuZGxlX3QgaGFuZGxlID0gMDsKKworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDFdIFRlc3QgTlNQRSByZWFkaW5nIFBTQS1Sb1QgaGVhcFxuIiwgMCk7CisKKyAgIGlmIChWQUxfRVJST1IoZ2V0X3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcygmaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwc2Ffcm90X2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVTVF9JU09MQVRJT05fUFNBX1JPVF9IRUFQX1JEKSkpCisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisKKyAgIGNsb3NlX2RyaXZlcl9mbigmaGFuZGxlKTsKKworICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCisgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfUkVFTlRFUl9URVNUKSkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgfQorCisgICAvKiBSZWFkIFBTQSBSb1QgaGVhcCBhZGRyZXNzLgorICAgICogVGhpcyBzaG91bGQgZ2VuZXJhdGUgaW50ZXJuYWwgZmF1bHQgb3IgaWdub3JlIHRoZSByZWFkLgorICAgICovCisgICBkYXRhID0gKih1aW50OF90ICopcHNhX3JvdF9hZGRyOworCisgICAvKiBEaWQgcmVhZCBpZ25vcmU/ICovCisgICBpZiAoZGF0YSA9PSBEQVRBX1ZBTFVFKQorICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRFeHBlY3RlZCByZWFkIHRvIGZhdWx0IGJ1dCBpdCBkaWRuJ3RcbiIsIDApOworCisgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICB9CisKKyAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7Cit9CisKK2ludDMyX3QgY2xpZW50X3Rlc3RfbnNwZV93cml0ZV9wc2Ffcm90X2hlYXAoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICBhZGRyX3QgICAgICAgcHNhX3JvdF9hZGRyOworICAgdWludDhfdCAgICAgIGRhdGEgPSBEQVRBX1ZBTFVFOworICAgcHNhX2hhbmRsZV90IGhhbmRsZSA9IDA7CisKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAyXSBUZXN0IE5TUEUgd3JpdGluZyBQU0EtUm9UIGhlYXBcbiIsIDApOworCisgICBpZiAoVkFMX0VSUk9SKGdldF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MoJmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHNhX3JvdF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFU1RfSVNPTEFUSU9OX1BTQV9ST1RfSEVBUF9XUikpKQorICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworCisgICAvKiBXcml0ZSBQU0EgUm9UIGhlYXAgYWRkcmVzcy4KKyAgICAqIFRoaXMgc2hvdWxkIGdlbmVyYXRlIGludGVybmFsIGZhdWx0IG9yIGlnbm9yZSB0aGUgd3JpdGUuCisgICAgKi8KKyAgICoodWludDhfdCAqKXBzYV9yb3RfYWRkciA9ICh1aW50OF90KWRhdGE7CisKKyAgIC8qIEhhbmRzaGFrZSB3aXRoIGRyaXZlciB0byBkZWNpZGUgd3JpdGUgc3RhdHVzICovCisgICBpZiAoVkFMX0VSUk9SKGdldF9kcml2ZXJfc3RhdHVzKCZoYW5kbGUpKSkKKyAgIHsKKyAgICAgICBjbG9zZV9kcml2ZXJfZm4oJmhhbmRsZSk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRFJJVkVSX0ZOX0ZBSUxFRDsKKyAgIH0KKworICAgY2xvc2VfZHJpdmVyX2ZuKCZoYW5kbGUpOworICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKyNlbHNlCitpbnQzMl90IGNsaWVudF90ZXN0X25zcGVfcmVhZF9wc2Ffcm90X2hlYXAoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMV0gVGVzdCBOU1BFIHJlYWRpbmcgUFNBLVJvVCBoZWFwXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFNraXBwaW5nIHRlc3QgYXMgaGVhcCBtZW1vcnkgbm90IHN1cHBvcnRlZFxuIiwgMCk7CisgICByZXR1cm4gUkVTVUxUX1NLSVAoVkFMX1NUQVRVU19IRUFQX05PVF9BVkFJTEFCTEUpOworfQorCitpbnQzMl90IGNsaWVudF90ZXN0X25zcGVfd3JpdGVfcHNhX3JvdF9oZWFwKHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDJdIFRlc3QgTlNQRSB3cml0aW5nIFBTQS1Sb1QgaGVhcFxuIiwgMCk7CisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRTa2lwcGluZyB0ZXN0IGFzIGhlYXAgbWVtb3J5IG5vdCBzdXBwb3J0ZWRcbiIsIDApOworICAgcmV0dXJuIFJFU1VMVF9TS0lQKFZBTF9TVEFUVVNfSEVBUF9OT1RfQVZBSUxBQkxFKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzgvdGVzdF9pMDc4LmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3OC90ZXN0X2kwNzguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDdmOGQzCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzgvdGVzdF9pMDc4LmgKQEAgLTAsMCArMSwzOCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfSTA3OF9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTA3OF9DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8saTA3OCkKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKyNlbHNlCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9jbGllbnRfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9jbGllbnRfc3ApCisjZW5kaWYKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNzhfY2xpZW50X3Rlc3RzX2xpc3RbXTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9uc3BlX3JlYWRfcHNhX3JvdF9oZWFwKHNlY3VyaXR5X3QpOworaW50MzJfdCBjbGllbnRfdGVzdF9uc3BlX3dyaXRlX3BzYV9yb3RfaGVhcChzZWN1cml0eV90KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzgvdGVzdF9zdXBwX2kwNzguYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc4L3Rlc3Rfc3VwcF9pMDc4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI1ZjY3ZgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc4L3Rlc3Rfc3VwcF9pMDc4LmMKQEAgLTAsMCArMSw0NCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKworI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfc2VydmVyX3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfc2VydmVyX3NwKQorZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitpbnQzMl90IHNlcnZlcl90ZXN0X25zcGVfcmVhZF9wc2Ffcm90X2hlYXAodm9pZCk7CitpbnQzMl90IHNlcnZlcl90ZXN0X25zcGVfd3JpdGVfcHNhX3JvdF9oZWFwKHZvaWQpOworCitzZXJ2ZXJfdGVzdF90IHRlc3RfaTA3OF9zZXJ2ZXJfdGVzdHNfbGlzdFtdID0geworICAgIE5VTEwsCisgICAgc2VydmVyX3Rlc3RfbnNwZV9yZWFkX3BzYV9yb3RfaGVhcCwKKyAgICBzZXJ2ZXJfdGVzdF9uc3BlX3dyaXRlX3BzYV9yb3RfaGVhcCwKKyAgICBOVUxMLAorfTsKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9uc3BlX3JlYWRfcHNhX3JvdF9oZWFwKHZvaWQpCit7CisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9uc3BlX3dyaXRlX3BzYV9yb3RfaGVhcCh2b2lkKQoreworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3OS9zb3VyY2UubWsgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3OS9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkwMjZhOAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc5L3NvdXJjZS5tawpAQCAtMCwwICsxLDI1IEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2kwNzkuYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQorCitDQ19TT1VSQ0VfU1BFICA9IHRlc3RfaTA3OS5jIHRlc3Rfc3VwcF9pMDc5LmMKK0NDX09QVElPTlNfU1BFID0KK0FTX1NPVVJDRV9TUEUgID0KK0FTX09QVElPTlNfU1BFID0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc5L3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc5L3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzFhMTViCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzkvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2kwNzkuaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9GRl9CQVNFLCA3OSkKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIE5TUEUgYWNjZXNzIHRvIFBTQS1Sb1QgbW1pb1xuIgorVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKK3ZhbF9hcGlfdCAqdmFsID0gTlVMTDsKK3BzYV9hcGlfdCAqcHNhID0gTlVMTDsKKwordm9pZCB0ZXN0X2VudHJ5KHZhbF9hcGlfdCAqdmFsX2FwaSwgcHNhX2FwaV90ICpwc2FfYXBpKQoreworICAgIGludDMyX3QgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9MT1dfVElNRU9VVCkpOworICAgIGlmICghSVNfVEVTVF9TVEFSVCh2YWwtPmdldF9zdGF0dXMoKSkpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBFeGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluIHRlc3RbbnVtXV9jbGllbnRfdGVzdHNfbGlzdCBmcm9tIE5vbi1zZWN1cmUgc2lkZSovCisgICAgc3RhdHVzID0gdmFsLT5leGVjdXRlX25vbl9zZWN1cmVfdGVzdHMoVEVTVF9OVU0sIHRlc3RfaTA3OV9jbGllbnRfdGVzdHNfbGlzdCwgVFJVRSk7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc5L3Rlc3RfaTA3OS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzkvdGVzdF9pMDc5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFjNjZmOAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc5L3Rlc3RfaTA3OS5jCkBAIC0wLDAgKzEsMTQ0IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNlbHNlCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ0ZXN0X2kwNzkuaCIKKworI2RlZmluZSBEQVRBX1ZBTFVFIDB4MTIzNAorCitjbGllbnRfdGVzdF90IHRlc3RfaTA3OV9jbGllbnRfdGVzdHNfbGlzdFtdID0geworICAgIE5VTEwsCisgICAgY2xpZW50X3Rlc3RfbnNwZV9yZWFkX3BzYV9yb3RfbW1pbywKKyAgICBjbGllbnRfdGVzdF9uc3BlX3dyaXRlX3BzYV9yb3RfbW1pbywKKyAgICBOVUxMLAorfTsKKworc3RhdGljIGludDMyX3QgZ2V0X3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcyhwc2FfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl90ICphZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJfdGVzdF9mbl9pZF90IHRlc3RfZm5faWQpCit7CisgICAqaGFuZGxlID0gcHNhLT5jb25uZWN0KERSSVZFUl9URVNUX1NJRCwgMSk7CisgICBpZiAoKmhhbmRsZSA8IDApCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q29ubmVjdGlvbiBmYWlsZWRcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSURfSEFORExFOworICAgfQorCisgICAvKiBFeGVjdXRlIGRyaXZlciBmdW5jdGlvbiByZWxhdGVkIHRvIFRFU1RfSVNPTEFUSU9OX1BTQV9ST1RfREFUQV9SRCAqLworICAgcHNhX2ludmVjIGludmVjWzFdID0ge3smdGVzdF9mbl9pZCwgc2l6ZW9mKHRlc3RfZm5faWQpfX07CisgICBwc2Ffb3V0dmVjIG91dHZlY1sxXSA9IHt7YWRkciwgc2l6ZW9mKGFkZHJfdCl9fTsKKyAgIGlmIChwc2EtPmNhbGwoKmhhbmRsZSwgaW52ZWMsIDEsIG91dHZlYywgMSkgIT0gUFNBX1NVQ0NFU1MpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0bXNnIHJlcXVlc3QgZmFpbGVkXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19DQUxMX0ZBSUxFRDsKKyAgIH0KKworICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIGludDMyX3QgZ2V0X2RyaXZlcl9zdGF0dXMocHNhX2hhbmRsZV90ICpoYW5kbGUpCit7CisgICBpZiAocHNhLT5jYWxsKCpoYW5kbGUsIE5VTEwsIDAsIE5VTEwsIDApICE9IFBTQV9TVUNDRVNTKQorICAgeworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0NBTExfRkFJTEVEOworICAgfQorICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIHZvaWQgY2xvc2VfZHJpdmVyX2ZuKHBzYV9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgcHNhLT5jbG9zZSgqaGFuZGxlKTsKK30KKworaW50MzJfdCBjbGllbnRfdGVzdF9uc3BlX3JlYWRfcHNhX3JvdF9tbWlvKHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgYWRkcl90ICAgICAgIHBzYV9yb3RfYWRkcjsKKyAgIHVpbnQzMl90ICAgICBkYXRhID0gREFUQV9WQUxVRTsKKyAgIHBzYV9oYW5kbGVfdCBoYW5kbGUgPSAwOworCisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMV0gVGVzdCBOU1BFIHJlYWRpbmcgUFNBLVJvVCBtbWlvXG4iLCAwKTsKKworICAgaWYgKFZBTF9FUlJPUihnZXRfc2VjdXJlX3BhcnRpdGlvbl9hZGRyZXNzKCZoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBzYV9yb3RfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVNUX0lTT0xBVElPTl9QU0FfUk9UX01NSU9fUkQpKSkKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKworICAgY2xvc2VfZHJpdmVyX2ZuKCZoYW5kbGUpOworCisgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9SRUVOVEVSX1RFU1QpKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICB9CisKKyAgIC8qIFJlYWQgUFNBIFJvVCBtbWlvIGFkZHJlc3MuCisgICAgKiBUaGlzIHNob3VsZCBnZW5lcmF0ZSBpbnRlcm5hbCBmYXVsdCBvciBpZ25vcmUgdGhlIHJlYWQuCisgICAgKi8KKyAgIGRhdGEgPSAqKHVpbnQzMl90ICopcHNhX3JvdF9hZGRyOworCisgICAvKiBEaWQgcmVhZCBpZ25vcmU/ICovCisgICBpZiAoZGF0YSA9PSBEQVRBX1ZBTFVFKQorICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRFeHBlY3RlZCByZWFkIHRvIGZhdWx0IGJ1dCBpdCBkaWRuJ3RcbiIsIDApOworCisgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICB9CisKKyAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7Cit9CisKK2ludDMyX3QgY2xpZW50X3Rlc3RfbnNwZV93cml0ZV9wc2Ffcm90X21taW8oc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICBhZGRyX3QgICAgICAgcHNhX3JvdF9hZGRyOworICAgdWludDMyX3QgICAgIGRhdGEgPSBEQVRBX1ZBTFVFOworICAgcHNhX2hhbmRsZV90IGhhbmRsZSA9IDA7CisKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAyXSBUZXN0IE5TUEUgd3JpdGluZyBQU0EtUm9UIG1taW9cbiIsIDApOworCisgICBpZiAoVkFMX0VSUk9SKGdldF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MoJmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHNhX3JvdF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFU1RfSVNPTEFUSU9OX1BTQV9ST1RfTU1JT19XUikpKQorICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworCisgICAvKiBXcml0ZSBQU0EgUm9UIG1taW8gYWRkcmVzcy4KKyAgICAqIFRoaXMgc2hvdWxkIGdlbmVyYXRlIGludGVybmFsIGZhdWx0IG9yIGlnbm9yZSB0aGUgd3JpdGUuCisgICAgKi8KKyAgICoodWludDMyX3QgKilwc2Ffcm90X2FkZHIgPSAodWludDMyX3QpZGF0YTsKKworICAgLyogSGFuZHNoYWtlIHdpdGggZHJpdmVyIHRvIGRlY2lkZSB3cml0ZSBzdGF0dXMgKi8KKyAgIGlmIChWQUxfRVJST1IoZ2V0X2RyaXZlcl9zdGF0dXMoJmhhbmRsZSkpKQorICAgeworICAgICAgIGNsb3NlX2RyaXZlcl9mbigmaGFuZGxlKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19EUklWRVJfRk5fRkFJTEVEOworICAgfQorCisgICBjbG9zZV9kcml2ZXJfZm4oJmhhbmRsZSk7CisgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzkvdGVzdF9pMDc5LmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA3OS90ZXN0X2kwNzkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWFiNDljCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzkvdGVzdF9pMDc5LmgKQEAgLTAsMCArMSwzOCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfSTA3OV9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTA3OV9DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8saTA3OSkKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKyNlbHNlCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9jbGllbnRfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9jbGllbnRfc3ApCisjZW5kaWYKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2kwNzlfY2xpZW50X3Rlc3RzX2xpc3RbXTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9uc3BlX3JlYWRfcHNhX3JvdF9tbWlvKHNlY3VyaXR5X3QpOworaW50MzJfdCBjbGllbnRfdGVzdF9uc3BlX3dyaXRlX3BzYV9yb3RfbW1pbyhzZWN1cml0eV90KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwNzkvdGVzdF9zdXBwX2kwNzkuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc5L3Rlc3Rfc3VwcF9pMDc5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRhMGY4OQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDc5L3Rlc3Rfc3VwcF9pMDc5LmMKQEAgLTAsMCArMSw0NiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKworI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfc2VydmVyX3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfc2VydmVyX3NwKQorZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitpbnQzMl90IHNlcnZlcl90ZXN0X25zcGVfcmVhZF9wc2Ffcm90X21taW8odm9pZCk7CitpbnQzMl90IHNlcnZlcl90ZXN0X25zcGVfd3JpdGVfcHNhX3JvdF9tbWlvKHZvaWQpOworCisjZGVmaW5lIERBVEFfVkFMVUUgMHg1NDY3CisKK3NlcnZlcl90ZXN0X3QgdGVzdF9pMDc5X3NlcnZlcl90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBzZXJ2ZXJfdGVzdF9uc3BlX3JlYWRfcHNhX3JvdF9tbWlvLAorICAgIHNlcnZlcl90ZXN0X25zcGVfd3JpdGVfcHNhX3JvdF9tbWlvLAorICAgIE5VTEwsCit9OworCitpbnQzMl90IHNlcnZlcl90ZXN0X25zcGVfcmVhZF9wc2Ffcm90X21taW8odm9pZCkKK3sKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCitpbnQzMl90IHNlcnZlcl90ZXN0X25zcGVfd3JpdGVfcHNhX3JvdF9tbWlvKHZvaWQpCit7CisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDgwL3NvdXJjZS5tayBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDgwL3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjE5YjkxCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODAvc291cmNlLm1rCkBAIC0wLDAgKzEsMjUgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfaTA4MC5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CisKK0NDX1NPVVJDRV9TUEUgID0gdGVzdF9pMDgwLmMgdGVzdF9zdXBwX2kwODAuYworQ0NfT1BUSU9OU19TUEUgPQorQVNfU09VUkNFX1NQRSAgPQorQVNfT1BUSU9OU19TUEUgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODAvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODAvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNTBkZDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4MC90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfaTA4MC5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0ZGX0JBU0UsIDgwKQorI2RlZmluZSBURVNUX0RFU0MgIlRlc3RpbmcgQVBQLVJvVCBhY2Nlc3MgdG8gUFNBLVJvVCBkYXRhXG4iCitURVNUX1BVQkxJU0goVEVTVF9OVU0sIHRlc3RfZW50cnkpOwordmFsX2FwaV90ICp2YWwgPSBOVUxMOworcHNhX2FwaV90ICpwc2EgPSBOVUxMOworCit2b2lkIHRlc3RfZW50cnkodmFsX2FwaV90ICp2YWxfYXBpLCBwc2FfYXBpX3QgKnBzYV9hcGkpCit7CisgICAgaW50MzJfdCAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgIHZhbCA9IHZhbF9hcGk7CisgICAgcHNhID0gcHNhX2FwaTsKKworICAgIC8qIHRlc3QgaW5pdCAqLworICAgIHZhbC0+dGVzdF9pbml0KFRFU1RfTlVNLCBURVNUX0RFU0MsIFRFU1RfRklFTEQoVEVTVF9JU09MQVRJT05fTDIsIFdEX0xPV19USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIFN3aXRjaCB0byBzZWN1cmUgc2lkZSAoY2xpZW50X3BhcnRpdGlvbi5jKSBhbmQgZXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbgorICAgIHRlc3RbbnVtXV9jbGllbnRfdGVzdHNfbGlzdCBmcm9tIFNlY3VyZSBzaWRlICovCisgICAgc3RhdHVzID0gdmFsLT5zd2l0Y2hfdG9fc2VjdXJlX2NsaWVudChURVNUX05VTSk7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDgwL3Rlc3RfaTA4MC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODAvdGVzdF9pMDgwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQxYmQzNgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDgwL3Rlc3RfaTA4MC5jCkBAIC0wLDAgKzEsMTQ0IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNlbHNlCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ0ZXN0X2kwODAuaCIKKworI2RlZmluZSBEQVRBX1ZBTFVFMSAweDEyMzQKKworY2xpZW50X3Rlc3RfdCB0ZXN0X2kwODBfY2xpZW50X3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIGNsaWVudF90ZXN0X2FwcF9yb3RfcmVhZF9wc2Ffcm90X3ZhcmlhYmxlLAorICAgIGNsaWVudF90ZXN0X2FwcF9yb3Rfd3JpdGVfcHNhX3JvdF92YXJpYWJsZSwKKyAgICBOVUxMLAorfTsKKworc3RhdGljIGludDMyX3QgZ2V0X3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcyhwc2FfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl90ICphZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJfdGVzdF9mbl9pZF90IHRlc3RfZm5faWQpCit7CisgICAqaGFuZGxlID0gcHNhLT5jb25uZWN0KERSSVZFUl9URVNUX1NJRCwgMSk7CisgICBpZiAoKmhhbmRsZSA8IDApCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q29ubmVjdGlvbiBmYWlsZWRcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSURfSEFORExFOworICAgfQorCisgICAvKiBFeGVjdXRlIGRyaXZlciBmdW5jdGlvbiByZWxhdGVkIHRvIFRFU1RfSVNPTEFUSU9OX1BTQV9ST1RfKiAqLworICAgcHNhX2ludmVjIGludmVjWzFdID0ge3smdGVzdF9mbl9pZCwgc2l6ZW9mKHRlc3RfZm5faWQpfX07CisgICBwc2Ffb3V0dmVjIG91dHZlY1sxXSA9IHt7YWRkciwgc2l6ZW9mKGFkZHJfdCl9fTsKKyAgIGlmIChwc2EtPmNhbGwoKmhhbmRsZSwgaW52ZWMsIDEsIG91dHZlYywgMSkgIT0gUFNBX1NVQ0NFU1MpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0bXNnIHJlcXVlc3QgZmFpbGVkXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19DQUxMX0ZBSUxFRDsKKyAgIH0KKworICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIGludDMyX3QgZ2V0X2RyaXZlcl9zdGF0dXMocHNhX2hhbmRsZV90ICpoYW5kbGUpCit7CisgICBpZiAocHNhLT5jYWxsKCpoYW5kbGUsIE5VTEwsIDAsIE5VTEwsIDApICE9IFBTQV9TVUNDRVNTKQorICAgeworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0NBTExfRkFJTEVEOworICAgfQorICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIHZvaWQgY2xvc2VfZHJpdmVyX2ZuKHBzYV9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgcHNhLT5jbG9zZSgqaGFuZGxlKTsKK30KKworaW50MzJfdCBjbGllbnRfdGVzdF9hcHBfcm90X3JlYWRfcHNhX3JvdF92YXJpYWJsZShzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgIGFkZHJfdCAgICAgICBwc2Ffcm90X2FkZHI7CisgICB1aW50MzJfdCAgICAgZGF0YSA9IERBVEFfVkFMVUUxOworICAgcHNhX2hhbmRsZV90IGhhbmRsZSA9IDA7CisKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAxXSBUZXN0IEFQUC1Sb1QgcmVhZGluZyBQU0EtUm9UIGRhdGFcbiIsIDApOworCisgICBpZiAoVkFMX0VSUk9SKGdldF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MoJmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHNhX3JvdF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFU1RfSVNPTEFUSU9OX1BTQV9ST1RfREFUQV9SRCkpKQorICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworCisgICBjbG9zZV9kcml2ZXJfZm4oJmhhbmRsZSk7CisKKyAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLworICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX1JFRU5URVJfVEVTVCkpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgIH0KKworICAgLyogUmVhZCBQU0EgUm9UIGdsb2JhbCB2YXJpYWJsZSBhZGRyZXNzLgorICAgICogVGhpcyBzaG91bGQgZ2VuZXJhdGUgaW50ZXJuYWwgZmF1bHQgb3IgaWdub3JlIHRoZSByZWFkLgorICAgICovCisgICBkYXRhID0gKih1aW50MzJfdCAqKXBzYV9yb3RfYWRkcjsKKworICAgLyogRGlkIHJlYWQgaWdub3JlPyAqLworICAgaWYgKGRhdGEgPT0gREFUQV9WQUxVRTEpCisgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEV4cGVjdGVkIHJlYWQgdG8gZmF1bHQgYnV0IGl0IGRpZG4ndFxuIiwgMCk7CisKKyAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLworICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgIH0KKworICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKK30KKworaW50MzJfdCBjbGllbnRfdGVzdF9hcHBfcm90X3dyaXRlX3BzYV9yb3RfdmFyaWFibGUoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICBhZGRyX3QgICAgICAgcHNhX3JvdF9hZGRyOworICAgdWludDMyX3QgICAgIGRhdGEgPSBEQVRBX1ZBTFVFMTsKKyAgIHBzYV9oYW5kbGVfdCBoYW5kbGUgPSAwOworCisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMl0gVGVzdCBBUFAtUm9UIHdyaXRpbmcgUFNBLVJvVCBkYXRhXG4iLCAwKTsKKworICAgaWYgKFZBTF9FUlJPUihnZXRfc2VjdXJlX3BhcnRpdGlvbl9hZGRyZXNzKCZoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBzYV9yb3RfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVNUX0lTT0xBVElPTl9QU0FfUk9UX0RBVEFfV1IpKSkKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKworICAgLyogV3JpdGUgUFNBIFJvVCBnbG9iYWwgdmFyaWFibGUgYWRkcmVzcy4KKyAgICAqIFRoaXMgc2hvdWxkIGdlbmVyYXRlIGludGVybmFsIGZhdWx0IG9yIGlnbm9yZSB0aGUgd3JpdGUuCisgICAgKi8KKyAgICoodWludDMyX3QgKilwc2Ffcm90X2FkZHIgPSAodWludDMyX3QpZGF0YTsKKworICAgLyogSGFuZHNoYWtlIHdpdGggZHJpdmVyIHRvIGRlY2lkZSB3cml0ZSBzdGF0dXMgKi8KKyAgIGlmIChWQUxfRVJST1IoZ2V0X2RyaXZlcl9zdGF0dXMoJmhhbmRsZSkpKQorICAgeworICAgICAgIGNsb3NlX2RyaXZlcl9mbigmaGFuZGxlKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19EUklWRVJfRk5fRkFJTEVEOworICAgfQorCisgICBjbG9zZV9kcml2ZXJfZm4oJmhhbmRsZSk7CisgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODAvdGVzdF9pMDgwLmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4MC90ZXN0X2kwODAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGJlN2U5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODAvdGVzdF9pMDgwLmgKQEAgLTAsMCArMSwzOCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfSTA4MF9DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTA4MF9DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8saTA4MCkKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKyNlbHNlCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9jbGllbnRfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9jbGllbnRfc3ApCisjZW5kaWYKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2kwODBfY2xpZW50X3Rlc3RzX2xpc3RbXTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9hcHBfcm90X3JlYWRfcHNhX3JvdF92YXJpYWJsZShzZWN1cml0eV90KTsKK2ludDMyX3QgY2xpZW50X3Rlc3RfYXBwX3JvdF93cml0ZV9wc2Ffcm90X3ZhcmlhYmxlKHNlY3VyaXR5X3QpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4MC90ZXN0X3N1cHBfaTA4MC5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODAvdGVzdF9zdXBwX2kwODAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDAyMjYzCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODAvdGVzdF9zdXBwX2kwODAuYwpAQCAtMCwwICsxLDQ0IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfYXBwX3JvdF9yZWFkX3BzYV9yb3RfdmFyaWFibGUodm9pZCk7CitpbnQzMl90IHNlcnZlcl90ZXN0X2FwcF9yb3Rfd3JpdGVfcHNhX3JvdF92YXJpYWJsZSh2b2lkKTsKKworc2VydmVyX3Rlc3RfdCB0ZXN0X2kwODBfc2VydmVyX3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIHNlcnZlcl90ZXN0X2FwcF9yb3RfcmVhZF9wc2Ffcm90X3ZhcmlhYmxlLAorICAgIHNlcnZlcl90ZXN0X2FwcF9yb3Rfd3JpdGVfcHNhX3JvdF92YXJpYWJsZSwKKyAgICBOVUxMLAorfTsKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9hcHBfcm90X3JlYWRfcHNhX3JvdF92YXJpYWJsZSh2b2lkKQoreworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfYXBwX3JvdF93cml0ZV9wc2Ffcm90X3ZhcmlhYmxlKHZvaWQpCit7CisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDgxL3NvdXJjZS5tayBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDgxL3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODRjMmNiCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODEvc291cmNlLm1rCkBAIC0wLDAgKzEsMjUgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfaTA4MS5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CisKK0NDX1NPVVJDRV9TUEUgID0gdGVzdF9pMDgxLmMgdGVzdF9zdXBwX2kwODEuYworQ0NfT1BUSU9OU19TUEUgPQorQVNfU09VUkNFX1NQRSAgPQorQVNfT1BUSU9OU19TUEUgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODEvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODEvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNjlkYWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4MS90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfaTA4MS5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0ZGX0JBU0UsIDgxKQorI2RlZmluZSBURVNUX0RFU0MgIlRlc3RpbmcgQVBQLVJvVCBhY2Nlc3MgdG8gUFNBLVJvVCBzdGFja1xuIgorVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKK3ZhbF9hcGlfdCAqdmFsID0gTlVMTDsKK3BzYV9hcGlfdCAqcHNhID0gTlVMTDsKKwordm9pZCB0ZXN0X2VudHJ5KHZhbF9hcGlfdCAqdmFsX2FwaSwgcHNhX2FwaV90ICpwc2FfYXBpKQoreworICAgIGludDMyX3QgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wyLCBXRF9MT1dfVElNRU9VVCkpOworICAgIGlmICghSVNfVEVTVF9TVEFSVCh2YWwtPmdldF9zdGF0dXMoKSkpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBTd2l0Y2ggdG8gc2VjdXJlIHNpZGUgKGNsaWVudF9wYXJ0aXRpb24uYykgYW5kIGV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4KKyAgICB0ZXN0W251bV1fY2xpZW50X3Rlc3RzX2xpc3QgZnJvbSBTZWN1cmUgc2lkZSAqLworICAgIHN0YXR1cyA9IHZhbC0+c3dpdGNoX3RvX3NlY3VyZV9jbGllbnQoVEVTVF9OVU0pOworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4MS90ZXN0X2kwODEuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDgxL3Rlc3RfaTA4MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYzA3NjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4MS90ZXN0X2kwODEuYwpAQCAtMCwwICsxLDE0NSBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2lmZGVmIE5PTlNFQ1VSRV9URVNUX0JVSUxECisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjZWxzZQorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAidGVzdF9pMDgxLmgiCisKKyNkZWZpbmUgREFUQV9WQUxVRTEgMHgxMjM0CisKK2NsaWVudF90ZXN0X3QgdGVzdF9pMDgxX2NsaWVudF90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBjbGllbnRfdGVzdF9hcHBfcm90X3JlYWRfcHNhX3JvdF9zdGFjaywKKyAgICBjbGllbnRfdGVzdF9hcHBfcm90X3dyaXRlX3BzYV9yb3Rfc3RhY2ssCisgICAgTlVMTCwKK307CisKK3N0YXRpYyBpbnQzMl90IGdldF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MocHNhX2hhbmRsZV90ICpoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfdCAqYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyX3Rlc3RfZm5faWRfdCB0ZXN0X2ZuX2lkKQoreworICAgKmhhbmRsZSA9IHBzYS0+Y29ubmVjdChEUklWRVJfVEVTVF9TSUQsIDEpOworICAgaWYgKCpoYW5kbGUgPCAwKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENvbm5lY3Rpb24gZmFpbGVkXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKKyAgIH0KKworICAgLyogRXhlY3V0ZSBkcml2ZXIgZnVuY3Rpb24gcmVsYXRlZCB0byBURVNUX0lTT0xBVElPTl9QU0FfUk9UX0RBVEFfUkQgKi8KKyAgIHBzYV9pbnZlYyBpbnZlY1sxXSA9IHt7JnRlc3RfZm5faWQsIHNpemVvZih0ZXN0X2ZuX2lkKX19OworICAgcHNhX291dHZlYyBvdXR2ZWNbMV0gPSB7e2FkZHIsIHNpemVvZihhZGRyX3QpfX07CisgICBpZiAocHNhLT5jYWxsKCpoYW5kbGUsIGludmVjLCAxLCBvdXR2ZWMsIDEpICE9IFBTQV9TVUNDRVNTKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdG1zZyByZXF1ZXN0IGZhaWxlZFxuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfQ0FMTF9GQUlMRUQ7CisgICB9CisKKyAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBpbnQzMl90IGdldF9kcml2ZXJfc3RhdHVzKHBzYV9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgaWYgKHBzYS0+Y2FsbCgqaGFuZGxlLCBOVUxMLCAwLCBOVUxMLCAwKSAhPSBQU0FfU1VDQ0VTUykKKyAgIHsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19DQUxMX0ZBSUxFRDsKKyAgIH0KKyAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyB2b2lkIGNsb3NlX2RyaXZlcl9mbihwc2FfaGFuZGxlX3QgKmhhbmRsZSkKK3sKKyAgIHBzYS0+Y2xvc2UoKmhhbmRsZSk7Cit9CisKKworaW50MzJfdCBjbGllbnRfdGVzdF9hcHBfcm90X3JlYWRfcHNhX3JvdF9zdGFjayhzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgIGFkZHJfdCAgICAgICBwc2Ffcm90X2FkZHI7CisgICB1aW50MzJfdCAgICAgZGF0YSA9IERBVEFfVkFMVUUxOworICAgcHNhX2hhbmRsZV90IGhhbmRsZSA9IDA7CisKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAxXSBUZXN0IEFQUC1Sb1QgcmVhZGluZyBQU0EtUm9UIHN0YWNrXG4iLCAwKTsKKworICAgaWYgKFZBTF9FUlJPUihnZXRfc2VjdXJlX3BhcnRpdGlvbl9hZGRyZXNzKCZoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBzYV9yb3RfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVNUX0lTT0xBVElPTl9QU0FfUk9UX1NUQUNLX1JEKSkpCisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisKKyAgIGNsb3NlX2RyaXZlcl9mbigmaGFuZGxlKTsKKworICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCisgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfUkVFTlRFUl9URVNUKSkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgfQorCisgICAvKiBSZWFkIFBTQSBSb1Qgc3RhY2sgYWRkcmVzcy4KKyAgICAqIFRoaXMgc2hvdWxkIGdlbmVyYXRlIGludGVybmFsIGZhdWx0IG9yIGlnbm9yZSB0aGUgcmVhZC4KKyAgICAqLworICAgZGF0YSA9ICoodWludDMyX3QgKilwc2Ffcm90X2FkZHI7CisKKyAgIC8qIERpZCByZWFkIGlnbm9yZT8gKi8KKyAgIGlmIChkYXRhID09IERBVEFfVkFMVUUxKQorICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRFeHBlY3RlZCByZWFkIHRvIGZhdWx0IGJ1dCBpdCBkaWRuJ3RcbiIsIDApOworCisgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICB9CisKKyAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7Cit9CisKK2ludDMyX3QgY2xpZW50X3Rlc3RfYXBwX3JvdF93cml0ZV9wc2Ffcm90X3N0YWNrKHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgYWRkcl90ICAgICAgIHBzYV9yb3RfYWRkcjsKKyAgIHVpbnQzMl90ICAgICBkYXRhID0gREFUQV9WQUxVRTE7CisgICBwc2FfaGFuZGxlX3QgaGFuZGxlID0gMDsKKworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDJdIFRlc3QgQVBQLVJvVCB3cml0aW5nIFBTQS1Sb1Qgc3RhY2tcbiIsIDApOworCisgICBpZiAoVkFMX0VSUk9SKGdldF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MoJmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHNhX3JvdF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFU1RfSVNPTEFUSU9OX1BTQV9ST1RfU1RBQ0tfV1IpKSkKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKworICAgLyogV3JpdGUgUFNBIFJvVCBzdGFjayBhZGRyZXNzLgorICAgICogVGhpcyBzaG91bGQgZ2VuZXJhdGUgaW50ZXJuYWwgZmF1bHQgb3IgaWdub3JlIHRoZSB3cml0ZS4KKyAgICAqLworICAgKih1aW50MzJfdCAqKXBzYV9yb3RfYWRkciA9ICh1aW50MzJfdClkYXRhOworCisgICAvKiBIYW5kc2hha2Ugd2l0aCBkcml2ZXIgdG8gZGVjaWRlIHdyaXRlIHN0YXR1cyAqLworICAgaWYgKFZBTF9FUlJPUihnZXRfZHJpdmVyX3N0YXR1cygmaGFuZGxlKSkpCisgICB7CisgICAgICAgY2xvc2VfZHJpdmVyX2ZuKCZoYW5kbGUpOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0RSSVZFUl9GTl9GQUlMRUQ7CisgICB9CisKKyAgIGNsb3NlX2RyaXZlcl9mbigmaGFuZGxlKTsKKyAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4MS90ZXN0X2kwODEuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDgxL3Rlc3RfaTA4MS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MmE4OWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4MS90ZXN0X2kwODEuaApAQCAtMCwwICsxLDM4IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9JMDgxX0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDgxX0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisKKyNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxpMDgxKQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorI2Vsc2UKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX2NsaWVudF9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX2NsaWVudF9zcCkKKyNlbmRpZgorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CisKK2V4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfaTA4MV9jbGllbnRfdGVzdHNfbGlzdFtdOworCitpbnQzMl90IGNsaWVudF90ZXN0X2FwcF9yb3RfcmVhZF9wc2Ffcm90X3N0YWNrKHNlY3VyaXR5X3QpOworaW50MzJfdCBjbGllbnRfdGVzdF9hcHBfcm90X3dyaXRlX3BzYV9yb3Rfc3RhY2soc2VjdXJpdHlfdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDgxL3Rlc3Rfc3VwcF9pMDgxLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4MS90ZXN0X3N1cHBfaTA4MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmODQ0MTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4MS90ZXN0X3N1cHBfaTA4MS5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9hcHBfcm90X3JlYWRfYXBwX3JvdF9zdGFjayh2b2lkKTsKK2ludDMyX3Qgc2VydmVyX3Rlc3RfYXBwX3JvdF93cml0ZV9hcHBfcm90X3N0YWNrKHZvaWQpOworCitzZXJ2ZXJfdGVzdF90IHRlc3RfaTA4MV9zZXJ2ZXJfdGVzdHNfbGlzdFtdID0geworICAgIE5VTEwsCisgICAgc2VydmVyX3Rlc3RfYXBwX3JvdF9yZWFkX2FwcF9yb3Rfc3RhY2ssCisgICAgc2VydmVyX3Rlc3RfYXBwX3JvdF93cml0ZV9hcHBfcm90X3N0YWNrLAorICAgIE5VTEwsCit9OworCitpbnQzMl90IHNlcnZlcl90ZXN0X2FwcF9yb3RfcmVhZF9hcHBfcm90X3N0YWNrKHZvaWQpCit7CisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9hcHBfcm90X3dyaXRlX2FwcF9yb3Rfc3RhY2sodm9pZCkKK3sKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODIvc291cmNlLm1rIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODIvc291cmNlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmODU0MTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4Mi9zb3VyY2UubWsKQEAgLTAsMCArMSwyNSBAQAorIyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisjICoKKyMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjICoKKyMgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjICoKKyMgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjKiovCisKK0NDX1NPVVJDRSAgPSB0ZXN0X2VudHJ5LmMgdGVzdF9pMDgyLmMKK0NDX09QVElPTlMgPQorQVNfU09VUkNFICA9CitBU19PUFRJT05TID0KKworQ0NfU09VUkNFX1NQRSAgPSB0ZXN0X2kwODIuYyB0ZXN0X3N1cHBfaTA4Mi5jCitDQ19PUFRJT05TX1NQRSA9CitBU19TT1VSQ0VfU1BFICA9CitBU19PUFRJT05TX1NQRSA9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4Mi90ZXN0X2VudHJ5LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4Mi90ZXN0X2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEzOGNhNwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDgyL3Rlc3RfZW50cnkuYwpAQCAtMCwwICsxLDUyIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9pMDgyLmgiCisKKyNkZWZpbmUgVEVTVF9OVU0gIFZBTF9DUkVBVEVfVEVTVF9JRChWQUxfRkZfQkFTRSwgODIpCisjZGVmaW5lIFRFU1RfREVTQyAiVGVzdGluZyBBUFAtUm9UIGFjY2VzcyB0byBQU0EtUm9UIGhlYXBcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMiwgV0RfTE9XX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogU3dpdGNoIHRvIHNlY3VyZSBzaWRlIChjbGllbnRfcGFydGl0aW9uLmMpIGFuZCBleGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluCisgICAgdGVzdFtudW1dX2NsaWVudF90ZXN0c19saXN0IGZyb20gU2VjdXJlIHNpZGUgKi8KKyAgICBzdGF0dXMgPSB2YWwtPnN3aXRjaF90b19zZWN1cmVfY2xpZW50KFRFU1RfTlVNKTsKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKK3Rlc3RfZXhpdDoKKyAgICB2YWwtPnRlc3RfZXhpdCgpOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODIvdGVzdF9pMDgyLmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4Mi90ZXN0X2kwODIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGRkNmE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODIvdGVzdF9pMDgyLmMKQEAgLTAsMCArMSwxNjIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAorI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2Vsc2UKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisjZW5kaWYKKworI2luY2x1ZGUgInRlc3RfaTA4Mi5oIgorCisjZGVmaW5lIERBVEFfVkFMVUVfT1JHIDB4MTEKKyNkZWZpbmUgREFUQV9WQUxVRSAgICAgMHgxMgorI2RlZmluZSBCVUZGRVJfU0laRSAgICAweDQKKworY2xpZW50X3Rlc3RfdCB0ZXN0X2kwODJfY2xpZW50X3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIGNsaWVudF90ZXN0X2FwcF9yb3RfcmVhZF9wc2Ffcm90X2hlYXAsCisgICAgY2xpZW50X3Rlc3RfYXBwX3JvdF93cml0ZV9wc2Ffcm90X2hlYXAsCisgICAgTlVMTCwKK307CisKKyNpZiAoU1BfSEVBUF9NRU1fU1VQUCA9PSAxKQorc3RhdGljIGludDMyX3QgZ2V0X3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcyhwc2FfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl90ICphZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJfdGVzdF9mbl9pZF90IHRlc3RfZm5faWQpCit7CisgICAqaGFuZGxlID0gcHNhLT5jb25uZWN0KERSSVZFUl9URVNUX1NJRCwgMSk7CisgICBpZiAoKmhhbmRsZSA8IDApCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q29ubmVjdGlvbiBmYWlsZWRcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSURfSEFORExFOworICAgfQorCisgICAvKiBFeGVjdXRlIGRyaXZlciBmdW5jdGlvbiByZWxhdGVkIHRvIFRFU1RfSVNPTEFUSU9OX1BTQV9ST1RfREFUQV9SRCAqLworICAgcHNhX2ludmVjIGludmVjWzFdID0ge3smdGVzdF9mbl9pZCwgc2l6ZW9mKHRlc3RfZm5faWQpfX07CisgICBwc2Ffb3V0dmVjIG91dHZlY1sxXSA9IHt7YWRkciwgc2l6ZW9mKGFkZHJfdCl9fTsKKyAgIGlmIChwc2EtPmNhbGwoKmhhbmRsZSwgaW52ZWMsIDEsIG91dHZlYywgMSkgIT0gUFNBX1NVQ0NFU1MpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0bXNnIHJlcXVlc3QgZmFpbGVkXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19DQUxMX0ZBSUxFRDsKKyAgIH0KKworICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIGludDMyX3QgZ2V0X2RyaXZlcl9zdGF0dXMocHNhX2hhbmRsZV90ICpoYW5kbGUpCit7CisgICBpZiAocHNhLT5jYWxsKCpoYW5kbGUsIE5VTEwsIDAsIE5VTEwsIDApICE9IFBTQV9TVUNDRVNTKQorICAgeworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0NBTExfRkFJTEVEOworICAgfQorICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIHZvaWQgY2xvc2VfZHJpdmVyX2ZuKHBzYV9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgcHNhLT5jbG9zZSgqaGFuZGxlKTsKK30KKworaW50MzJfdCBjbGllbnRfdGVzdF9hcHBfcm90X3JlYWRfcHNhX3JvdF9oZWFwKHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgYWRkcl90ICAgICAgIHBzYV9yb3RfYWRkcjsKKyAgIHVpbnQ4X3QgICAgICBkYXRhID0gREFUQV9WQUxVRTsKKyAgIHBzYV9oYW5kbGVfdCBoYW5kbGUgPSAwOworCisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMV0gVGVzdCBBUFAtUm9UIHJlYWRpbmcgUFNBLVJvVCBoZWFwXG4iLCAwKTsKKworICAgaWYgKFZBTF9FUlJPUihnZXRfc2VjdXJlX3BhcnRpdGlvbl9hZGRyZXNzKCZoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBzYV9yb3RfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVNUX0lTT0xBVElPTl9QU0FfUk9UX0hFQVBfUkQpKSkKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKworICAgY2xvc2VfZHJpdmVyX2ZuKCZoYW5kbGUpOworCisgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9SRUVOVEVSX1RFU1QpKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICB9CisKKyAgIC8qIFJlYWQgUFNBIFJvVCBoZWFwIGFkZHJlc3MuCisgICAgKiBUaGlzIHNob3VsZCBnZW5lcmF0ZSBpbnRlcm5hbCBmYXVsdCBvciBpZ25vcmUgdGhlIHJlYWQuCisgICAgKi8KKyAgIGRhdGEgPSAqKHVpbnQ4X3QgKilwc2Ffcm90X2FkZHI7CisKKyAgIC8qIERpZCByZWFkIGlnbm9yZT8gKi8KKyAgIGlmIChkYXRhID09IERBVEFfVkFMVUUpCisgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEV4cGVjdGVkIHJlYWQgdG8gZmF1bHQgYnV0IGl0IGRpZG4ndFxuIiwgMCk7CisKKyAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLworICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgIH0KKworICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKK30KKworaW50MzJfdCBjbGllbnRfdGVzdF9hcHBfcm90X3dyaXRlX3BzYV9yb3RfaGVhcChzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgIGFkZHJfdCAgICAgICBwc2Ffcm90X2FkZHI7CisgICB1aW50OF90ICAgICAgZGF0YSA9IERBVEFfVkFMVUU7CisgICBwc2FfaGFuZGxlX3QgaGFuZGxlID0gMDsKKworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDJdIFRlc3QgQVBQLVJvVCB3cml0aW5nIFBTQS1Sb1QgaGVhcFxuIiwgMCk7CisKKyAgIGlmIChWQUxfRVJST1IoZ2V0X3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcygmaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwc2Ffcm90X2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVTVF9JU09MQVRJT05fUFNBX1JPVF9IRUFQX1dSKSkpCisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisKKyAgIC8qIFdyaXRlIFBTQSBSb1QgaGVhcCBhZGRyZXNzLgorICAgICogVGhpcyBzaG91bGQgZ2VuZXJhdGUgaW50ZXJuYWwgZmF1bHQgb3IgaWdub3JlIHRoZSB3cml0ZS4KKyAgICAqLworICAgKih1aW50OF90ICopcHNhX3JvdF9hZGRyID0gKHVpbnQ4X3QpZGF0YTsKKworICAgLyogSGFuZHNoYWtlIHdpdGggZHJpdmVyIHRvIGRlY2lkZSB3cml0ZSBzdGF0dXMgKi8KKyAgIGlmIChWQUxfRVJST1IoZ2V0X2RyaXZlcl9zdGF0dXMoJmhhbmRsZSkpKQorICAgeworICAgICAgIGNsb3NlX2RyaXZlcl9mbigmaGFuZGxlKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19EUklWRVJfRk5fRkFJTEVEOworICAgfQorCisgICBjbG9zZV9kcml2ZXJfZm4oJmhhbmRsZSk7CisgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorI2Vsc2UKK2ludDMyX3QgY2xpZW50X3Rlc3RfYXBwX3JvdF9yZWFkX3BzYV9yb3RfaGVhcChzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAxXSBUZXN0IEFQUC1Sb1QgcmVhZGluZyBQU0EtUm9UIGhlYXBcbiIsIDApOworICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0U2tpcHBpbmcgdGVzdCBhcyBoZWFwIG1lbW9yeSBub3Qgc3VwcG9ydGVkXG4iLCAwKTsKKyAgIHJldHVybiBSRVNVTFRfU0tJUChWQUxfU1RBVFVTX0hFQVBfTk9UX0FWQUlMQUJMRSk7Cit9CisKK2ludDMyX3QgY2xpZW50X3Rlc3RfYXBwX3JvdF93cml0ZV9wc2Ffcm90X2hlYXAoc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMl0gVGVzdCBBUFAtUm9UIHdyaXRpbmcgUFNBLVJvVCBoZWFwXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFNraXBwaW5nIHRlc3QgYXMgaGVhcCBtZW1vcnkgbm90IHN1cHBvcnRlZFxuIiwgMCk7CisgICByZXR1cm4gUkVTVUxUX1NLSVAoVkFMX1NUQVRVU19IRUFQX05PVF9BVkFJTEFCTEUpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4Mi90ZXN0X2kwODIuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDgyL3Rlc3RfaTA4Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjY2M3M2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4Mi90ZXN0X2kwODIuaApAQCAtMCwwICsxLDM4IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9JMDgyX0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDgyX0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisKKyNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxpMDgyKQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorI2Vsc2UKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX2NsaWVudF9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX2NsaWVudF9zcCkKKyNlbmRpZgorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CisKK2V4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfaTA4Ml9jbGllbnRfdGVzdHNfbGlzdFtdOworCitpbnQzMl90IGNsaWVudF90ZXN0X2FwcF9yb3RfcmVhZF9wc2Ffcm90X2hlYXAoc2VjdXJpdHlfdCk7CitpbnQzMl90IGNsaWVudF90ZXN0X2FwcF9yb3Rfd3JpdGVfcHNhX3JvdF9oZWFwKHNlY3VyaXR5X3QpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4Mi90ZXN0X3N1cHBfaTA4Mi5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODIvdGVzdF9zdXBwX2kwODIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGE1YjdhCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODIvdGVzdF9zdXBwX2kwODIuYwpAQCAtMCwwICsxLDQ0IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CisKK2ludDMyX3Qgc2VydmVyX3Rlc3RfYXBwX3JvdF9yZWFkX3BzYV9yb3RfaGVhcCh2b2lkKTsKK2ludDMyX3Qgc2VydmVyX3Rlc3RfYXBwX3JvdF93cml0ZV9wc2Ffcm90X2hlYXAodm9pZCk7CisKK3NlcnZlcl90ZXN0X3QgdGVzdF9pMDgyX3NlcnZlcl90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBzZXJ2ZXJfdGVzdF9hcHBfcm90X3JlYWRfcHNhX3JvdF9oZWFwLAorICAgIHNlcnZlcl90ZXN0X2FwcF9yb3Rfd3JpdGVfcHNhX3JvdF9oZWFwLAorICAgIE5VTEwsCit9OworCitpbnQzMl90IHNlcnZlcl90ZXN0X2FwcF9yb3RfcmVhZF9wc2Ffcm90X2hlYXAodm9pZCkKK3sKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCitpbnQzMl90IHNlcnZlcl90ZXN0X2FwcF9yb3Rfd3JpdGVfcHNhX3JvdF9oZWFwKHZvaWQpCit7CisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDgzL3NvdXJjZS5tayBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDgzL3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDM1NGViCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODMvc291cmNlLm1rCkBAIC0wLDAgKzEsMjUgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfaTA4My5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CisKK0NDX1NPVVJDRV9TUEUgID0gdGVzdF9pMDgzLmMgdGVzdF9zdXBwX2kwODMuYworQ0NfT1BUSU9OU19TUEUgPQorQVNfU09VUkNFX1NQRSAgPQorQVNfT1BUSU9OU19TUEUgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODMvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODMvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMzQ1MmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4My90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfaTA4My5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0ZGX0JBU0UsIDgzKQorI2RlZmluZSBURVNUX0RFU0MgIlRlc3RpbmcgQVBQLVJvVCBhY2Nlc3MgdG8gUFNBLVJvVCBtbWlvXG4iCitURVNUX1BVQkxJU0goVEVTVF9OVU0sIHRlc3RfZW50cnkpOwordmFsX2FwaV90ICp2YWwgPSBOVUxMOworcHNhX2FwaV90ICpwc2EgPSBOVUxMOworCit2b2lkIHRlc3RfZW50cnkodmFsX2FwaV90ICp2YWxfYXBpLCBwc2FfYXBpX3QgKnBzYV9hcGkpCit7CisgICAgaW50MzJfdCAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgIHZhbCA9IHZhbF9hcGk7CisgICAgcHNhID0gcHNhX2FwaTsKKworICAgIC8qIHRlc3QgaW5pdCAqLworICAgIHZhbC0+dGVzdF9pbml0KFRFU1RfTlVNLCBURVNUX0RFU0MsIFRFU1RfRklFTEQoVEVTVF9JU09MQVRJT05fTDIsIFdEX0xPV19USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIFN3aXRjaCB0byBzZWN1cmUgc2lkZSAoY2xpZW50X3BhcnRpdGlvbi5jKSBhbmQgZXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbgorICAgIHRlc3RbbnVtXV9jbGllbnRfdGVzdHNfbGlzdCBmcm9tIFNlY3VyZSBzaWRlICovCisgICAgc3RhdHVzID0gdmFsLT5zd2l0Y2hfdG9fc2VjdXJlX2NsaWVudChURVNUX05VTSk7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDgzL3Rlc3RfaTA4My5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODMvdGVzdF9pMDgzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg5OWUzZQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDgzL3Rlc3RfaTA4My5jCkBAIC0wLDAgKzEsMTQ0IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNlbHNlCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ0ZXN0X2kwODMuaCIKKworI2RlZmluZSBEQVRBX1ZBTFVFIDB4MTIzNAorCitjbGllbnRfdGVzdF90IHRlc3RfaTA4M19jbGllbnRfdGVzdHNfbGlzdFtdID0geworICAgIE5VTEwsCisgICAgY2xpZW50X3Rlc3RfYXBwX3JvdF9yZWFkX3BzYV9yb3RfbW1pbywKKyAgICBjbGllbnRfdGVzdF9hcHBfcm90X3dyaXRlX3BzYV9yb3RfbW1pbywKKyAgICBOVUxMLAorfTsKKworc3RhdGljIGludDMyX3QgZ2V0X3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcyhwc2FfaGFuZGxlX3QgKmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl90ICphZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJfdGVzdF9mbl9pZF90IHRlc3RfZm5faWQpCit7CisgICAqaGFuZGxlID0gcHNhLT5jb25uZWN0KERSSVZFUl9URVNUX1NJRCwgMSk7CisgICBpZiAoKmhhbmRsZSA8IDApCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q29ubmVjdGlvbiBmYWlsZWRcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSURfSEFORExFOworICAgfQorCisgICAvKiBFeGVjdXRlIGRyaXZlciBmdW5jdGlvbiByZWxhdGVkIHRvIFRFU1RfSVNPTEFUSU9OX1BTQV9ST1RfREFUQV9SRCAqLworICAgcHNhX2ludmVjIGludmVjWzFdID0ge3smdGVzdF9mbl9pZCwgc2l6ZW9mKHRlc3RfZm5faWQpfX07CisgICBwc2Ffb3V0dmVjIG91dHZlY1sxXSA9IHt7YWRkciwgc2l6ZW9mKGFkZHJfdCl9fTsKKyAgIGlmIChwc2EtPmNhbGwoKmhhbmRsZSwgaW52ZWMsIDEsIG91dHZlYywgMSkgIT0gUFNBX1NVQ0NFU1MpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0bXNnIHJlcXVlc3QgZmFpbGVkXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19DQUxMX0ZBSUxFRDsKKyAgIH0KKworICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIGludDMyX3QgZ2V0X2RyaXZlcl9zdGF0dXMocHNhX2hhbmRsZV90ICpoYW5kbGUpCit7CisgICBpZiAocHNhLT5jYWxsKCpoYW5kbGUsIE5VTEwsIDAsIE5VTEwsIDApICE9IFBTQV9TVUNDRVNTKQorICAgeworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0NBTExfRkFJTEVEOworICAgfQorICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIHZvaWQgY2xvc2VfZHJpdmVyX2ZuKHBzYV9oYW5kbGVfdCAqaGFuZGxlKQoreworICAgcHNhLT5jbG9zZSgqaGFuZGxlKTsKK30KKworaW50MzJfdCBjbGllbnRfdGVzdF9hcHBfcm90X3JlYWRfcHNhX3JvdF9tbWlvKHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgYWRkcl90ICAgICAgIHBzYV9yb3RfYWRkcjsKKyAgIHVpbnQzMl90ICAgICBkYXRhID0gREFUQV9WQUxVRTsKKyAgIHBzYV9oYW5kbGVfdCBoYW5kbGUgPSAwOworCisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMV0gVGVzdCBBUFAtUm9UIHJlYWRpbmcgUFNBLVJvVCBtbWlvXG4iLCAwKTsKKworICAgaWYgKFZBTF9FUlJPUihnZXRfc2VjdXJlX3BhcnRpdGlvbl9hZGRyZXNzKCZoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBzYV9yb3RfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVNUX0lTT0xBVElPTl9QU0FfUk9UX01NSU9fUkQpKSkKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKworICAgY2xvc2VfZHJpdmVyX2ZuKCZoYW5kbGUpOworCisgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9SRUVOVEVSX1RFU1QpKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICB9CisKKyAgIC8qIFJlYWQgUFNBIFJvVCBtbWlvIGFkZHJlc3MuCisgICAgKiBUaGlzIHNob3VsZCBnZW5lcmF0ZSBpbnRlcm5hbCBmYXVsdCBvciBpZ25vcmUgdGhlIHJlYWQuCisgICAgKi8KKyAgIGRhdGEgPSAqKHVpbnQzMl90ICopcHNhX3JvdF9hZGRyOworCisgICAvKiBEaWQgcmVhZCBpZ25vcmU/ICovCisgICBpZiAoZGF0YSA9PSBEQVRBX1ZBTFVFKQorICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRFeHBlY3RlZCByZWFkIHRvIGZhdWx0IGJ1dCBpdCBkaWRuJ3RcbiIsIDApOworCisgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICB9CisKKyAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7Cit9CisKK2ludDMyX3QgY2xpZW50X3Rlc3RfYXBwX3JvdF93cml0ZV9wc2Ffcm90X21taW8oc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICBhZGRyX3QgICAgICAgcHNhX3JvdF9hZGRyOworICAgdWludDMyX3QgICAgIGRhdGEgPSBEQVRBX1ZBTFVFOworICAgcHNhX2hhbmRsZV90IGhhbmRsZSA9IDA7CisKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAyXSBUZXN0IEFQUC1Sb1Qgd3JpdGluZyBQU0EtUm9UIG1taW9cbiIsIDApOworCisgICBpZiAoVkFMX0VSUk9SKGdldF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MoJmhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHNhX3JvdF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFU1RfSVNPTEFUSU9OX1BTQV9ST1RfTU1JT19XUikpKQorICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworCisgICAvKiBXcml0ZSBQU0EgUm9UIG1taW8gYWRkcmVzcy4KKyAgICAqIFRoaXMgc2hvdWxkIGdlbmVyYXRlIGludGVybmFsIGZhdWx0IG9yIGlnbm9yZSB0aGUgd3JpdGUuCisgICAgKi8KKyAgICoodWludDMyX3QgKilwc2Ffcm90X2FkZHIgPSAodWludDMyX3QpZGF0YTsKKworICAgLyogSGFuZHNoYWtlIHdpdGggZHJpdmVyIHRvIGRlY2lkZSB3cml0ZSBzdGF0dXMgKi8KKyAgIGlmIChWQUxfRVJST1IoZ2V0X2RyaXZlcl9zdGF0dXMoJmhhbmRsZSkpKQorICAgeworICAgICAgIGNsb3NlX2RyaXZlcl9mbigmaGFuZGxlKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19EUklWRVJfRk5fRkFJTEVEOworICAgfQorCisgICBjbG9zZV9kcml2ZXJfZm4oJmhhbmRsZSk7CisgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODMvdGVzdF9pMDgzLmggYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4My90ZXN0X2kwODMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTQ5NmE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODMvdGVzdF9pMDgzLmgKQEAgLTAsMCArMSwzOCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKyNpZm5kZWYgX1RFU1RfSTA4M19DTElFTlRfVEVTVFNfSF8KKyNkZWZpbmUgX1RFU1RfSTA4M19DTElFTlRfVEVTVFNfSF8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNkZWZpbmUgdGVzdF9lbnRyeSBDT05DQVQodGVzdF9lbnRyeV8saTA4MykKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsdGVzdF9lbnRyeSkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsdGVzdF9lbnRyeSkKKyNlbHNlCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9jbGllbnRfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9jbGllbnRfc3ApCisjZW5kaWYKKworZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitleHRlcm4gY2xpZW50X3Rlc3RfdCB0ZXN0X2kwODNfY2xpZW50X3Rlc3RzX2xpc3RbXTsKKworaW50MzJfdCBjbGllbnRfdGVzdF9hcHBfcm90X3JlYWRfcHNhX3JvdF9tbWlvKHNlY3VyaXR5X3QpOworaW50MzJfdCBjbGllbnRfdGVzdF9hcHBfcm90X3dyaXRlX3BzYV9yb3RfbW1pbyhzZWN1cml0eV90KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODMvdGVzdF9zdXBwX2kwODMuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDgzL3Rlc3Rfc3VwcF9pMDgzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdiZjhmNQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDgzL3Rlc3Rfc3VwcF9pMDgzLmMKQEAgLTAsMCArMSw0NiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKworI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfc2VydmVyX3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfc2VydmVyX3NwKQorZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitpbnQzMl90IHNlcnZlcl90ZXN0X2FwcF9yb3RfcmVhZF9wc2Ffcm90X21taW8odm9pZCk7CitpbnQzMl90IHNlcnZlcl90ZXN0X2FwcF9yb3Rfd3JpdGVfcHNhX3JvdF9tbWlvKHZvaWQpOworCisjZGVmaW5lIERBVEFfVkFMVUUgMHg1NDY3CisKK3NlcnZlcl90ZXN0X3QgdGVzdF9pMDgzX3NlcnZlcl90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBzZXJ2ZXJfdGVzdF9hcHBfcm90X3JlYWRfcHNhX3JvdF9tbWlvLAorICAgIHNlcnZlcl90ZXN0X2FwcF9yb3Rfd3JpdGVfcHNhX3JvdF9tbWlvLAorICAgIE5VTEwsCit9OworCitpbnQzMl90IHNlcnZlcl90ZXN0X2FwcF9yb3RfcmVhZF9wc2Ffcm90X21taW8odm9pZCkKK3sKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCitpbnQzMl90IHNlcnZlcl90ZXN0X2FwcF9yb3Rfd3JpdGVfcHNhX3JvdF9tbWlvKHZvaWQpCit7CisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDg0L3NvdXJjZS5tayBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDg0L3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDE2MmVkCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODQvc291cmNlLm1rCkBAIC0wLDAgKzEsMjUgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfaTA4NC5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CisKK0NDX1NPVVJDRV9TUEUgID0gdGVzdF9pMDg0LmMgdGVzdF9zdXBwX2kwODQuYworQ0NfT1BUSU9OU19TUEUgPQorQVNfU09VUkNFX1NQRSAgPQorQVNfT1BUSU9OU19TUEUgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODQvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODQvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMmUwOWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4NC90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfaTA4NC5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0ZGX0JBU0UsIDg0KQorI2RlZmluZSBURVNUX0RFU0MgIlRlc3RpbmcgU1AgYWNjZXNzIHRvIG90aGVyIFNQIGRhdGFcbiIKK1RFU1RfUFVCTElTSChURVNUX05VTSwgdGVzdF9lbnRyeSk7Cit2YWxfYXBpX3QgKnZhbCA9IE5VTEw7Citwc2FfYXBpX3QgKnBzYSA9IE5VTEw7CisKK3ZvaWQgdGVzdF9lbnRyeSh2YWxfYXBpX3QgKnZhbF9hcGksIHBzYV9hcGlfdCAqcHNhX2FwaSkKK3sKKyAgICBpbnQzMl90ICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsID0gdmFsX2FwaTsKKyAgICBwc2EgPSBwc2FfYXBpOworCisgICAgLyogdGVzdCBpbml0ICovCisgICAgdmFsLT50ZXN0X2luaXQoVEVTVF9OVU0sIFRFU1RfREVTQywgVEVTVF9GSUVMRChURVNUX0lTT0xBVElPTl9MMywgV0RfTE9XX1RJTUVPVVQpKTsKKyAgICBpZiAoIUlTX1RFU1RfU1RBUlQodmFsLT5nZXRfc3RhdHVzKCkpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCisgICAgLyogU3dpdGNoIHRvIHNlY3VyZSBzaWRlIChjbGllbnRfcGFydGl0aW9uLmMpIGFuZCBleGVjdXRlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluCisgICAgdGVzdFtudW1dX2NsaWVudF90ZXN0c19saXN0IGZyb20gU2VjdXJlIHNpZGUgKi8KKyAgICBzdGF0dXMgPSB2YWwtPnN3aXRjaF90b19zZWN1cmVfY2xpZW50KFRFU1RfTlVNKTsKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKK3Rlc3RfZXhpdDoKKyAgICB2YWwtPnRlc3RfZXhpdCgpOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODQvdGVzdF9pMDg0LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4NC90ZXN0X2kwODQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzMzMTJhCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODQvdGVzdF9pMDg0LmMKQEAgLTAsMCArMSwxMjUgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAorI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2Vsc2UKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisjZW5kaWYKKworI2luY2x1ZGUgInRlc3RfaTA4NC5oIgorCitjbGllbnRfdGVzdF90IHRlc3RfaTA4NF9jbGllbnRfdGVzdHNfbGlzdFtdID0geworICAgIE5VTEwsCisgICAgY2xpZW50X3Rlc3Rfc3BfcmVhZF9vdGhlcl9zcF92YXJpYWJsZSwKKyAgICBjbGllbnRfdGVzdF9zcF93cml0ZV9vdGhlcl9zcF92YXJpYWJsZSwKKyAgICBOVUxMLAorfTsKKworc3RhdGljIGludDMyX3QgZ2V0X3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcyhhZGRyX3QgKmFkZHIpCit7CisgICBwc2FfaGFuZGxlX3QgICAgICAgICAgICBoYW5kbGUgPSAwOworCisgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpOworICAgaWYgKGhhbmRsZSA8IDApCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q29ubmVjdGlvbiBmYWlsZWRcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSURfSEFORExFOworICAgfQorCisgICAvKiBHZXQgQXBwLVJvVCBhZGRyZXNzICovCisgICBwc2Ffb3V0dmVjIG91dHZlY1sxXSA9IHt7YWRkciwgc2l6ZW9mKGFkZHJfdCl9fTsKKyAgIGlmIChwc2EtPmNhbGwoaGFuZGxlLCBOVUxMLCAwLCBvdXR2ZWMsIDEpICE9IFBTQV9TVUNDRVNTKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdG1zZyByZXF1ZXN0IGZhaWxlZFxuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfQ0FMTF9GQUlMRUQ7CisgICB9CisKKyAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKKyAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKK2ludDMyX3QgY2xpZW50X3Rlc3Rfc3BfcmVhZF9vdGhlcl9zcF92YXJpYWJsZShzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgIGFkZHJfdCAgIGFwcF9yb3RfYWRkcjsKKyAgIHVpbnQzMl90IGRhdGEgPSAweDEyMzQ7CisKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAxXSBUZXN0IFNQIHJlYWRpbmcgb3RoZXIgU1AgZGF0YVxuIiwgMCk7CisKKyAgIGlmIChWQUxfRVJST1IoZ2V0X3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcygmYXBwX3JvdF9hZGRyKSkpCisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisKKyAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLworICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX1JFRU5URVJfVEVTVCkpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgIH0KKworICAgLyogUmVhZCBBcHBsaWNhdGlvbiBSb1QgZ2xvYmFsIHZhcmlhYmxlIGFkZHJlc3MuCisgICAgKiBUaGlzIHNob3VsZCBnZW5lcmF0ZSBpbnRlcm5hbCBmYXVsdCBvciBpZ25vcmUgdGhlIHJlYWQuCisgICAgKi8KKyAgIGRhdGEgPSAqKHVpbnQzMl90ICopYXBwX3JvdF9hZGRyOworCisgICAvKiBEaWQgcmVhZCBpZ25vcmU/ICovCisgICBpZiAoZGF0YSA9PSAweDEyMzQpCisgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEV4cGVjdGVkIHJlYWQgdG8gZmF1bHQgYnV0IGl0IGRpZG4ndFxuIiwgMCk7CisKKyAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLworICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgIH0KKworICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKK30KKworaW50MzJfdCBjbGllbnRfdGVzdF9zcF93cml0ZV9vdGhlcl9zcF92YXJpYWJsZShzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgIGFkZHJfdCAgIGFwcF9yb3RfYWRkcjsKKyAgIHVpbnQzMl90IGRhdGEgPSAweDEyMzQ7CisKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAyXSBUZXN0IFNQIHdyaXRpbmcgb3RoZXIgU1AgZGF0YVxuIiwgMCk7CisKKyAgIGlmIChWQUxfRVJST1IoZ2V0X3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcygmYXBwX3JvdF9hZGRyKSkpCisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisKKyAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLworICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKSkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgfQorCisgICAvKiBXcml0ZSBBcHBsaWNhdGlvbiBSb1QgZ2xvYmFsIHZhcmlhYmxlIGFkZHJlc3MuCisgICAgKiBUaGlzIHNob3VsZCBnZW5lcmF0ZSBpbnRlcm5hbCBmYXVsdCBvciBpZ25vcmUgdGhlIHdyaXRlLgorICAgICovCisgICAqKHVpbnQzMl90ICopYXBwX3JvdF9hZGRyID0gKHVpbnQzMl90KWRhdGE7CisKKyAgIC8qIEhhbmRzaGFrZSB3aXRoIHNlcnZlciB0byBkZWNpZGUgd3JpdGUgc3RhdHVzICovCisgICBpZiAoKHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSkpID4gMCkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRFeHBlY3RlZCBjb25uZWN0aW9uIHRvIGZhaWwgYnV0IHN1Y2NlZWRcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSURfSEFORExFOworICAgfQorICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDg0L3Rlc3RfaTA4NC5oIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODQvdGVzdF9pMDg0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZhODZhZgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDg0L3Rlc3RfaTA4NC5oCkBAIC0wLDAgKzEsMzggQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisjaWZuZGVmIF9URVNUX0kwODRfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0kwODRfQ0xJRU5UX1RFU1RTX0hfCisKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKworI2lmZGVmIE5PTlNFQ1VSRV9URVNUX0JVSUxECisjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLGkwODQpCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLHRlc3RfZW50cnkpCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLHRlc3RfZW50cnkpCisjZWxzZQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfY2xpZW50X3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfY2xpZW50X3NwKQorI2VuZGlmCisKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKKworZXh0ZXJuIGNsaWVudF90ZXN0X3QgdGVzdF9pMDg0X2NsaWVudF90ZXN0c19saXN0W107CisKK2ludDMyX3QgY2xpZW50X3Rlc3Rfc3BfcmVhZF9vdGhlcl9zcF92YXJpYWJsZShzZWN1cml0eV90KTsKK2ludDMyX3QgY2xpZW50X3Rlc3Rfc3Bfd3JpdGVfb3RoZXJfc3BfdmFyaWFibGUoc2VjdXJpdHlfdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDg0L3Rlc3Rfc3VwcF9pMDg0LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4NC90ZXN0X3N1cHBfaTA4NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNjYzZDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4NC90ZXN0X3N1cHBfaTA4NC5jCkBAIC0wLDAgKzEsMTEzIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLF9zZXJ2ZXJfc3ApCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLF9zZXJ2ZXJfc3ApCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CisKK2ludDMyX3Qgc2VydmVyX3Rlc3Rfc3BfcmVhZF9vdGhlcl9zcF92YXJpYWJsZSh2b2lkKTsKK2ludDMyX3Qgc2VydmVyX3Rlc3Rfc3Bfd3JpdGVfb3RoZXJfc3BfdmFyaWFibGUodm9pZCk7CisKKyNkZWZpbmUgREFUQV9WQUxVRSAweDU0NjcKKworLyogQXBwbGljYXRpb24gUm9UIGRhdGEgcmVnaW9uICovCit2b2xhdGlsZSB1aW50MzJfdCBnX3Rlc3RfaTA4NCA9IERBVEFfVkFMVUU7CisKK3NlcnZlcl90ZXN0X3QgdGVzdF9pMDg0X3NlcnZlcl90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBzZXJ2ZXJfdGVzdF9zcF9yZWFkX290aGVyX3NwX3ZhcmlhYmxlLAorICAgIHNlcnZlcl90ZXN0X3NwX3dyaXRlX290aGVyX3NwX3ZhcmlhYmxlLAorICAgIE5VTEwsCit9OworCitzdGF0aWMgaW50MzJfdCBzZW5kX3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcyh2b2lkKQoreworICAgIGludDMyX3QgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICAgcHNhX21zZ190ICAgICAgIG1zZyA9IHswfTsKKworICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgIHsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKworICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQorICAgIHsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCAtMik7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgLyogU2VuZCBBcHBsaWNhdGlvbiBSb1QgZGF0YSBhZGRyZXNzIC0gZ2xvYmFsIHZhcmlhYmxlICovCisgICAgcHNhLT53cml0ZShtc2cuaGFuZGxlLCAwLCAodm9pZCAqKSZnX3Rlc3RfaTA4NCwgc2l6ZW9mKGdfdGVzdF9pMDg0KSk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKK2ludDMyX3Qgc2VydmVyX3Rlc3Rfc3BfcmVhZF9vdGhlcl9zcF92YXJpYWJsZSh2b2lkKQoreworICAgIHJldHVybiBzZW5kX3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcygpOworfQorCitpbnQzMl90IHNlcnZlcl90ZXN0X3NwX3dyaXRlX290aGVyX3NwX3ZhcmlhYmxlKHZvaWQpCit7CisgICAgaW50MzJfdCAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKyAgICBwc2FfbXNnX3QgICAgICAgbXNnID0gezB9OworCisgICAgc3RhdHVzID0gc2VuZF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MoKTsKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICAvKiBXYWl0IGZvciB3cml0ZSB0byBnZXQgcGVyZm9ybWVkIGJ5IGNsaWVudCAqLworICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpKQorICAgIHsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICAvKiBDb25uZWN0aW9uIHJlcXVlc3QgaXMganVzdCBmb3IgaGFuZHNoYWtlLCByZWplY3QgY29ubmVjdGlvbiBhbnl3YXlzICovCisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKKworICAgIC8qIFJlYWNoZWQgaGVyZSBtZWFucyB0aGVyZSBjb3VsZCBiZSB3cml0ZSBzdWNjZWVkIG9yIGlnbm9yZWQgKi8KKyAgICBpZiAoZ190ZXN0X2kwODQgPT0gREFUQV9WQUxVRSkKKyAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEV4cGVjdGVkIHdyaXRlIHRvIGZhdWx0IGJ1dCBpdCBkaWRuJ3RcbiIsIDApOworCisgICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCisgICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgIHsKKyAgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgICB9CisgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDg1L3NvdXJjZS5tayBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDg1L3NvdXJjZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDU2Y2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODUvc291cmNlLm1rCkBAIC0wLDAgKzEsMjUgQEAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitDQ19TT1VSQ0UgID0gdGVzdF9lbnRyeS5jIHRlc3RfaTA4NS5jCitDQ19PUFRJT05TID0KK0FTX1NPVVJDRSAgPQorQVNfT1BUSU9OUyA9CisKK0NDX1NPVVJDRV9TUEUgID0gdGVzdF9pMDg1LmMgdGVzdF9zdXBwX2kwODUuYworQ0NfT1BUSU9OU19TUEUgPQorQVNfU09VUkNFX1NQRSAgPQorQVNfT1BUSU9OU19TUEUgPQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODUvdGVzdF9lbnRyeS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODUvdGVzdF9lbnRyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZGMzN2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4NS90ZXN0X2VudHJ5LmMKQEAgLTAsMCArMSw1MiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9pbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAidmFsX3RhcmdldC5oIgorI2luY2x1ZGUgInRlc3RfaTA4NS5oIgorCisjZGVmaW5lIFRFU1RfTlVNICBWQUxfQ1JFQVRFX1RFU1RfSUQoVkFMX0ZGX0JBU0UsIDg1KQorI2RlZmluZSBURVNUX0RFU0MgIlRlc3RpbmcgU1AgYWNjZXNzIG90aGVyIFNQIHN0YWNrXG4iCitURVNUX1BVQkxJU0goVEVTVF9OVU0sIHRlc3RfZW50cnkpOwordmFsX2FwaV90ICp2YWwgPSBOVUxMOworcHNhX2FwaV90ICpwc2EgPSBOVUxMOworCit2b2lkIHRlc3RfZW50cnkodmFsX2FwaV90ICp2YWxfYXBpLCBwc2FfYXBpX3QgKnBzYV9hcGkpCit7CisgICAgaW50MzJfdCAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgIHZhbCA9IHZhbF9hcGk7CisgICAgcHNhID0gcHNhX2FwaTsKKworICAgIC8qIHRlc3QgaW5pdCAqLworICAgIHZhbC0+dGVzdF9pbml0KFRFU1RfTlVNLCBURVNUX0RFU0MsIFRFU1RfRklFTEQoVEVTVF9JU09MQVRJT05fTDMsIFdEX0xPV19USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIFN3aXRjaCB0byBzZWN1cmUgc2lkZSAoY2xpZW50X3BhcnRpdGlvbi5jKSBhbmQgZXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbgorICAgIHRlc3RbbnVtXV9jbGllbnRfdGVzdHNfbGlzdCBmcm9tIFNlY3VyZSBzaWRlICovCisgICAgc3RhdHVzID0gdmFsLT5zd2l0Y2hfdG9fc2VjdXJlX2NsaWVudChURVNUX05VTSk7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDg1L3Rlc3RfaTA4NS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODUvdGVzdF9pMDg1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGExOWEyNAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDg1L3Rlc3RfaTA4NS5jCkBAIC0wLDAgKzEsMTI1IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNlbHNlCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ0ZXN0X2kwODUuaCIKKworY2xpZW50X3Rlc3RfdCB0ZXN0X2kwODVfY2xpZW50X3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIGNsaWVudF90ZXN0X3NwX3JlYWRfb3RoZXJfc3Bfc3RhY2ssCisgICAgY2xpZW50X3Rlc3Rfc3Bfd3JpdGVfb3RoZXJfc3Bfc3RhY2ssCisgICAgTlVMTCwKK307CisKK3N0YXRpYyBpbnQzMl90IGdldF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MoYWRkcl90ICphZGRyKQoreworICAgcHNhX2hhbmRsZV90ICAgICAgICAgICAgaGFuZGxlID0gMDsKKworICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxKTsKKyAgIGlmIChoYW5kbGUgPCAwKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENvbm5lY3Rpb24gZmFpbGVkXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKKyAgIH0KKworICAgLyogR2V0IEFwcC1Sb1QgYWRkcmVzcyAqLworICAgcHNhX291dHZlYyBvdXR2ZWNbMV0gPSB7e2FkZHIsIHNpemVvZihhZGRyX3QpfX07CisgICBpZiAocHNhLT5jYWxsKGhhbmRsZSwgTlVMTCwgMCwgb3V0dmVjLCAxKSAhPSBQU0FfU1VDQ0VTUykKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRtc2cgcmVxdWVzdCBmYWlsZWRcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0NBTExfRkFJTEVEOworICAgfQorCisgICBwc2EtPmNsb3NlKGhhbmRsZSk7CisgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCitpbnQzMl90IGNsaWVudF90ZXN0X3NwX3JlYWRfb3RoZXJfc3Bfc3RhY2soc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICBhZGRyX3QgICBhcHBfcm90X2FkZHI7CisgICB1aW50MzJfdCBkYXRhID0gMHgxMjM0OworCisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMV0gVGVzdCBTUCByZWFkaW5nIG90aGVyIFNQIHN0YWNrXG4iLCAwKTsKKworICAgaWYgKFZBTF9FUlJPUihnZXRfc2VjdXJlX3BhcnRpdGlvbl9hZGRyZXNzKCZhcHBfcm90X2FkZHIpKSkKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKworICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCisgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfUkVFTlRFUl9URVNUKSkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgfQorCisgICAvKiBSZWFkIEFwcGxpY2F0aW9uIFJvVCBzdGFjayBhZGRyZXNzLgorICAgICogVGhpcyBzaG91bGQgZ2VuZXJhdGUgaW50ZXJuYWwgZmF1bHQgb3IgaWdub3JlIHRoZSByZWFkLgorICAgICovCisgICBkYXRhID0gKih1aW50MzJfdCAqKWFwcF9yb3RfYWRkcjsKKworICAgLyogRGlkIHJlYWQgaWdub3JlPyAqLworICAgaWYgKGRhdGEgPT0gMHgxMjM0KQorICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRFeHBlY3RlZCByZWFkIHRvIGZhdWx0IGJ1dCBpdCBkaWRuJ3RcbiIsIDApOworCisgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICB9CisKKyAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7Cit9CisKK2ludDMyX3QgY2xpZW50X3Rlc3Rfc3Bfd3JpdGVfb3RoZXJfc3Bfc3RhY2soc2VjdXJpdHlfdCBjYWxsZXIpCit7CisgICBhZGRyX3QgICBhcHBfcm90X2FkZHI7CisgICB1aW50MzJfdCBkYXRhID0gMHgxMjM0OworCisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMl0gVGVzdCBTUCB3cml0aW5nIG90aGVyIFNQIHN0YWNrXG4iLCAwKTsKKworICAgaWYgKFZBTF9FUlJPUihnZXRfc2VjdXJlX3BhcnRpdGlvbl9hZGRyZXNzKCZhcHBfcm90X2FkZHIpKSkKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKworICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCisgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfTlMpKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICB9CisKKyAgIC8qIFdyaXRlIEFwcGxpY2F0aW9uIFJvVCBzdGFjayBhZGRyZXNzLgorICAgICogVGhpcyBzaG91bGQgZ2VuZXJhdGUgaW50ZXJuYWwgZmF1bHQgb3IgaWdub3JlIHRoZSB3cml0ZS4KKyAgICAqLworICAgKih1aW50MzJfdCAqKWFwcF9yb3RfYWRkciA9ICh1aW50MzJfdClkYXRhOworCisgICAvKiBIYW5kc2hha2Ugd2l0aCBzZXJ2ZXIgdG8gZGVjaWRlIHdyaXRlIHN0YXR1cyAqLworICAgaWYgKChwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpKSA+IDApCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RXhwZWN0ZWQgY29ubmVjdGlvbiB0byBmYWlsIGJ1dCBzdWNjZWVkXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKKyAgIH0KKyAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4NS90ZXN0X2kwODUuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDg1L3Rlc3RfaTA4NS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZDViZDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4NS90ZXN0X2kwODUuaApAQCAtMCwwICsxLDM4IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9JMDg1X0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDg1X0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisKKyNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxpMDg1KQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorI2Vsc2UKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX2NsaWVudF9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX2NsaWVudF9zcCkKKyNlbmRpZgorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CisKK2V4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfaTA4NV9jbGllbnRfdGVzdHNfbGlzdFtdOworCitpbnQzMl90IGNsaWVudF90ZXN0X3NwX3JlYWRfb3RoZXJfc3Bfc3RhY2soc2VjdXJpdHlfdCk7CitpbnQzMl90IGNsaWVudF90ZXN0X3NwX3dyaXRlX290aGVyX3NwX3N0YWNrKHNlY3VyaXR5X3QpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4NS90ZXN0X3N1cHBfaTA4NS5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODUvdGVzdF9zdXBwX2kwODUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTIyNzE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODUvdGVzdF9zdXBwX2kwODUuYwpAQCAtMCwwICsxLDEyMCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKworI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfc2VydmVyX3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfc2VydmVyX3NwKQorZXh0ZXJuIHZhbF9hcGlfdCAqdmFsOworZXh0ZXJuIHBzYV9hcGlfdCAqcHNhOworCitpbnQzMl90IHNlcnZlcl90ZXN0X3NwX3JlYWRfb3RoZXJfc3Bfc3RhY2sodm9pZCk7CitpbnQzMl90IHNlcnZlcl90ZXN0X3NwX3dyaXRlX290aGVyX3NwX3N0YWNrKHZvaWQpOworCisjZGVmaW5lIERBVEFfVkFMVUUgMHg1NDY3CisKK3NlcnZlcl90ZXN0X3QgdGVzdF9pMDg1X3NlcnZlcl90ZXN0c19saXN0W10gPSB7CisgICAgTlVMTCwKKyAgICBzZXJ2ZXJfdGVzdF9zcF9yZWFkX290aGVyX3NwX3N0YWNrLAorICAgIHNlcnZlcl90ZXN0X3NwX3dyaXRlX290aGVyX3NwX3N0YWNrLAorICAgIE5VTEwsCit9OworCitzdGF0aWMgaW50MzJfdCBzZW5kX3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcyhhZGRyX3QgKnN0YWNrKQoreworICAgIGludDMyX3QgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICAgcHNhX21zZ190ICAgICAgIG1zZyA9IHswfTsKKworICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgIHsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKworICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jYWxsX3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDIpLCBzdGF0dXMpKQorICAgIHsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCAtMik7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgLyogU2VuZCBBcHBsaWNhdGlvbiBSb1Qgc3RhY2sgYWRkcmVzcyAqLworICAgIHBzYS0+d3JpdGUobXNnLmhhbmRsZSwgMCwgKHZvaWQgKilzdGFjaywgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKK2ludDMyX3Qgc2VydmVyX3Rlc3Rfc3BfcmVhZF9vdGhlcl9zcF9zdGFjayh2b2lkKQoreworICAgIC8qIEFwcGxpY2F0aW9uIFJvVCBzdGFjayAtIGxvY2FsIHZhcmlhYmxlICovCisgICAgdWludDMyX3QgICAgICAgIGxfdGVzdF9pMDg1ID0gREFUQV9WQUxVRTsKKyAgICBpbnQzMl90ICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgc3RhdHVzID0gc2VuZF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MoJmxfdGVzdF9pMDg1KTsKKworICAgIC8qIER1bW15IHByaW50IHRvIGF2b2lkIGNvbXBpbGVyIG9wdGltaXNhdGlvbiBvbiBsb2NhbCB2YXJpYWJsZSAqLworICAgIHZhbC0+cHJpbnQoUFJJTlRfSU5GTywgIlx0RGF0YSB2YWx1ZSAweCV4XG4iLCBsX3Rlc3RfaTA4NSk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9zcF93cml0ZV9vdGhlcl9zcF9zdGFjayh2b2lkKQoreworICAgIC8qIEFwcGxpY2F0aW9uIFJvVCBzdGFjayAtIGxvY2FsIHZhcmlhYmxlICovCisgICAgdWludDMyX3QgICAgICAgIGxfdGVzdF9pMDg1ID0gREFUQV9WQUxVRTsKKyAgICBpbnQzMl90ICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworICAgIHBzYV9tc2dfdCAgICAgICBtc2cgPSB7MH07CisKKyAgICBzdGF0dXMgPSBzZW5kX3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcygmbF90ZXN0X2kwODUpOworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIC8qIFdhaXQgZm9yIHdyaXRlIHRvIGdldCBwZXJmb3JtZWQgYnkgY2xpZW50ICovCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwNCksIHN0YXR1cykpCisgICAgeworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qIENvbm5lY3Rpb24gcmVxdWVzdCBpcyBqdXN0IGZvciBoYW5kc2hha2UsIHJlamVjdCBjb25uZWN0aW9uIGFueXdheXMgKi8KKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOworCisgICAgLyogUmVhY2hlZCBoZXJlIG1lYW5zIHRoZXJlIGNvdWxkIGJlIHdyaXRlIHN1Y2NlZWQgb3IgaWdub3JlZCAqLworICAgIGlmIChsX3Rlc3RfaTA4NSA9PSBEQVRBX1ZBTFVFKQorICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RXhwZWN0ZWQgd3JpdGUgdG8gZmF1bHQgYnV0IGl0IGRpZG4ndFxuIiwgMCk7CisKKyAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KKyAgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCisgICAgeworICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgIH0KKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODYvc291cmNlLm1rIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODYvc291cmNlLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MTI3YWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4Ni9zb3VyY2UubWsKQEAgLTAsMCArMSwyNSBAQAorIyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisjICoKKyMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjICoKKyMgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjICoKKyMgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjKiovCisKK0NDX1NPVVJDRSAgPSB0ZXN0X2VudHJ5LmMgdGVzdF9pMDg2LmMKK0NDX09QVElPTlMgPQorQVNfU09VUkNFICA9CitBU19PUFRJT05TID0KKworQ0NfU09VUkNFX1NQRSAgPSB0ZXN0X2kwODYuYyB0ZXN0X3N1cHBfaTA4Ni5jCitDQ19PUFRJT05TX1NQRSA9CitBU19TT1VSQ0VfU1BFICA9CitBU19PUFRJT05TX1NQRSA9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4Ni90ZXN0X2VudHJ5LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4Ni90ZXN0X2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJjMzFlZQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDg2L3Rlc3RfZW50cnkuYwpAQCAtMCwwICsxLDUyIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjaW5jbHVkZSAidGVzdF9pMDg2LmgiCisKKyNkZWZpbmUgVEVTVF9OVU0gIFZBTF9DUkVBVEVfVEVTVF9JRChWQUxfRkZfQkFTRSwgODYpCisjZGVmaW5lIFRFU1RfREVTQyAiVGVzdGluZyBTUCBhY2Nlc3Mgb3RoZXIgU1AgaGVhcFxuIgorVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKK3ZhbF9hcGlfdCAqdmFsID0gTlVMTDsKK3BzYV9hcGlfdCAqcHNhID0gTlVMTDsKKwordm9pZCB0ZXN0X2VudHJ5KHZhbF9hcGlfdCAqdmFsX2FwaSwgcHNhX2FwaV90ICpwc2FfYXBpKQoreworICAgIGludDMyX3QgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wzLCBXRF9MT1dfVElNRU9VVCkpOworICAgIGlmICghSVNfVEVTVF9TVEFSVCh2YWwtPmdldF9zdGF0dXMoKSkpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBTd2l0Y2ggdG8gc2VjdXJlIHNpZGUgKGNsaWVudF9wYXJ0aXRpb24uYykgYW5kIGV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4KKyAgICB0ZXN0W251bV1fY2xpZW50X3Rlc3RzX2xpc3QgZnJvbSBTZWN1cmUgc2lkZSAqLworICAgIHN0YXR1cyA9IHZhbC0+c3dpdGNoX3RvX3NlY3VyZV9jbGllbnQoVEVTVF9OVU0pOworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4Ni90ZXN0X2kwODYuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDg2L3Rlc3RfaTA4Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNTZjYmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4Ni90ZXN0X2kwODYuYwpAQCAtMCwwICsxLDE0NSBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2lmZGVmIE5PTlNFQ1VSRV9URVNUX0JVSUxECisjaW5jbHVkZSAidmFsX2ludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisjZWxzZQorI2luY2x1ZGUgInZhbF9jbGllbnRfZGVmcy5oIgorI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAidGVzdF9pMDg2LmgiCisKKyNkZWZpbmUgREFUQV9WQUxVRV9PUkcgMHgxMQorI2RlZmluZSBEQVRBX1ZBTFVFICAgICAweDEyCisjZGVmaW5lIEJVRkZFUl9TSVpFICAgIDB4NAorCitjbGllbnRfdGVzdF90IHRlc3RfaTA4Nl9jbGllbnRfdGVzdHNfbGlzdFtdID0geworICAgIE5VTEwsCisgICAgY2xpZW50X3Rlc3Rfc3BfcmVhZF9vdGhlcl9zcF9oZWFwLAorICAgIGNsaWVudF90ZXN0X3NwX3dyaXRlX290aGVyX3NwX2hlYXAsCisgICAgTlVMTCwKK307CisKKyNpZiAoU1BfSEVBUF9NRU1fU1VQUCA9PSAxKQorc3RhdGljIGludDMyX3QgZ2V0X3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcyhhZGRyX3QgKmFkZHIpCit7CisgICBwc2FfaGFuZGxlX3QgICAgICAgICAgICBoYW5kbGUgPSAwOworCisgICBoYW5kbGUgPSBwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpOworICAgaWYgKGhhbmRsZSA8IDApCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0Q29ubmVjdGlvbiBmYWlsZWRcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSURfSEFORExFOworICAgfQorCisgICAvKiBHZXQgQXBwLVJvVCBhZGRyZXNzICovCisgICBwc2Ffb3V0dmVjIG91dHZlY1sxXSA9IHt7YWRkciwgQlVGRkVSX1NJWkV9fTsKKyAgIGlmIChwc2EtPmNhbGwoaGFuZGxlLCBOVUxMLCAwLCBvdXR2ZWMsIDEpICE9IFBTQV9TVUNDRVNTKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdG1zZyByZXF1ZXN0IGZhaWxlZFxuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfQ0FMTF9GQUlMRUQ7CisgICB9CisKKyAgIHBzYS0+Y2xvc2UoaGFuZGxlKTsKKyAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKK2ludDMyX3QgY2xpZW50X3Rlc3Rfc3BfcmVhZF9vdGhlcl9zcF9oZWFwKHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgYWRkcl90ICAgYXBwX3JvdF9hZGRyOworICAgdWludDhfdCAgZGF0YSA9IERBVEFfVkFMVUU7CisKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAxXSBUZXN0IFNQIHJlYWRpbmcgb3RoZXIgU1AgaGVhcFxuIiwgMCk7CisKKyAgIGlmIChWQUxfRVJST1IoZ2V0X3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcygmYXBwX3JvdF9hZGRyKSkpCisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisKKyAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLworICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX1JFRU5URVJfVEVTVCkpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgIH0KKworICAgLyogUmVhZCBBcHBsaWNhdGlvbiBSb1QgaGVhcCBhZGRyZXNzLgorICAgICogVGhpcyBzaG91bGQgZ2VuZXJhdGUgaW50ZXJuYWwgZmF1bHQgb3IgaWdub3JlIHRoZSByZWFkLgorICAgICovCisgICBkYXRhID0gKih1aW50OF90ICopYXBwX3JvdF9hZGRyOworCisgICAvKiBEaWQgcmVhZCBpZ25vcmU/ICovCisgICBpZiAoZGF0YSA9PSBEQVRBX1ZBTFVFKQorICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRFeHBlY3RlZCByZWFkIHRvIGZhdWx0IGJ1dCBpdCBkaWRuJ3RcbiIsIDApOworCisgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICB9CisKKyAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7Cit9CisKK2ludDMyX3QgY2xpZW50X3Rlc3Rfc3Bfd3JpdGVfb3RoZXJfc3BfaGVhcChzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgIGFkZHJfdCAgIGFwcF9yb3RfYWRkcjsKKyAgIHVpbnQ4X3QgIGRhdGEgPSBEQVRBX1ZBTFVFOworCisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMl0gVGVzdCBTUCB3cml0aW5nIG90aGVyIFNQIGhlYXBcbiIsIDApOworCisgICBpZiAoVkFMX0VSUk9SKGdldF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MoJmFwcF9yb3RfYWRkcikpKQorICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworCisgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9OUykpCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYmVmb3JlIGNoZWNrXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgIH0KKworICAgLyogV3JpdGUgQXBwbGljYXRpb24gUm9UIGhlYXAgYWRkcmVzcy4KKyAgICAqIFRoaXMgc2hvdWxkIGdlbmVyYXRlIGludGVybmFsIGZhdWx0IG9yIGlnbm9yZSB0aGUgd3JpdGUuCisgICAgKi8KKyAgICoodWludDhfdCAqKWFwcF9yb3RfYWRkciA9ICh1aW50OF90KWRhdGE7CisKKyAgIC8qIEhhbmRzaGFrZSB3aXRoIHNlcnZlciB0byBkZWNpZGUgd3JpdGUgc3RhdHVzICovCisgICBpZiAoKHBzYS0+Y29ubmVjdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCwgMSkpID4gMCkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRFeHBlY3RlZCBjb25uZWN0aW9uIHRvIGZhaWwgYnV0IHN1Y2NlZWRcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOVkFMSURfSEFORExFOworICAgfQorICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKyNlbHNlCitpbnQzMl90IGNsaWVudF90ZXN0X3NwX3JlYWRfb3RoZXJfc3BfaGVhcChzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAxXSBUZXN0IFNQIHJlYWRpbmcgb3RoZXIgU1AgaGVhcFxuIiwgMCk7CisgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRTa2lwcGluZyB0ZXN0IGFzIGhlYXAgbWVtb3J5IG5vdCBzdXBwb3J0ZWRcbiIsIDApOworICAgcmV0dXJuIFJFU1VMVF9TS0lQKFZBTF9TVEFUVVNfSEVBUF9OT1RfQVZBSUxBQkxFKTsKK30KKworaW50MzJfdCBjbGllbnRfdGVzdF9zcF93cml0ZV9vdGhlcl9zcF9oZWFwKHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgdmFsLT5wcmludChQUklOVF9URVNULCAiW0NoZWNrIDJdIFRlc3QgU1Agd3JpdGluZyBvdGhlciBTUCBoZWFwXG4iLCAwKTsKKyAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdFNraXBwaW5nIHRlc3QgYXMgaGVhcCBtZW1vcnkgbm90IHN1cHBvcnRlZFxuIiwgMCk7CisgICByZXR1cm4gUkVTVUxUX1NLSVAoVkFMX1NUQVRVU19IRUFQX05PVF9BVkFJTEFCTEUpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4Ni90ZXN0X2kwODYuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDg2L3Rlc3RfaTA4Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNjQ1NDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4Ni90ZXN0X2kwODYuaApAQCAtMCwwICsxLDM4IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9JMDg2X0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDg2X0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisKKyNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxpMDg2KQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorI2Vsc2UKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX2NsaWVudF9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX2NsaWVudF9zcCkKKyNlbmRpZgorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CisKK2V4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfaTA4Nl9jbGllbnRfdGVzdHNfbGlzdFtdOworCitpbnQzMl90IGNsaWVudF90ZXN0X3NwX3JlYWRfb3RoZXJfc3BfaGVhcChzZWN1cml0eV90KTsKK2ludDMyX3QgY2xpZW50X3Rlc3Rfc3Bfd3JpdGVfb3RoZXJfc3BfaGVhcChzZWN1cml0eV90KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODYvdGVzdF9zdXBwX2kwODYuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDg2L3Rlc3Rfc3VwcF9pMDg2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJmZWYxMQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDg2L3Rlc3Rfc3VwcF9pMDg2LmMKQEAgLTAsMCArMSwxNDYgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9zcF9yZWFkX290aGVyX3NwX2hlYXAodm9pZCk7CitpbnQzMl90IHNlcnZlcl90ZXN0X3NwX3dyaXRlX290aGVyX3NwX2hlYXAodm9pZCk7CisKKyNpZiAoU1BfSEVBUF9NRU1fU1VQUCA9PSAxKQordm9pZCAqbWFsbG9jKHNpemVfdCBzaXplKTsKK3ZvaWQgZnJlZSh2b2lkICpwdHIpOworI2VuZGlmCisKKyNkZWZpbmUgREFUQV9WQUxVRV9PUkcgMHgxMQorI2RlZmluZSBCVUZGRVJfU0laRSAgICAweDQKKworc2VydmVyX3Rlc3RfdCB0ZXN0X2kwODZfc2VydmVyX3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIHNlcnZlcl90ZXN0X3NwX3JlYWRfb3RoZXJfc3BfaGVhcCwKKyAgICBzZXJ2ZXJfdGVzdF9zcF93cml0ZV9vdGhlcl9zcF9oZWFwLAorICAgIE5VTEwsCit9OworCisjaWYgKFNQX0hFQVBfTUVNX1NVUFAgPT0gMSkKK3N0YXRpYyBpbnQzMl90IHNlbmRfc2VjdXJlX3BhcnRpdGlvbl9hZGRyZXNzKHVpbnQ4X3QgKmhlYXApCit7CisgICAgaW50MzJfdCAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKyAgICBwc2FfbXNnX3QgICAgICAgbXNnID0gezB9OworCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMSksIHN0YXR1cykpCisgICAgeworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2NhbGxfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwMiksIHN0YXR1cykpCisgICAgeworICAgICAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIC0yKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICAvKiBTZW5kIEFwcGxpY2F0aW9uIFJvVCBoZWFwIGFkZHJlc3MgKi8KKyAgICBwc2EtPndyaXRlKG1zZy5oYW5kbGUsIDAsICh2b2lkICopaGVhcCwgc2l6ZW9mKEJVRkZFUl9TSVpFKSk7CisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKK2ludDMyX3Qgc2VydmVyX3Rlc3Rfc3BfcmVhZF9vdGhlcl9zcF9oZWFwKHZvaWQpCit7CisgICAgLyogQXBwbGljYXRpb24gUm9UIGhlYXAgYnVmZmVyICovCisgICAgdWludDhfdCAgICAgICAgICpidWZmZXI7CisgICAgaW50MzJfdCAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICBidWZmZXIgPSAodWludDhfdCAqKW1hbGxvYyhzaXplb2YodWludDhfdCkgKiBCVUZGRVJfU0laRSk7CisgICAgbWVtc2V0KCh1aW50OF90ICopYnVmZmVyLCBEQVRBX1ZBTFVFX09SRywgQlVGRkVSX1NJWkUpOworCisgICAgc3RhdHVzID0gc2VuZF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MoYnVmZmVyKTsKKyAgICBmcmVlKGJ1ZmZlcik7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitpbnQzMl90IHNlcnZlcl90ZXN0X3NwX3dyaXRlX290aGVyX3NwX2hlYXAodm9pZCkKK3sKKyAgICAvKiBBcHBsaWNhdGlvbiBSb1QgaGVhcCBidWZmZXIgKi8KKyAgICB1aW50OF90ICAgICAgICAgKmJ1ZmZlcjsKKyAgICBpbnQzMl90ICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworICAgIHBzYV9tc2dfdCAgICAgICBtc2cgPSB7MH07CisKKyAgICBidWZmZXIgPSAodWludDhfdCAqKW1hbGxvYyhzaXplb2YodWludDhfdCkgKiBCVUZGRVJfU0laRSk7CisgICAgbWVtc2V0KCh1aW50OF90ICopYnVmZmVyLCBEQVRBX1ZBTFVFX09SRywgQlVGRkVSX1NJWkUpOworCisgICAgc3RhdHVzID0gc2VuZF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MoYnVmZmVyKTsKKyAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICAvKiBXYWl0IGZvciB3cml0ZSB0byBnZXQgcGVyZm9ybWVkIGJ5IGNsaWVudCAqLworICAgIHN0YXR1cyA9IHZhbC0+cHJvY2Vzc19jb25uZWN0X3JlcXVlc3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUcsICZtc2cpOworICAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDQpLCBzdGF0dXMpKQorICAgIHsKKyAgICAgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICAvKiBDb25uZWN0aW9uIHJlcXVlc3QgaXMganVzdCBmb3IgaGFuZHNoYWtlLCByZWplY3QgY29ubmVjdGlvbiBhbnl3YXlzICovCisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKKworICAgIC8qIFJlYWNoZWQgaGVyZSBtZWFucyB0aGVyZSBjb3VsZCBiZSB3cml0ZSBzdWNjZWVkIG9yIGlnbm9yZWQgKi8KKyAgICBpZiAoYnVmZmVyWzBdID09IERBVEFfVkFMVUVfT1JHKQorICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworCisgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RXhwZWN0ZWQgd3JpdGUgdG8gZmF1bHQgYnV0IGl0IGRpZG4ndFxuIiwgMCk7CisKKyAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KKyAgICBpZiAodmFsLT5zZXRfYm9vdF9mbGFnKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCisgICAgeworICAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgIH0KKworICAgIGZyZWUoYnVmZmVyKTsKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorI2Vsc2UKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9zcF9yZWFkX290aGVyX3NwX2hlYXAodm9pZCkKK3sKKyAgICByZXR1cm4gUkVTVUxUX1NLSVAoVkFMX1NUQVRVU19IRUFQX05PVF9BVkFJTEFCTEUpOworfQorCitpbnQzMl90IHNlcnZlcl90ZXN0X3NwX3dyaXRlX290aGVyX3NwX2hlYXAodm9pZCkKK3sKKyAgICByZXR1cm4gUkVTVUxUX1NLSVAoVkFMX1NUQVRVU19IRUFQX05PVF9BVkFJTEFCTEUpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4Ny9zb3VyY2UubWsgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4Ny9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkyZjc5NQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDg3L3NvdXJjZS5tawpAQCAtMCwwICsxLDI1IEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2kwODcuYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQorCitDQ19TT1VSQ0VfU1BFICA9IHRlc3RfaTA4Ny5jIHRlc3Rfc3VwcF9pMDg3LmMKK0NDX09QVElPTlNfU1BFID0KK0FTX1NPVVJDRV9TUEUgID0KK0FTX09QVElPTlNfU1BFID0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDg3L3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDg3L3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWRlOTBhCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODcvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2kwODcuaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9GRl9CQVNFLCA4NykKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIFNQIGFjY2VzcyBvdGhlciBTUCBtbWlvXG4iCitURVNUX1BVQkxJU0goVEVTVF9OVU0sIHRlc3RfZW50cnkpOwordmFsX2FwaV90ICp2YWwgPSBOVUxMOworcHNhX2FwaV90ICpwc2EgPSBOVUxMOworCit2b2lkIHRlc3RfZW50cnkodmFsX2FwaV90ICp2YWxfYXBpLCBwc2FfYXBpX3QgKnBzYV9hcGkpCit7CisgICAgaW50MzJfdCAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgIHZhbCA9IHZhbF9hcGk7CisgICAgcHNhID0gcHNhX2FwaTsKKworICAgIC8qIHRlc3QgaW5pdCAqLworICAgIHZhbC0+dGVzdF9pbml0KFRFU1RfTlVNLCBURVNUX0RFU0MsIFRFU1RfRklFTEQoVEVTVF9JU09MQVRJT05fTDMsIFdEX0xPV19USU1FT1VUKSk7CisgICAgaWYgKCFJU19URVNUX1NUQVJUKHZhbC0+Z2V0X3N0YXR1cygpKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKworICAgIC8qIFN3aXRjaCB0byBzZWN1cmUgc2lkZSAoY2xpZW50X3BhcnRpdGlvbi5jKSBhbmQgZXhlY3V0ZSBsaXN0IG9mIHRlc3RzIGF2YWlsYWJsZSBpbgorICAgIHRlc3RbbnVtXV9jbGllbnRfdGVzdHNfbGlzdCBmcm9tIFNlY3VyZSBzaWRlICovCisgICAgc3RhdHVzID0gdmFsLT5zd2l0Y2hfdG9fc2VjdXJlX2NsaWVudChURVNUX05VTSk7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgIHsKKyAgICAgICAgZ290byB0ZXN0X2V4aXQ7CisgICAgfQorCit0ZXN0X2V4aXQ6CisgICAgdmFsLT50ZXN0X2V4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDg3L3Rlc3RfaTA4Ny5jIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODcvdGVzdF9pMDg3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI2Y2JmMgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDg3L3Rlc3RfaTA4Ny5jCkBAIC0wLDAgKzEsMTI3IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNlbHNlCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ0ZXN0X2kwODcuaCIKKworI2RlZmluZSBEQVRBX1ZBTFVFIDB4MTIzNAorCitjbGllbnRfdGVzdF90IHRlc3RfaTA4N19jbGllbnRfdGVzdHNfbGlzdFtdID0geworICAgIE5VTEwsCisgICAgY2xpZW50X3Rlc3Rfc3BfcmVhZF9vdGhlcl9zcF9tbWlvLAorICAgIGNsaWVudF90ZXN0X3NwX3dyaXRlX290aGVyX3NwX21taW8sCisgICAgTlVMTCwKK307CisKK3N0YXRpYyBpbnQzMl90IGdldF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MoYWRkcl90ICphZGRyKQoreworICAgcHNhX2hhbmRsZV90ICAgICAgICAgICAgaGFuZGxlID0gMDsKKworICAgaGFuZGxlID0gcHNhLT5jb25uZWN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lELCAxKTsKKyAgIGlmIChoYW5kbGUgPCAwKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdENvbm5lY3Rpb24gZmFpbGVkXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKKyAgIH0KKworICAgLyogR2V0IEFwcC1Sb1QgYWRkcmVzcyAqLworICAgcHNhX291dHZlYyBvdXR2ZWNbMV0gPSB7e2FkZHIsIHNpemVvZihhZGRyX3QpfX07CisgICBpZiAocHNhLT5jYWxsKGhhbmRsZSwgTlVMTCwgMCwgb3V0dmVjLCAxKSAhPSBQU0FfU1VDQ0VTUykKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRtc2cgcmVxdWVzdCBmYWlsZWRcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0NBTExfRkFJTEVEOworICAgfQorCisgICBwc2EtPmNsb3NlKGhhbmRsZSk7CisgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCitpbnQzMl90IGNsaWVudF90ZXN0X3NwX3JlYWRfb3RoZXJfc3BfbW1pbyhzZWN1cml0eV90IGNhbGxlcikKK3sKKyAgIGFkZHJfdCAgIGFwcF9yb3RfYWRkcjsKKyAgIHVpbnQzMl90IGRhdGEgPSBEQVRBX1ZBTFVFOworCisgICB2YWwtPnByaW50KFBSSU5UX1RFU1QsICJbQ2hlY2sgMV0gVGVzdCBTUCByZWFkaW5nIG90aGVyIFNQIG1taW9cbiIsIDApOworCisgICBpZiAoVkFMX0VSUk9SKGdldF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MoJmFwcF9yb3RfYWRkcikpKQorICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworCisgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KKyAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9SRUVOVEVSX1RFU1QpKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICB9CisKKyAgIC8qIFJlYWQgQXBwbGljYXRpb24gUm9UIG1taW8gYWRkcmVzcy4KKyAgICAqIFRoaXMgc2hvdWxkIGdlbmVyYXRlIGludGVybmFsIGZhdWx0IG9yIGlnbm9yZSB0aGUgcmVhZC4KKyAgICAqLworICAgZGF0YSA9ICoodWludDMyX3QgKilhcHBfcm90X2FkZHI7CisKKyAgIC8qIERpZCByZWFkIGlnbm9yZT8gKi8KKyAgIGlmIChkYXRhID09IERBVEFfVkFMVUUpCisgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEV4cGVjdGVkIHJlYWQgdG8gZmF1bHQgYnV0IGl0IGRpZG4ndFxuIiwgMCk7CisKKyAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLworICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQpKQorICAgeworICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKKyAgIH0KKworICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKK30KKworaW50MzJfdCBjbGllbnRfdGVzdF9zcF93cml0ZV9vdGhlcl9zcF9tbWlvKHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgYWRkcl90ICAgYXBwX3JvdF9hZGRyOworICAgdWludDMyX3QgZGF0YSA9IERBVEFfVkFMVUU7CisKKyAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAyXSBUZXN0IFNQIHdyaXRpbmcgb3RoZXIgU1AgbW1pb1xuIiwgMCk7CisKKyAgIGlmIChWQUxfRVJST1IoZ2V0X3NlY3VyZV9wYXJ0aXRpb25fYWRkcmVzcygmYXBwX3JvdF9hZGRyKSkpCisgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisKKyAgIC8qIFNldHRpbmcgYm9vdC5zdGF0ZSBiZWZvcmUgdGVzdCBjaGVjayAqLworICAgaWYgKHZhbC0+c2V0X2Jvb3RfZmxhZyhCT09UX0VYUEVDVEVEX05TKSkKKyAgIHsKKyAgICAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOworICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOworICAgfQorCisgICAvKiBXcml0ZSBBcHBsaWNhdGlvbiBSb1QgbW1pbyBhZGRyZXNzLgorICAgICogVGhpcyBzaG91bGQgZ2VuZXJhdGUgaW50ZXJuYWwgZmF1bHQgb3IgaWdub3JlIHRoZSB3cml0ZS4KKyAgICAqLworICAgKih1aW50MzJfdCAqKWFwcF9yb3RfYWRkciA9ICh1aW50MzJfdClkYXRhOworCisgICAvKiBIYW5kc2hha2Ugd2l0aCBzZXJ2ZXIgdG8gZGVjaWRlIHdyaXRlIHN0YXR1cyAqLworICAgaWYgKChwc2EtPmNvbm5lY3QoU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQsIDEpKSA+IDApCisgICB7CisgICAgICAgdmFsLT5wcmludChQUklOVF9FUlJPUiwgIlx0RXhwZWN0ZWQgY29ubmVjdGlvbiB0byBmYWlsIGJ1dCBzdWNjZWVkXG4iLCAwKTsKKyAgICAgICByZXR1cm4gVkFMX1NUQVRVU19JTlZBTElEX0hBTkRMRTsKKyAgIH0KKyAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4Ny90ZXN0X2kwODcuaCBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDg3L3Rlc3RfaTA4Ny5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MDQyN2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfaTA4Ny90ZXN0X2kwODcuaApAQCAtMCwwICsxLDM4IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworI2lmbmRlZiBfVEVTVF9JMDg3X0NMSUVOVF9URVNUU19IXworI2RlZmluZSBfVEVTVF9JMDg3X0NMSUVOVF9URVNUU19IXworCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisKKyNpZmRlZiBOT05TRUNVUkVfVEVTVF9CVUlMRAorI2RlZmluZSB0ZXN0X2VudHJ5IENPTkNBVCh0ZXN0X2VudHJ5XyxpMDg3KQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCx0ZXN0X2VudHJ5KQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSx0ZXN0X2VudHJ5KQorI2Vsc2UKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX2NsaWVudF9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX2NsaWVudF9zcCkKKyNlbmRpZgorCitleHRlcm4gdmFsX2FwaV90ICp2YWw7CitleHRlcm4gcHNhX2FwaV90ICpwc2E7CisKK2V4dGVybiBjbGllbnRfdGVzdF90IHRlc3RfaTA4N19jbGllbnRfdGVzdHNfbGlzdFtdOworCitpbnQzMl90IGNsaWVudF90ZXN0X3NwX3JlYWRfb3RoZXJfc3BfbW1pbyhzZWN1cml0eV90KTsKK2ludDMyX3QgY2xpZW50X3Rlc3Rfc3Bfd3JpdGVfb3RoZXJfc3BfbW1pbyhzZWN1cml0eV90KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2kwODcvdGVzdF9zdXBwX2kwODcuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDg3L3Rlc3Rfc3VwcF9pMDg3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU5ZmI5NwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9pMDg3L3Rlc3Rfc3VwcF9pMDg3LmMKQEAgLTAsMCArMSwxNDMgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9zcF9yZWFkX290aGVyX3NwX21taW8odm9pZCk7CitpbnQzMl90IHNlcnZlcl90ZXN0X3NwX3dyaXRlX290aGVyX3NwX21taW8odm9pZCk7CisKKyNkZWZpbmUgREFUQV9WQUxVRSAweDU0NjcKKworc2VydmVyX3Rlc3RfdCB0ZXN0X2kwODdfc2VydmVyX3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIHNlcnZlcl90ZXN0X3NwX3JlYWRfb3RoZXJfc3BfbW1pbywKKyAgICBzZXJ2ZXJfdGVzdF9zcF93cml0ZV9vdGhlcl9zcF9tbWlvLAorICAgIE5VTEwsCit9OworCitzdGF0aWMgaW50MzJfdCBnZXRfbW1pb19hZGRyKGFkZHJfdCAqYWRkcikKK3sKKyAgIG1lbW9yeV9kZXNjX3QgICAgICAgICAgICptZW1vcnlfZGVzYzsKKyAgIGludDMyX3QgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFZBTF9TVEFUVVNfU1VDQ0VTUzsKKworICAgLyogR2V0IEFQUC1ST1QgTU1JTyBhZGRyZXNzICovCisgICBzdGF0dXMgPSB2YWwtPnRhcmdldF9nZXRfY29uZmlnKFRBUkdFVF9DT05GSUdfQ1JFQVRFX0lEKEdST1VQX01FTU9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRU1PUllfU0VSVkVSX1BBUlRJVElPTl9NTUlPLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKikmbWVtb3J5X2Rlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90ICopc2l6ZW9mKG1lbW9yeV9kZXNjX3QpKTsKKyAgIGlmICh2YWwtPmVycl9jaGVja19zZXQoVEVTVF9DSEVDS1BPSU5UX05VTSgyMDEpLCBzdGF0dXMpKQorICAgeworICAgICAgIHJldHVybiBzdGF0dXM7CisgICB9CisKKyAgICphZGRyID0gbWVtb3J5X2Rlc2MtPnN0YXJ0OworICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIGludDMyX3Qgc2VuZF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MoYWRkcl90ICpzdGFjaykKK3sKKyAgICBpbnQzMl90ICAgICAgICAgc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworICAgIHBzYV9tc2dfdCAgICAgICBtc2cgPSB7MH07CisKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAyKSwgc3RhdHVzKSkKKyAgICB7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgcHNhLT5yZXBseShtc2cuaGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisKKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY2FsbF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjAzKSwgc3RhdHVzKSkKKyAgICB7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgLTIpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8qIFNlbmQgQXBwbGljYXRpb24gUm9UIHN0YWNrIGFkZHJlc3MgKi8KKyAgICBwc2EtPndyaXRlKG1zZy5oYW5kbGUsIDAsICh2b2lkICopc3RhY2ssIHNpemVvZih1aW50MzJfdCkpOworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworCisgICAgc3RhdHVzID0gdmFsLT5wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdChTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRywgJm1zZyk7CisgICAgaWYgKHZhbC0+ZXJyX2NoZWNrX3NldChURVNUX0NIRUNLUE9JTlRfTlVNKDIwNCksIHN0YXR1cykpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICBwc2EtPnJlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOworfQorCitpbnQzMl90IHNlcnZlcl90ZXN0X3NwX3JlYWRfb3RoZXJfc3BfbW1pbyh2b2lkKQoreworICAgIGludDMyX3QgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICAgYWRkcl90ICAgICAgICAgIGFwcF9yb3RfYWRkcjsKKworICAgIHN0YXR1cyA9IGdldF9tbWlvX2FkZHIoJmFwcF9yb3RfYWRkcik7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgcmV0dXJuIHNlbmRfc2VjdXJlX3BhcnRpdGlvbl9hZGRyZXNzKCZhcHBfcm90X2FkZHIpOworfQorCitpbnQzMl90IHNlcnZlcl90ZXN0X3NwX3dyaXRlX290aGVyX3NwX21taW8odm9pZCkKK3sKKyAgICBhZGRyX3QgICAgICAgICAgYXBwX3JvdF9hZGRyOworICAgIGludDMyX3QgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICAgcHNhX21zZ190ICAgICAgIG1zZyA9IHswfTsKKworICAgIHN0YXR1cyA9IGdldF9tbWlvX2FkZHIoJmFwcF9yb3RfYWRkcik7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgLyogSW5pdGlhbGlzZSBtbWlvIGFkZHJlc3MgKi8KKyAgICAqKHVpbnQzMl90ICopYXBwX3JvdF9hZGRyID0gKHVpbnQzMl90KURBVEFfVkFMVUU7CisgICAgc3RhdHVzID0gc2VuZF9zZWN1cmVfcGFydGl0aW9uX2FkZHJlc3MoJmFwcF9yb3RfYWRkcik7CisgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgLyogV2FpdCBmb3Igd3JpdGUgdG8gZ2V0IHBlcmZvcm1lZCBieSBjbGllbnQgKi8KKyAgICBzdGF0dXMgPSB2YWwtPnByb2Nlc3NfY29ubmVjdF9yZXF1ZXN0KFNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lHLCAmbXNnKTsKKyAgICBpZiAodmFsLT5lcnJfY2hlY2tfc2V0KFRFU1RfQ0hFQ0tQT0lOVF9OVU0oMjA0KSwgc3RhdHVzKSkKKyAgICB7CisgICAgICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgLyogQ29ubmVjdGlvbiByZXF1ZXN0IGlzIGp1c3QgZm9yIGhhbmRzaGFrZSwgcmVqZWN0IGNvbm5lY3Rpb24gYW55d2F5cyAqLworICAgIHBzYS0+cmVwbHkobXNnLmhhbmRsZSwgUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCk7CisKKyAgICAvKiBSZWFjaGVkIGhlcmUgbWVhbnMgdGhlcmUgY291bGQgYmUgd3JpdGUgc3VjY2VlZCBvciBpZ25vcmVkICovCisgICAgaWYgKCoodWludDMyX3QgKilhcHBfcm90X2FkZHIgPT0gKHVpbnQzMl90KURBVEFfVkFMVUUpCisgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwtPnByaW50KFBSSU5UX0VSUk9SLCAiXHRFeHBlY3RlZCB3cml0ZSB0byBmYXVsdCBidXQgaXQgZGlkbid0XG4iLCAwKTsKKworICAgIC8qIFJlc2V0dGluZyBib290LnN0YXRlIHRvIGNhdGNoIHVud2FudGVkIHJlYm9vdCAqLworICAgIGlmICh2YWwtPnNldF9ib290X2ZsYWcoQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgICB7CisgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGFmdGVyIGNoZWNrXG4iLCAwKTsKKyAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CisgICAgfQorICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfbDA4OC9zb3VyY2UubWsgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfbDA4OC9zb3VyY2UubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwMDQ2MgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9sMDg4L3NvdXJjZS5tawpAQCAtMCwwICsxLDI1IEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworQ0NfU09VUkNFICA9IHRlc3RfZW50cnkuYyB0ZXN0X2wwODguYworQ0NfT1BUSU9OUyA9CitBU19TT1VSQ0UgID0KK0FTX09QVElPTlMgPQorCitDQ19TT1VSQ0VfU1BFICA9IHRlc3RfbDA4OC5jIHRlc3Rfc3VwcF9sMDg4LmMKK0NDX09QVElPTlNfU1BFID0KK0FTX1NPVVJDRV9TUEUgID0KK0FTX09QVElPTlNfU1BFID0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9sMDg4L3Rlc3RfZW50cnkuYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9sMDg4L3Rlc3RfZW50cnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzMyMTIyCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2wwODgvdGVzdF9lbnRyeS5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNpbmNsdWRlICJ0ZXN0X2wwODguaCIKKworI2RlZmluZSBURVNUX05VTSAgVkFMX0NSRUFURV9URVNUX0lEKFZBTF9GRl9CQVNFLCA4OCkKKyNkZWZpbmUgVEVTVF9ERVNDICJUZXN0aW5nIHBzYV9yb3RfbGlmZWN5Y2xlX3N0YXRlIEFQSVxuIgorVEVTVF9QVUJMSVNIKFRFU1RfTlVNLCB0ZXN0X2VudHJ5KTsKK3ZhbF9hcGlfdCAqdmFsID0gTlVMTDsKK3BzYV9hcGlfdCAqcHNhID0gTlVMTDsKKwordm9pZCB0ZXN0X2VudHJ5KHZhbF9hcGlfdCAqdmFsX2FwaSwgcHNhX2FwaV90ICpwc2FfYXBpKQoreworICAgIGludDMyX3QgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisKKyAgICB2YWwgPSB2YWxfYXBpOworICAgIHBzYSA9IHBzYV9hcGk7CisKKyAgICAvKiB0ZXN0IGluaXQgKi8KKyAgICB2YWwtPnRlc3RfaW5pdChURVNUX05VTSwgVEVTVF9ERVNDLCBURVNUX0ZJRUxEKFRFU1RfSVNPTEFUSU9OX0wxLCBXRF9MT1dfVElNRU9VVCkpOworICAgIGlmICghSVNfVEVTVF9TVEFSVCh2YWwtPmdldF9zdGF0dXMoKSkpCisgICAgeworICAgICAgICBnb3RvIHRlc3RfZXhpdDsKKyAgICB9CisKKyAgICAvKiBTd2l0Y2ggdG8gc2VjdXJlIHNpZGUgKGNsaWVudF9wYXJ0aXRpb24uYykgYW5kIGV4ZWN1dGUgbGlzdCBvZiB0ZXN0cyBhdmFpbGFibGUgaW4KKyAgICB0ZXN0W251bV1fY2xpZW50X3Rlc3RzX2xpc3QgZnJvbSBTZWN1cmUgc2lkZSAqLworICAgIHN0YXR1cyA9IHZhbC0+c3dpdGNoX3RvX3NlY3VyZV9jbGllbnQoVEVTVF9OVU0pOworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgIGdvdG8gdGVzdF9leGl0OworICAgIH0KKwordGVzdF9leGl0OgorICAgIHZhbC0+dGVzdF9leGl0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfbDA4OC90ZXN0X2wwODguYyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9sMDg4L3Rlc3RfbDA4OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMmM5MjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfbDA4OC90ZXN0X2wwODguYwpAQCAtMCwwICsxLDM3IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZkZWYgTk9OU0VDVVJFX1RFU1RfQlVJTEQKKyNpbmNsdWRlICJ2YWxfaW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgInZhbF90YXJnZXQuaCIKKyNlbHNlCisjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCisjaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ0ZXN0X2wwODguaCIKKworY2xpZW50X3Rlc3RfdCB0ZXN0X2wwODhfY2xpZW50X3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIGNsaWVudF90ZXN0X3BzYV9yb3RfbGlmZWN5Y2xlX3N0YXRlLAorICAgIE5VTEwsCit9OworCitpbnQzMl90IGNsaWVudF90ZXN0X3BzYV9yb3RfbGlmZWN5Y2xlX3N0YXRlKHNlY3VyaXR5X3QgY2FsbGVyKQoreworICAgcmV0dXJuIFZBTF9TVEFUVVNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9sMDg4L3Rlc3RfbDA4OC5oIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0X2wwODgvdGVzdF9sMDg4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI3ZjhhYwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9sMDg4L3Rlc3RfbDA4OC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisjaWZuZGVmIF9URVNUX0wwODhfQ0xJRU5UX1RFU1RTX0hfCisjZGVmaW5lIF9URVNUX0wwODhfQ0xJRU5UX1RFU1RTX0hfCisKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKworI2lmZGVmIE5PTlNFQ1VSRV9URVNUX0JVSUxECisjZGVmaW5lIHRlc3RfZW50cnkgQ09OQ0FUKHRlc3RfZW50cnlfLGwwODgpCisjZGVmaW5lIHZhbCBDT05DQVQodmFsLHRlc3RfZW50cnkpCisjZGVmaW5lIHBzYSBDT05DQVQocHNhLHRlc3RfZW50cnkpCisjZWxzZQorI2RlZmluZSB2YWwgQ09OQ0FUKHZhbCxfY2xpZW50X3NwKQorI2RlZmluZSBwc2EgQ09OQ0FUKHBzYSxfY2xpZW50X3NwKQorI2VuZGlmCisKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKKworZXh0ZXJuIGNsaWVudF90ZXN0X3QgdGVzdF9pMDg4X2NsaWVudF90ZXN0c19saXN0W107CisKK2ludDMyX3QgY2xpZW50X3Rlc3RfcHNhX3JvdF9saWZlY3ljbGVfc3RhdGUoc2VjdXJpdHlfdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdF9sMDg4L3Rlc3Rfc3VwcF9sMDg4LmMgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfbDA4OC90ZXN0X3N1cHBfbDA4OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYTlmZTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvZmYvaXBjL3Rlc3RfbDA4OC90ZXN0X3N1cHBfbDA4OC5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJ2YWxfY2xpZW50X2RlZnMuaCIKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCisKKyNkZWZpbmUgdmFsIENPTkNBVCh2YWwsX3NlcnZlcl9zcCkKKyNkZWZpbmUgcHNhIENPTkNBVChwc2EsX3NlcnZlcl9zcCkKK2V4dGVybiB2YWxfYXBpX3QgKnZhbDsKK2V4dGVybiBwc2FfYXBpX3QgKnBzYTsKKworaW50MzJfdCBzZXJ2ZXJfdGVzdF9wc2Ffcm90X2xpZmVjeWNsZV9zdGF0ZSh2b2lkKTsKKworc2VydmVyX3Rlc3RfdCB0ZXN0X2wwODhfc2VydmVyX3Rlc3RzX2xpc3RbXSA9IHsKKyAgICBOVUxMLAorICAgIHNlcnZlcl90ZXN0X3BzYV9yb3RfbGlmZWN5Y2xlX3N0YXRlLAorICAgIE5VTEwsCit9OworCitpbnQzMl90IHNlcnZlcl90ZXN0X3BzYV9yb3RfbGlmZWN5Y2xlX3N0YXRlKHZvaWQpCit7CisgICAgdWludDMyX3Qgc3RhdGU7CisgICAgaW50MzJfdCAgc3RhdHVzID0gVkFMX1NUQVRVU19VTlNVUFBPUlRFRDsKKworICAgIHZhbC0+cHJpbnQoUFJJTlRfVEVTVCwgIltDaGVjayAxXSBUZXN0IGNhbGxpbmcgcHNhX3JvdF9saWZlY3ljbGVfc3RhdGUgQVBJXG4iLCAwKTsKKworICAgIHN0YXRlID0gcHNhLT5yb3RfbGlmZWN5Y2xlX3N0YXRlKCk7CisgICAgc3dpdGNoIChzdGF0ZSAmIFBTQV9MSUZFQ1lDTEVfUFNBX1NUQVRFX01BU0spCisgICAgeworICAgICAgICBjYXNlIFBTQV9MSUZFQ1lDTEVfVU5LTk9XTjoKKyAgICAgICAgY2FzZSBQU0FfTElGRUNZQ0xFX0FTU0VNQkxZX0FORF9URVNUOgorICAgICAgICBjYXNlIFBTQV9MSUZFQ1lDTEVfUFNBX1JPVF9QUk9WSVNJT05JTkc6CisgICAgICAgIGNhc2UgUFNBX0xJRkVDWUNMRV9TRUNVUkVEOgorICAgICAgICBjYXNlIFBTQV9MSUZFQ1lDTEVfTk9OX1BTQV9ST1RfREVCVUc6CisgICAgICAgIGNhc2UgUFNBX0xJRkVDWUNMRV9SRUNPVkVSQUJMRV9QU0FfUk9UX0RFQlVHOgorICAgICAgICBjYXNlIFBTQV9MSUZFQ1lDTEVfREVDT01NSVNTSU9ORUQ6CisgICAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHZhbC0+cHJpbnQoUFJJTlRfRVJST1IsICJcdHBzYV9yb3RfbGlmZWN5Y2xlX3N0YXRlIEFQSSByZXR1cm5lZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCB2YWx1ZVxuIiwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9mZi9pcGMvdGVzdHN1aXRlLmRiIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0c3VpdGUuZGIKaW5kZXggNGJmZjEwZS4uZjhhMzAxMyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0c3VpdGUuZGIKKysrIGIvYXBpLXRlc3RzL2ZmL2lwYy90ZXN0c3VpdGUuZGIKQEAgLTIzLDY4ICsyMyw5MCBAQAogdGVzdF9pMDAxCiB0ZXN0X2kwMDIKIHRlc3RfaTAwMwotdGVzdF9pMDA0Ci10ZXN0X2kwMDUKLXRlc3RfaTAwNgotdGVzdF9pMDA3Ci10ZXN0X2kwMDgKLXRlc3RfaTAwOQotdGVzdF9pMDEwCi10ZXN0X2kwMTEKLXRlc3RfaTAxMgotdGVzdF9pMDEzCi10ZXN0X2kwMTQKLXRlc3RfaTAxNQotdGVzdF9pMDE2Ci10ZXN0X2kwMTcKLXRlc3RfaTAxOAotdGVzdF9pMDE5Ci10ZXN0X2kwMjAKK3Rlc3RfaTAwNCwgcGFuaWNfdGVzdAordGVzdF9pMDA1LCBwYW5pY190ZXN0Cit0ZXN0X2kwMDYsIHBhbmljX3Rlc3QKK3Rlc3RfaTAwNywgcGFuaWNfdGVzdAordGVzdF9pMDA4LCBwYW5pY190ZXN0Cit0ZXN0X2kwMDksIHBhbmljX3Rlc3QKK3Rlc3RfaTAxMCwgcGFuaWNfdGVzdAordGVzdF9pMDExLCBwYW5pY190ZXN0Cit0ZXN0X2kwMTIsIHBhbmljX3Rlc3QKK3Rlc3RfaTAxMywgcGFuaWNfdGVzdAordGVzdF9pMDE0LCBwYW5pY190ZXN0Cit0ZXN0X2kwMTUsIHBhbmljX3Rlc3QKK3Rlc3RfaTAxNiwgcGFuaWNfdGVzdAordGVzdF9pMDE3LCBwYW5pY190ZXN0Cit0ZXN0X2kwMTgsIHBhbmljX3Rlc3QKK3Rlc3RfaTAxOSwgcGFuaWNfdGVzdAordGVzdF9pMDIwLCBwYW5pY190ZXN0CiB0ZXN0X2kwMjEKLXRlc3RfaTAyMgotdGVzdF9pMDIzCi10ZXN0X2kwMjQKLXRlc3RfaTAyNQotdGVzdF9pMDI2Ci10ZXN0X2kwMjcKLXRlc3RfaTAyOAotdGVzdF9pMDI5Ci10ZXN0X2kwMzAKLXRlc3RfaTAzMQotdGVzdF9pMDMyCi10ZXN0X2kwMzMKLXRlc3RfaTAzNAotdGVzdF9pMDM1Ci10ZXN0X2kwMzYKLXRlc3RfaTAzNwotdGVzdF9pMDM4Ci10ZXN0X2kwMzkKLXRlc3RfaTA0MAotdGVzdF9pMDQxCi10ZXN0X2kwNDIKLXRlc3RfaTA0MwotdGVzdF9pMDQ0Ci10ZXN0X2kwNDUKLXRlc3RfaTA0NgotdGVzdF9pMDQ3Ci10ZXN0X2kwNDgKLXRlc3RfaTA0OQotdGVzdF9pMDUwCi10ZXN0X2kwNTEKLXRlc3RfaTA1MgotdGVzdF9pMDUzCi10ZXN0X2kwNTQKLXRlc3RfaTA1NQotdGVzdF9pMDU2Ci10ZXN0X2kwNTcKK3Rlc3RfaTAyMiwgcGFuaWNfdGVzdAordGVzdF9pMDIzLCBwYW5pY190ZXN0Cit0ZXN0X2kwMjQsIHBhbmljX3Rlc3QKK3Rlc3RfaTAyNSwgcGFuaWNfdGVzdAordGVzdF9pMDI2LCBwYW5pY190ZXN0Cit0ZXN0X2kwMjcsIHBhbmljX3Rlc3QKK3Rlc3RfaTAyOCwgcGFuaWNfdGVzdAordGVzdF9pMDI5LCBwYW5pY190ZXN0Cit0ZXN0X2kwMzAsIHBhbmljX3Rlc3QKK3Rlc3RfaTAzMSwgcGFuaWNfdGVzdAordGVzdF9pMDMyLCBwYW5pY190ZXN0Cit0ZXN0X2kwMzMsIHBhbmljX3Rlc3QKK3Rlc3RfaTAzNCwgcGFuaWNfdGVzdAordGVzdF9pMDM1LCBwYW5pY190ZXN0Cit0ZXN0X2kwMzYsIHBhbmljX3Rlc3QKK3Rlc3RfaTAzNywgcGFuaWNfdGVzdAordGVzdF9pMDM4LCBwYW5pY190ZXN0Cit0ZXN0X2kwMzksIHBhbmljX3Rlc3QKK3Rlc3RfaTA0MCwgcGFuaWNfdGVzdAordGVzdF9pMDQxLCBwYW5pY190ZXN0Cit0ZXN0X2kwNDIsIHBhbmljX3Rlc3QKK3Rlc3RfaTA0MywgcGFuaWNfdGVzdAordGVzdF9pMDQ0LCBwYW5pY190ZXN0Cit0ZXN0X2kwNDUsIHBhbmljX3Rlc3QKK3Rlc3RfaTA0NiwgcGFuaWNfdGVzdAordGVzdF9pMDQ3LCBwYW5pY190ZXN0Cit0ZXN0X2kwNDgsIHBhbmljX3Rlc3QKK3Rlc3RfaTA0OSwgcGFuaWNfdGVzdAordGVzdF9pMDUwLCBwYW5pY190ZXN0Cit0ZXN0X2kwNTEsIHBhbmljX3Rlc3QKK3Rlc3RfaTA1MiwgcGFuaWNfdGVzdAordGVzdF9pMDUzLCBwYW5pY190ZXN0Cit0ZXN0X2kwNTQsIHBhbmljX3Rlc3QKK3Rlc3RfaTA1NSwgcGFuaWNfdGVzdAordGVzdF9pMDU2LCBwYW5pY190ZXN0Cit0ZXN0X2kwNTcsIHBhbmljX3Rlc3QKIHRlc3RfaTA1OAotdGVzdF9pMDU5Ci10ZXN0X2kwNjAKLXRlc3RfaTA2MQotdGVzdF9pMDYyCit0ZXN0X2kwNTksIHBhbmljX3Rlc3QKK3Rlc3RfaTA2MCwgcGFuaWNfdGVzdAordGVzdF9pMDYxLCBwYW5pY190ZXN0Cit0ZXN0X2kwNjIsIHBhbmljX3Rlc3QKIHRlc3RfaTA2MwotdGVzdF9pMDY0Ci10ZXN0X2kwNjUKLXRlc3RfaTA2NgordGVzdF9pMDY0LCBwYW5pY190ZXN0Cit0ZXN0X2kwNjUsIHBhbmljX3Rlc3QKK3Rlc3RfaTA2NiwgcGFuaWNfdGVzdAordGVzdF9pMDY3Cit0ZXN0X2kwNjgsIHBhbmljX3Rlc3QKK3Rlc3RfaTA2OSwgcGFuaWNfdGVzdAordGVzdF9pMDcwLCBwYW5pY190ZXN0Cit0ZXN0X2kwNzEKK3Rlc3RfaTA3MiwgcGFuaWNfdGVzdAordGVzdF9pMDczLCBwYW5pY190ZXN0Cit0ZXN0X2kwNzQsIHBhbmljX3Rlc3QKK3Rlc3RfaTA3NSwgcGFuaWNfdGVzdAordGVzdF9pMDc2LCBwYW5pY190ZXN0Cit0ZXN0X2kwNzcsIHBhbmljX3Rlc3QKK3Rlc3RfaTA3OCwgcGFuaWNfdGVzdAordGVzdF9pMDc5LCBwYW5pY190ZXN0Cit0ZXN0X2kwODAsIHBhbmljX3Rlc3QKK3Rlc3RfaTA4MSwgcGFuaWNfdGVzdAordGVzdF9pMDgyLCBwYW5pY190ZXN0Cit0ZXN0X2kwODMsIHBhbmljX3Rlc3QKK3Rlc3RfaTA4NCwgcGFuaWNfdGVzdAordGVzdF9pMDg1LCBwYW5pY190ZXN0Cit0ZXN0X2kwODYsIHBhbmljX3Rlc3QKK3Rlc3RfaTA4NywgcGFuaWNfdGVzdAordGVzdF9sMDg4CiAKIChFTkQpCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvZmYvcGFydGl0aW9uL2NvbW1vbi9kcml2ZXJfcGFydGl0aW9uLmMgYi9hcGktdGVzdHMvZmYvcGFydGl0aW9uL2NvbW1vbi9kcml2ZXJfcGFydGl0aW9uLmMKaW5kZXggNjUyM2ZkNS4uNTNhNjAwNCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL2ZmL3BhcnRpdGlvbi9jb21tb24vZHJpdmVyX3BhcnRpdGlvbi5jCisrKyBiL2FwaS10ZXN0cy9mZi9wYXJ0aXRpb24vY29tbW9uL2RyaXZlcl9wYXJ0aXRpb24uYwpAQCAtMTcsMjIgKzE3LDM2IEBACiAKICNpbmNsdWRlICJ2YWwvc3BlL3ZhbF9kcml2ZXJfc2VydmljZV9hcGlzLmgiCiAKKyNkZWZpbmUgREFUQV9WQUxVRSAgMHgxMTExCisjZGVmaW5lIEJVRkZFUl9TSVpFIDQKKwordWludDMyX3QgZ19wc2Ffcm90X2RhdGEgPSBEQVRBX1ZBTFVFOworCiBpbnQzMl90IGRyaXZlcl90ZXN0X3BzYV9lb2lfd2l0aF9ub25faW50cl9zaWduYWwodm9pZCk7CiBpbnQzMl90IGRyaXZlcl90ZXN0X3BzYV9lb2lfd2l0aF91bmFzc2VydGVkX3NpZ25hbCh2b2lkKTsKIGludDMyX3QgZHJpdmVyX3Rlc3RfcHNhX2VvaV93aXRoX211bHRpcGxlX3NpZ25hbHModm9pZCk7CitpbnQzMl90IGRyaXZlcl90ZXN0X2lycV9yb3V0aW5nKHZvaWQpOwordm9pZCBkcml2ZXJfdGVzdF9pc29sYXRpb25fcHNhX3JvdF9kYXRhX3JkKHBzYV9tc2dfdCAqbXNnKTsKK3ZvaWQgZHJpdmVyX3Rlc3RfaXNvbGF0aW9uX3BzYV9yb3RfZGF0YV93cihwc2FfbXNnX3QgKm1zZyk7Cit2b2lkIGRyaXZlcl90ZXN0X2lzb2xhdGlvbl9wc2Ffcm90X3N0YWNrX3JkKHBzYV9tc2dfdCAqbXNnKTsKK3ZvaWQgZHJpdmVyX3Rlc3RfaXNvbGF0aW9uX3BzYV9yb3Rfc3RhY2tfd3IocHNhX21zZ190ICptc2cpOwordm9pZCBkcml2ZXJfdGVzdF9pc29sYXRpb25fcHNhX3JvdF9oZWFwX3JkKHBzYV9tc2dfdCAqbXNnKTsKK3ZvaWQgZHJpdmVyX3Rlc3RfaXNvbGF0aW9uX3BzYV9yb3RfaGVhcF93cihwc2FfbXNnX3QgKm1zZyk7Cit2b2lkIGRyaXZlcl90ZXN0X2lzb2xhdGlvbl9wc2Ffcm90X21taW9fcmQocHNhX21zZ190ICptc2cpOwordm9pZCBkcml2ZXJfdGVzdF9pc29sYXRpb25fcHNhX3JvdF9tbWlvX3dyKHBzYV9tc2dfdCAqbXNnKTsKIAogdm9pZCBkcml2ZXJfbWFpbih2b2lkKQogewotICAgIHBzYV9zaWduYWxfdCAgICAgICAgc2lnbmFscyA9IDA7Ci0gICAgcHNhX21zZ190ICAgICAgICAgICBtc2cgPSB7MH07Ci0gICAgdWludDMyX3QgICAgICAgICAgICBkYXRhID0gMDsKLSAgICB1YXJ0X2ZuX3R5cGVfdCAgICAgIHVhcnRfZm47Ci0gICAgbnZtZW1fcGFyYW1fdCAgICAgICBudm1lbV9wYXJhbTsKLSAgICB0ZXN0X2ludHJfZm5faWRfdCAgIHRlc3RfaW50cl9mbl9pZDsKLSAgICBjaGFyICAgICAgICAgICAgICAgIHN0cmluZ1syNTZdID0gezB9OwotICAgIHVpbnQ4X3QgICAgICAgICAgICAgYnVmZmVyWzI1Nl0gPSB7MH07Ci0gICAgd2RfcGFyYW1fdCAgICAgICAgICB3ZF9wYXJhbTsKLSAgICBhZGRyX3QgICAgICAgICAgICAgIHVhcnRfYmFzZTsKKyAgICBwc2Ffc2lnbmFsX3QgICAgICAgICAgc2lnbmFscyA9IDA7CisgICAgcHNhX21zZ190ICAgICAgICAgICAgIG1zZyA9IHswfTsKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgZGF0YSA9IDA7CisgICAgdWFydF9mbl90eXBlX3QgICAgICAgIHVhcnRfZm47CisgICAgbnZtZW1fcGFyYW1fdCAgICAgICAgIG52bWVtX3BhcmFtOworICAgIGRyaXZlcl90ZXN0X2ZuX2lkX3QgICBkcml2ZXJfdGVzdF9mbl9pZDsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgc3RyaW5nWzI1Nl0gPSB7MH07CisgICAgdWludDhfdCAgICAgICAgICAgICAgIGJ1ZmZlclsyNTZdID0gezB9OworICAgIHdkX3BhcmFtX3QgICAgICAgICAgICB3ZF9wYXJhbTsKKyAgICBhZGRyX3QgICAgICAgICAgICAgICAgdWFydF9iYXNlOwogCiAgICAgLyogSW5pdGlhbGlzZWQgZHJpdmVyIG1taW8gc3BhY2UgKi8KICAgICBpZiAodmFsX2luaXRfZHJpdmVyX21lbW9yeSgpKQpAQCAtMjA2LDE0ICsyMjAsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgLyogU0lEIHJlc2VydmVkIGZvciBpbnRlcnJ1cHQgdGVzdGluZyAqLwotICAgICAgICBlbHNlIGlmIChzaWduYWxzICYgVEVTVF9JTlRSX1NJRykKKyAgICAgICAgLyogU0lEIHJlc2VydmVkIGZvciBEcml2ZXIgdGVzdCBmdW5jdGlvbnMgKi8KKyAgICAgICAgZWxzZSBpZiAoc2lnbmFscyAmIERSSVZFUl9URVNUX1NJRykKICAgICAgICAgewotICAgICAgICAgICAgcHNhX2dldChURVNUX0lOVFJfU0lHLCAmbXNnKTsKKyAgICAgICAgICAgIHBzYV9nZXQoRFJJVkVSX1RFU1RfU0lHLCAmbXNnKTsKICAgICAgICAgICAgIHN3aXRjaCAobXNnLnR5cGUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgY2FzZSBQU0FfSVBDX0NBTEw6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtc2cuaW5fc2l6ZVswXSA+IHNpemVvZih0ZXN0X2ludHJfZm5faWRfdCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChtc2cuaW5fc2l6ZVswXSA+IHNpemVvZihkcml2ZXJfdGVzdF9mbl9pZF90KSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgLyogYnVmZmVyIG92ZXJmbG93ICovCiAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfcmVwbHkobXNnLmhhbmRsZSwgVkFMX1NUQVRVU19FUlJPUik7CkBAIC0yMjIsMTAgKzIzNiwxMCBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcHNhX3JlYWQobXNnLmhhbmRsZSwgMCwgJnRlc3RfaW50cl9mbl9pZCwgbXNnLmluX3NpemVbMF0pOworICAgICAgICAgICAgICAgICAgICAgICAgcHNhX3JlYWQobXNnLmhhbmRsZSwgMCwgJmRyaXZlcl90ZXN0X2ZuX2lkLCBtc2cuaW5fc2l6ZVswXSk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRlc3RfaW50cl9mbl9pZCkKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChkcml2ZXJfdGVzdF9mbl9pZCkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBURVNUX1BTQV9FT0lfV0lUSF9OT05fSU5UUl9TSUdOQUw6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlcl90ZXN0X3BzYV9lb2lfd2l0aF9ub25faW50cl9zaWduYWwoKTsKQEAgLTI0MCw2ICsyNTQsMzQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFZBTF9TVEFUVVNfRVJST1IpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVEVTVF9JTlRSX1NFUlZJQ0U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkcml2ZXJfdGVzdF9pcnFfcm91dGluZygpICE9IFZBTF9TVEFUVVNfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBWQUxfU1RBVFVTX0VSUk9SKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRFU1RfSVNPTEFUSU9OX1BTQV9ST1RfREFUQV9SRDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyX3Rlc3RfaXNvbGF0aW9uX3BzYV9yb3RfZGF0YV9yZCgmbXNnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRFU1RfSVNPTEFUSU9OX1BTQV9ST1RfREFUQV9XUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyX3Rlc3RfaXNvbGF0aW9uX3BzYV9yb3RfZGF0YV93cigmbXNnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRFU1RfSVNPTEFUSU9OX1BTQV9ST1RfU1RBQ0tfUkQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlcl90ZXN0X2lzb2xhdGlvbl9wc2Ffcm90X3N0YWNrX3JkKCZtc2cpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVEVTVF9JU09MQVRJT05fUFNBX1JPVF9TVEFDS19XUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyX3Rlc3RfaXNvbGF0aW9uX3BzYV9yb3Rfc3RhY2tfd3IoJm1zZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBURVNUX0lTT0xBVElPTl9QU0FfUk9UX0hFQVBfUkQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlcl90ZXN0X2lzb2xhdGlvbl9wc2Ffcm90X2hlYXBfcmQoJm1zZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBURVNUX0lTT0xBVElPTl9QU0FfUk9UX0hFQVBfV1I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlcl90ZXN0X2lzb2xhdGlvbl9wc2Ffcm90X2hlYXBfd3IoJm1zZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBURVNUX0lTT0xBVElPTl9QU0FfUk9UX01NSU9fUkQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlcl90ZXN0X2lzb2xhdGlvbl9wc2Ffcm90X21taW9fcmQoJm1zZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBURVNUX0lTT0xBVElPTl9QU0FfUk9UX01NSU9fV1I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlcl90ZXN0X2lzb2xhdGlvbl9wc2Ffcm90X21taW9fd3IoJm1zZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjY3LDcgKzMwOSw3IEBACiAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0VSUk9SOwogICAgIH0KIAotICAgIC8qIHBzYV9lb2kgc2hvdWxkIG5vdCByZXR1cm4gYXMgc2lnbmFsIGlzIG5vbi1pbnRlcnJ1cHQgc2lnbmFsKi8KKyAgICAvKiBwc2FfZW9pIHNob3VsZCBwYW5pYyBhcyBzaWduYWwgaXMgbm9uLWludGVycnVwdCBzaWduYWwqLwogICAgIHBzYV9lb2koUFNBX0RPT1JCRUxMKTsKIAogICAgIC8qIENvbnRyb2wgc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCkBAIC0yOTIsNyArMzM0LDcgQEAKICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfRVJST1I7CiAgICAgfQogCi0gICAgLyogcHNhX2VvaSBzaG91bGQgbm90IHJldHVybiBhcyBEUklWRVJfVUFSVF9JTlRSX1NJRyBpcyB1bmFzc2VydGVkICovCisgICAgLyogcHNhX2VvaSBzaG91bGQgcGFuaWMgYXMgRFJJVkVSX1VBUlRfSU5UUl9TSUcgaXMgdW5hc3NlcnRlZCAqLwogICAgIHBzYV9lb2koRFJJVkVSX1VBUlRfSU5UUl9TSUcpOwogCiAgICAgLyogQ29udHJvbCBzaG91bGRuJ3QgaGF2ZSByZWFjaGVkIGhlcmUgKi8KQEAgLTMxMCw2ICszNTIsMjcgQEAKIAogaW50MzJfdCBkcml2ZXJfdGVzdF9wc2FfZW9pX3dpdGhfbXVsdGlwbGVfc2lnbmFscyh2b2lkKQogeworICAgIC8qCisgICAgICogVG8gdGVzdCBwc2FfZW9pIGZvciBtdWx0aXBsZSBzaWduYWxzLCBvbmUgb2Ygc2lnbmFsIHNob3VsZCBhc3NlcnRlZCBmaXJzdC4KKyAgICAgKiBPdGhlcndpc2UsIGNoZWNrIGNhbiBmYWxzZSBwYXNzIHdpdGggcHNhX2VvaV93aXRoX3VuYXNzZXJ0ZWRfc2lnbmFsLgorICAgICAqIEFzc2VydCBpbnRlcnJ1cHQgc2lnbmFsIGFzc2lnbmVkIHRvIGRyaXZlciBwYXJ0aXRpb24KKyAgICAgKi8KKyAgICB2YWxfZ2VuZXJhdGVfaW50ZXJydXB0KCk7CisKKyAgICAvKiBXYWl0IGZvciBEUklWRVJfVUFSVF9JTlRSX1NJRyBzaWduYWwgKi8KKyAgICBpZiAocHNhX3dhaXQoRFJJVkVSX1VBUlRfSU5UUl9TSUcsIFBTQV9CTE9DSykgJiBEUklWRVJfVUFSVF9JTlRSX1NJRykKKyAgICB7CisgICAgICAgIC8qIFJlY2VpdmVkIERSSVZFUl9VQVJUX0lOVFJfU0lHIHNpZ25hbCwgbm93IHByb2Nlc3MgaXQgKi8KKyAgICAgICAgdmFsX2Rpc2FibGVfaW50ZXJydXB0KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIGRpZG4ndCByZWNlaXZlIERSSVZFUl9VQVJUX0lOVFJfU0lHIHNpZ25hbCwgaG93ZXZlciBwcm9jZXNzIGl0ICovCisgICAgICAgIHZhbF9kaXNhYmxlX2ludGVycnVwdCgpOworICAgICAgICB2YWxfcHJpbnRfc2YoIlx0RmFpbGVkIHRvIHJlY2VpdmUgaXJxIHNpZ25hbFxuIiwgMCk7CisgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NQTV9GQUlMRUQ7CisgICAgfQorCiAgICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCiAgICAgaWYgKHZhbF9kcml2ZXJfcHJpdmF0ZV9zZXRfYm9vdF9mbGFnX2ZuKEJPT1RfRVhQRUNURURfTlMpKQogICAgIHsKQEAgLTMxNyw4ICszODAsOCBAQAogICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKICAgICB9CiAKLSAgICAvKiBwc2FfZW9pIHNob3VsZCBub3QgcmV0dXJuIGFzIGlycV9zaWduYWwgaXMgcHJvdmlkZWQgd2l0aCBtdWx0aXBsZSBzaWduYWxzICovCi0gICAgcHNhX2VvaShEUklWRVJfVUFSVF9JTlRSX1NJR3xURVNUX0lOVFJfU0lHKTsKKyAgICAvKiBwc2FfZW9pIHNob3VsZCBwYW5pYyBhcyBpcnFfc2lnbmFsIGlzIHByb3ZpZGVkIHdpdGggbXVsdGlwbGUgc2lnbmFscyAqLworICAgIHBzYV9lb2koRFJJVkVSX1VBUlRfSU5UUl9TSUd8RFJJVkVSX1RFU1RfU0lHKTsKIAogICAgIC8qIENvbnRyb2wgc2hvdWxkbid0IGhhdmUgcmVhY2hlZCBoZXJlICovCiAgICAgdmFsX3ByaW50X3NmKCJcdENoZWNrIGZvciBwc2FfZW9pKG11bHRpcGxlX3NpZ25hbHMpIGZhaWxlZFxuIiwgMCk7CkBAIC0zMzIsMyArMzk1LDMwNyBAQAogCiAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKIH0KKworaW50MzJfdCBkcml2ZXJfdGVzdF9pcnFfcm91dGluZyh2b2lkKQoreworICAgIHBzYV9zaWduYWxfdCBzaWduYWxzID0gMDsKKworICAgIC8qIEFzc2VydCBpbnRlcnJ1cHQgc2lnbmFsIGFzc2lnbmVkIHRvIGRyaXZlciBwYXJ0aXRpb24gKi8KKyAgICB2YWxfZ2VuZXJhdGVfaW50ZXJydXB0KCk7CisKKyAgICAvKiBXYWl0IGZvciBEUklWRVJfVUFSVF9JTlRSX1NJRyBzaWduYWwgKi8KKyAgICBzaWduYWxzID0gcHNhX3dhaXQoUFNBX1dBSVRfQU5ZLCBQU0FfQkxPQ0spOworCisgICAgaWYgKHNpZ25hbHMgJiBEUklWRVJfVUFSVF9JTlRSX1NJRykKKyAgICB7CisgICAgICAgIC8qIFJlY2VpdmVkIERSSVZFUl9VQVJUX0lOVFJfU0lHIHNpZ25hbCwgbm93IHByb2Nlc3MgaXQgKi8KKyAgICAgICAgdmFsX2Rpc2FibGVfaW50ZXJydXB0KCk7CisKKyAgICAgICAgLyogQSBzaWduYWwgcmVtYWlucyBhY3RpdmUgdW50aWwgaXQgaXMgcHJvY2Vzc2VkIGJ5IHBzYV9lb2kgKi8KKyAgICAgICAgaWYgKChwc2Ffd2FpdChEUklWRVJfVUFSVF9JTlRSX1NJRywgUFNBX0JMT0NLKSAmIERSSVZFUl9VQVJUX0lOVFJfU0lHKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICB2YWxfcHJpbnRfc2YoIlx0SXJxIHNpZ25hbCBnb3QgZGUtYWN0aXZhdGUgYmVmb3JlIHBzYV9lb2koKVxuIiwgMCk7CisgICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19TUE1fRkFJTEVEOworICAgICAgICB9CisKKyAgICAgICAgLyogUGVyZm9ybSBlbmQgb2YgaW50ZXJydXB0ICovCisgICAgICAgIHBzYV9lb2koRFJJVkVSX1VBUlRfSU5UUl9TSUcpOworCisgICAgICAgIC8qIElycSBzaWduYWwgc2hvdWxkIGJlIGRlLWFjdGl2YXRlZCBub3cgKi8KKyAgICAgICAgaWYgKHBzYV93YWl0KERSSVZFUl9VQVJUX0lOVFJfU0lHLCBQU0FfUE9MTCkgJiBEUklWRVJfVUFSVF9JTlRSX1NJRykKKyAgICAgICAgeworICAgICAgICAgICAgdmFsX3ByaW50X3NmKCJcdElycSBzaWduYWwgZGlkbid0IGdldCBkZS1hY3RpdmF0ZSBhZnRlciBwc2FfZW9pKClcbiIsIDApOworICAgICAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIGRpZG4ndCByZWNlaXZlIERSSVZFUl9VQVJUX0lOVFJfU0lHIHNpZ25hbCwgaG93ZXZlciBwcm9jZXNzIGl0ICovCisgICAgICAgIHZhbF9kaXNhYmxlX2ludGVycnVwdCgpOworICAgICAgICB2YWxfcHJpbnRfc2YoIlx0RmFpbGVkIHRvIHJlY2VpdmUgaXJxIHNpZ25hbCwgc2lnbmFscz0weCV4XG4iLCBzaWduYWxzKTsKKyAgICAgICAgcmV0dXJuIFZBTF9TVEFUVVNfU1BNX0ZBSUxFRDsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQzMl90IHByb2Nlc3NfY2FsbF9yZXF1ZXN0KHBzYV9zaWduYWxfdCBzaWcsIHBzYV9tc2dfdCAqbXNnKQoreworICAgIHZhbF9zdGF0dXNfdCByZXMgPSBWQUxfU1RBVFVTX0VSUk9SOworICAgIHBzYV9zaWduYWxfdCBzaWduYWxzOworCit3YWl0OgorICAgIHNpZ25hbHMgPSBwc2Ffd2FpdChQU0FfV0FJVF9BTlksIFBTQV9CTE9DSyk7CisgICAgaWYgKHNpZ25hbHMgJiBzaWcpCisgICAgeworICAgICAgICBpZiAocHNhX2dldChzaWcsIG1zZykgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdvdG8gd2FpdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgobXNnLT50eXBlICE9IFBTQV9JUENfQ0FMTCkgfHwgKG1zZy0+aGFuZGxlIDw9IDApKQorICAgICAgICB7CisgICAgICAgICAgICB2YWxfcHJpbnRfc2YoIlx0cHNhX2dldCBmYWlsZWQgZm9yIFBTQV9JUENfQ0FMTFxuIiwgMCk7CisgICAgICAgICAgICByZXMgPSBWQUxfU1RBVFVTX0VSUk9SOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmVzID0gVkFMX1NUQVRVU19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHZhbF9wcmludF9zZigiXHRwc2Ffd2FpdCByZXR1cm5lZCB3aXRoIGludmFsaWQgc2lnbmFsIHZhbHVlID0gMHgleFxuIiwgc2lnbmFscyk7CisgICAgICAgIHJlcyA9IFZBTF9TVEFUVVNfRVJST1I7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQgZHJpdmVyX3Rlc3RfaXNvbGF0aW9uX3BzYV9yb3RfZGF0YV9yZChwc2FfbXNnX3QgKm1zZykKK3sKKyAgICAvKiBTZW5kIFBTQSBSb1QgZGF0YSBhZGRyZXNzIC0gZ2xvYmFsIHZhcmlhYmxlICovCisgICAgcHNhX3dyaXRlKG1zZy0+aGFuZGxlLCAwLCAodm9pZCAqKSAmZ19wc2Ffcm90X2RhdGEsIHNpemVvZihhZGRyX3QpKTsKKyAgICBwc2FfcmVwbHkobXNnLT5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKK30KKwordm9pZCBkcml2ZXJfdGVzdF9pc29sYXRpb25fcHNhX3JvdF9kYXRhX3dyKHBzYV9tc2dfdCAqbXNnKQoreworICAgIC8qIFNlbmQgUFNBIFJvVCBkYXRhIGFkZHJlc3MgLSBnbG9iYWwgdmFyaWFibGUgKi8KKyAgICBwc2Ffd3JpdGUobXNnLT5oYW5kbGUsIDAsICh2b2lkICopICZnX3BzYV9yb3RfZGF0YSwgc2l6ZW9mKGFkZHJfdCkpOworCisgICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCisgICAgaWYgKHZhbF9kcml2ZXJfcHJpdmF0ZV9zZXRfYm9vdF9mbGFnX2ZuKEJPT1RfRVhQRUNURURfUykpCisgICAgeworICAgICAgIHZhbF9wcmludF9zZigiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOworICAgICAgIHBzYV9yZXBseShtc2ctPmhhbmRsZSwgLTIpOworICAgIH0KKyAgICBwc2FfcmVwbHkobXNnLT5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKworICAgIC8qIFByb2Nlc3Mgc2Vjb25kIGNhbGwgcmVxdWVzdCAqLworICAgIGlmIChWQUxfRVJST1IocHJvY2Vzc19jYWxsX3JlcXVlc3QoRFJJVkVSX1RFU1RfU0lHLCBtc2cpKSkKKyAgICB7CisgICAgICAgIHBzYV9yZXBseShtc2ctPmhhbmRsZSwgLTIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCisgICAgaWYgKHZhbF9kcml2ZXJfcHJpdmF0ZV9zZXRfYm9vdF9mbGFnX2ZuKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCisgICAgeworICAgICAgICB2YWxfcHJpbnRfc2YoIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgICAgICBwc2FfcmVwbHkobXNnLT5oYW5kbGUsIC0yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIFJlYWNoZWQgaGVyZSBtZWFucyB0aGVyZSBjb3VsZCBiZSB3cml0ZSBzdWNjZWVkIG9yIGlnbm9yZWQgKi8KKyAgICBpZiAoZ19wc2Ffcm90X2RhdGEgPT0gREFUQV9WQUxVRSkKKyAgICB7CisgICAgICAgIHBzYV9yZXBseShtc2ctPmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB2YWxfcHJpbnRfc2YoIlx0RXhwZWN0ZWQgd3JpdGUgdG8gZmF1bHQgYnV0IGl0IGRpZG4ndFxuIiwgMCk7CisgICAgICAgIHBzYV9yZXBseShtc2ctPmhhbmRsZSwgLTIpOworICAgIH0KK30KKwordm9pZCBkcml2ZXJfdGVzdF9pc29sYXRpb25fcHNhX3JvdF9zdGFja19yZChwc2FfbXNnX3QgKm1zZykKK3sKKyAgICB1aW50MzJfdCBsX3BzYV9yb3RfZGF0YSA9IERBVEFfVkFMVUU7CisKKyAgICAvKiBTZW5kIFBTQSBSb1Qgc3RhY2sgYWRkcmVzcyAtIGxvY2FsIHZhcmlhYmxlICovCisgICAgcHNhX3dyaXRlKG1zZy0+aGFuZGxlLCAwLCAodm9pZCAqKSAmbF9wc2Ffcm90X2RhdGEsIHNpemVvZihhZGRyX3QpKTsKKyAgICBwc2FfcmVwbHkobXNnLT5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKworICAgIC8qIER1bW15IHByaW50IHRvIGF2b2lkIGNvbXBpbGVyIG9wdGltaXNhdGlvbiBvbiBsb2NhbCB2YXJpYWJsZSAqLworICAgIHZhbF9wcmludF9zZigiXHRsX3BzYV9yb3RfZGF0YSB2YWx1ZSAweCV4XG4iLCBsX3BzYV9yb3RfZGF0YSk7Cit9CisKK3ZvaWQgZHJpdmVyX3Rlc3RfaXNvbGF0aW9uX3BzYV9yb3Rfc3RhY2tfd3IocHNhX21zZ190ICptc2cpCit7CisgICAgdWludDMyX3QgbF9wc2Ffcm90X2RhdGEgPSBEQVRBX1ZBTFVFOworCisgICAgLyogU2VuZCBQU0EgUm9UIHN0YWNrIGFkZHJlc3MgLSBsb2NhbCB2YXJpYWJsZSAqLworICAgIHBzYV93cml0ZShtc2ctPmhhbmRsZSwgMCwgKHZvaWQgKikgJmxfcHNhX3JvdF9kYXRhLCBzaXplb2YoYWRkcl90KSk7CisKKyAgICAvKiBTZXR0aW5nIGJvb3Quc3RhdGUgYmVmb3JlIHRlc3QgY2hlY2sgKi8KKyAgICBpZiAodmFsX2RyaXZlcl9wcml2YXRlX3NldF9ib290X2ZsYWdfZm4oQk9PVF9FWFBFQ1RFRF9TKSkKKyAgICB7CisgICAgICAgdmFsX3ByaW50X3NmKCJcdEZhaWxlZCB0byBzZXQgYm9vdCBmbGFnIGJlZm9yZSBjaGVja1xuIiwgMCk7CisgICAgICAgcHNhX3JlcGx5KG1zZy0+aGFuZGxlLCAtMik7CisgICAgfQorICAgIHBzYV9yZXBseShtc2ctPmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworCisgICAgLyogUHJvY2VzcyBzZWNvbmQgY2FsbCByZXF1ZXN0ICovCisgICAgaWYgKFZBTF9FUlJPUihwcm9jZXNzX2NhbGxfcmVxdWVzdChEUklWRVJfVEVTVF9TSUcsIG1zZykpKQorICAgIHsKKyAgICAgICAgcHNhX3JlcGx5KG1zZy0+aGFuZGxlLCAtMik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBSZXNldHRpbmcgYm9vdC5zdGF0ZSB0byBjYXRjaCB1bndhbnRlZCByZWJvb3QgKi8KKyAgICBpZiAodmFsX2RyaXZlcl9wcml2YXRlX3NldF9ib290X2ZsYWdfZm4oQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEKSkKKyAgICB7CisgICAgICAgIHZhbF9wcmludF9zZigiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBhZnRlciBjaGVja1xuIiwgMCk7CisgICAgICAgIHBzYV9yZXBseShtc2ctPmhhbmRsZSwgLTIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogUmVhY2hlZCBoZXJlIG1lYW5zIHRoZXJlIGNvdWxkIGJlIHdyaXRlIHN1Y2NlZWQgb3IgaWdub3JlZCAqLworICAgIGlmIChsX3BzYV9yb3RfZGF0YSA9PSBEQVRBX1ZBTFVFKQorICAgIHsKKyAgICAgICAgcHNhX3JlcGx5KG1zZy0+aGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHZhbF9wcmludF9zZigiXHRFeHBlY3RlZCB3cml0ZSB0byBmYXVsdCBidXQgaXQgZGlkbid0XG4iLCAwKTsKKyAgICAgICAgcHNhX3JlcGx5KG1zZy0+aGFuZGxlLCAtMik7CisgICAgfQorfQorCit2b2lkIGRyaXZlcl90ZXN0X2lzb2xhdGlvbl9wc2Ffcm90X2hlYXBfcmQocHNhX21zZ190ICptc2cpCit7CisjaWYgKFNQX0hFQVBfTUVNX1NVUFAgPT0gMSkKKyAgICB1aW50OF90ICAgICAgICAgKmJ1ZmZlcjsKKworICAgIGJ1ZmZlciA9ICh1aW50OF90ICopbWFsbG9jKHNpemVvZih1aW50OF90KSAqIEJVRkZFUl9TSVpFKTsKKyAgICBtZW1zZXQoKHVpbnQ4X3QgKilidWZmZXIsICh1aW50OF90KURBVEFfVkFMVUUsIEJVRkZFUl9TSVpFKTsKKworICAgIC8qIFNlbmQgUFNBIFJvVCBoZWFwIGFkZHJlc3MgKi8KKyAgICBwc2Ffd3JpdGUobXNnLT5oYW5kbGUsIDAsICh2b2lkICopIGJ1ZmZlciwgQlVGRkVSX1NJWkUpOworICAgIHBzYV9yZXBseShtc2ctPmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworICAgIGZyZWUoYnVmZmVyKTsKKyNlbmRpZgorfQorCit2b2lkIGRyaXZlcl90ZXN0X2lzb2xhdGlvbl9wc2Ffcm90X2hlYXBfd3IocHNhX21zZ190ICptc2cpCit7CisjaWYgKFNQX0hFQVBfTUVNX1NVUFAgPT0gMSkKKyAgICB1aW50OF90ICAgICAgICAgKmJ1ZmZlcjsKKworICAgIGJ1ZmZlciA9ICh1aW50OF90ICopbWFsbG9jKHNpemVvZih1aW50OF90KSAqIEJVRkZFUl9TSVpFKTsKKyAgICBtZW1zZXQoKHVpbnQ4X3QgKilidWZmZXIsICh1aW50OF90KURBVEFfVkFMVUUsIEJVRkZFUl9TSVpFKTsKKworICAgIC8qIFNlbmQgUFNBIFJvVCBoZWFwIGFkZHJlc3MgKi8KKyAgICBwc2Ffd3JpdGUobXNnLT5oYW5kbGUsIDAsICh2b2lkICopIGJ1ZmZlciwgQlVGRkVSX1NJWkUpOworICAgIHBzYV9yZXBseShtc2ctPmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworCisgICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCisgICAgaWYgKHZhbF9kcml2ZXJfcHJpdmF0ZV9zZXRfYm9vdF9mbGFnX2ZuKEJPT1RfRVhQRUNURURfUykpCisgICAgeworICAgICAgIHZhbF9wcmludF9zZigiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOworICAgICAgIHBzYV9yZXBseShtc2ctPmhhbmRsZSwgLTIpOworICAgIH0KKworICAgIC8qIFByb2Nlc3Mgc2Vjb25kIGNhbGwgcmVxdWVzdCAqLworICAgIGlmIChWQUxfRVJST1IocHJvY2Vzc19jYWxsX3JlcXVlc3QoRFJJVkVSX1RFU1RfU0lHLCBtc2cpKSkKKyAgICB7CisgICAgICAgIHBzYV9yZXBseShtc2ctPmhhbmRsZSwgLTIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCisgICAgaWYgKHZhbF9kcml2ZXJfcHJpdmF0ZV9zZXRfYm9vdF9mbGFnX2ZuKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCisgICAgeworICAgICAgICB2YWxfcHJpbnRfc2YoIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgICAgICBwc2FfcmVwbHkobXNnLT5oYW5kbGUsIC0yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIFJlYWNoZWQgaGVyZSBtZWFucyB0aGVyZSBjb3VsZCBiZSB3cml0ZSBzdWNjZWVkIG9yIGlnbm9yZWQgKi8KKyAgICBpZiAoYnVmZmVyWzBdID09ICh1aW50OF90KURBVEFfVkFMVUUpCisgICAgeworICAgICAgICBwc2FfcmVwbHkobXNnLT5oYW5kbGUsIFBTQV9TVUNDRVNTKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdmFsX3ByaW50X3NmKCJcdEV4cGVjdGVkIHdyaXRlIHRvIGZhdWx0IGJ1dCBpdCBkaWRuJ3RcbiIsIDApOworICAgICAgICBwc2FfcmVwbHkobXNnLT5oYW5kbGUsIC0yKTsKKyAgICB9CisgICAgZnJlZShidWZmZXIpOworI2VuZGlmCit9CisKK3ZvaWQgZHJpdmVyX3Rlc3RfaXNvbGF0aW9uX3BzYV9yb3RfbW1pb19yZChwc2FfbXNnX3QgKm1zZykKK3sKKyAgICBhZGRyX3QgcHNhX3JvdF9tbWlvX2FkZHI7CisKKyAgICBpZiAoVkFMX0VSUk9SKHZhbF9nZXRfZHJpdmVyX21taW9fYWRkcigmcHNhX3JvdF9tbWlvX2FkZHIpKSkKKyAgICB7CisgICAgICAgIHBzYV9yZXBseShtc2ctPmhhbmRsZSwgLTIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogU2VuZCBQU0EgUm9UIG1taW8gYWRkcmVzcyAqLworICAgIG1lbXNldCgodWludDhfdCAqKSZwc2Ffcm90X21taW9fYWRkciwgKHVpbnQ4X3QpREFUQV9WQUxVRSwgc2l6ZW9mKGFkZHJfdCkpOworICAgIHBzYV93cml0ZShtc2ctPmhhbmRsZSwgMCwgKHZvaWQgKikgJnBzYV9yb3RfbW1pb19hZGRyLCBzaXplb2YoYWRkcl90KSk7CisgICAgcHNhX3JlcGx5KG1zZy0+aGFuZGxlLCBQU0FfU1VDQ0VTUyk7Cit9CisKK3ZvaWQgZHJpdmVyX3Rlc3RfaXNvbGF0aW9uX3BzYV9yb3RfbW1pb193cihwc2FfbXNnX3QgKm1zZykKK3sKKyAgICBhZGRyX3QgcHNhX3JvdF9tbWlvX2FkZHI7CisKKyAgICBpZiAoVkFMX0VSUk9SKHZhbF9nZXRfZHJpdmVyX21taW9fYWRkcigmcHNhX3JvdF9tbWlvX2FkZHIpKSkKKyAgICB7CisgICAgICAgIHBzYV9yZXBseShtc2ctPmhhbmRsZSwgLTIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogU2VuZCBQU0EgUm9UIG1taW8gYWRkcmVzcyAqLworICAgIG1lbXNldCgodWludDhfdCAqKSZwc2Ffcm90X21taW9fYWRkciwgKHVpbnQ4X3QpREFUQV9WQUxVRSwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgcHNhX3dyaXRlKG1zZy0+aGFuZGxlLCAwLCAodm9pZCAqKSAmcHNhX3JvdF9tbWlvX2FkZHIsIHNpemVvZih1aW50MzJfdCkpOworICAgIHBzYV9yZXBseShtc2ctPmhhbmRsZSwgUFNBX1NVQ0NFU1MpOworCisgICAgLyogU2V0dGluZyBib290LnN0YXRlIGJlZm9yZSB0ZXN0IGNoZWNrICovCisgICAgaWYgKHZhbF9kcml2ZXJfcHJpdmF0ZV9zZXRfYm9vdF9mbGFnX2ZuKEJPT1RfRVhQRUNURURfUykpCisgICAgeworICAgICAgIHZhbF9wcmludF9zZigiXHRGYWlsZWQgdG8gc2V0IGJvb3QgZmxhZyBiZWZvcmUgY2hlY2tcbiIsIDApOworICAgICAgIHBzYV9yZXBseShtc2ctPmhhbmRsZSwgLTIpOworICAgIH0KKworICAgIC8qIFByb2Nlc3Mgc2Vjb25kIGNhbGwgcmVxdWVzdCAqLworICAgIGlmIChWQUxfRVJST1IocHJvY2Vzc19jYWxsX3JlcXVlc3QoRFJJVkVSX1RFU1RfU0lHLCBtc2cpKSkKKyAgICB7CisgICAgICAgIHBzYV9yZXBseShtc2ctPmhhbmRsZSwgLTIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogUmVzZXR0aW5nIGJvb3Quc3RhdGUgdG8gY2F0Y2ggdW53YW50ZWQgcmVib290ICovCisgICAgaWYgKHZhbF9kcml2ZXJfcHJpdmF0ZV9zZXRfYm9vdF9mbGFnX2ZuKEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCkpCisgICAgeworICAgICAgICB2YWxfcHJpbnRfc2YoIlx0RmFpbGVkIHRvIHNldCBib290IGZsYWcgYWZ0ZXIgY2hlY2tcbiIsIDApOworICAgICAgICBwc2FfcmVwbHkobXNnLT5oYW5kbGUsIC0yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIFJlYWNoZWQgaGVyZSBtZWFucyB0aGVyZSBjb3VsZCBiZSB3cml0ZSBzdWNjZWVkIG9yIGlnbm9yZWQgKi8KKyAgICBpZiAoKih1aW50MzJfdCAqKXBzYV9yb3RfbW1pb19hZGRyID09ICh1aW50MzJfdClEQVRBX1ZBTFVFKQorICAgIHsKKyAgICAgICAgcHNhX3JlcGx5KG1zZy0+aGFuZGxlLCBQU0FfU1VDQ0VTUyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHZhbF9wcmludF9zZigiXHRFeHBlY3RlZCB3cml0ZSB0byBmYXVsdCBidXQgaXQgZGlkbid0XG4iLCAwKTsKKyAgICAgICAgcHNhX3JlcGx5KG1zZy0+aGFuZGxlLCAtMik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL3BhcnRpdGlvbi9pcGMvY2xpZW50X3BhcnRpdGlvbi5jIGIvYXBpLXRlc3RzL2ZmL3BhcnRpdGlvbi9pcGMvY2xpZW50X3BhcnRpdGlvbi5jCmluZGV4IDc5NGY2ZDIuLjdiZTVhNmMgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9wYXJ0aXRpb24vaXBjL2NsaWVudF9wYXJ0aXRpb24uYworKysgYi9hcGktdGVzdHMvZmYvcGFydGl0aW9uL2lwYy9jbGllbnRfcGFydGl0aW9uLmMKQEAgLTI1LDYgKzI1LDcgQEAKICAgICBwc2Ffc2lnbmFsX3QgICAgc2lnbmFscyA9IDA7CiAgICAgdmFsX3N0YXR1c190ICAgIHN0YXR1cywgdGVzdF9zdGF0dXM7CiAgICAgcHNhX21zZ190ICAgICAgIG1zZyA9IHswfTsKKyAgICB0ZXN0X2luZm9fdCAgICAgdGVzdF9pbmZvOwogCiAgICAgd2hpbGUgKDEpCiAgICAgewpAQCAtNDAsNyArNDEsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiAodGVzdF9kYXRhICE9IDApCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIm11c3QgY2xlYXIgcHJldmlvdXMgZGlzcGF0Y2hlciBjb25uZWN0aW9uXG4iLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHsKQEAgLTU2LDcgKzU3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAKQEAgLTY2LDggKzY3LDEwIEBACiAKICAgICAgICAgICAgICAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9JTkZPLCAiSW4gY2xpZW50IHBhcnQsIHRlc3QtaWQgJWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0VUX1RFU1RfTlVNKHRlc3RfZGF0YSkpOworICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9pbmZvLnRlc3RfbnVtID0gR0VUX1RFU1RfTlVNKHRlc3RfZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2luZm8uYmxvY2tfbnVtID0gR0VUX0JMT0NLX05VTSh0ZXN0X2RhdGEpOwogICAgICAgICAgICAgICAgICAgICAgICAgLyogRXhlY3V0ZSBjbGllbnQgdGVzdCBmdW5jIGZyb20gc2VjdXJlKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3RhdHVzID0gdmFsX2V4ZWN1dGVfc2VjdXJlX3Rlc3RzKEdFVF9URVNUX05VTSh0ZXN0X2RhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zdGF0dXMgPSB2YWxfZXhlY3V0ZV9zZWN1cmVfdGVzdHModGVzdF9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfaXBjX3Rlc3RfbGlzdFtHRVRfVEVTVF9OVU0odGVzdF9kYXRhKV0pOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEdFVF9BQ1RJT05fTlVNKHRlc3RfZGF0YSkgPT0gVEVTVF9SRVRVUk5fUkVTVUxUKQpAQCAtNzcsNyArODAsNyBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9DT05ORUNUSU9OX1JFRlVTRUQpOworICAgICAgICAgICAgICAgICAgICAgICAgcHNhX3JlcGx5KG1zZy5oYW5kbGUsIFBTQV9FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgUFNBX0lQQ19ESVNDT05ORUNUOgpAQCAtOTQsNyArOTcsNyBAQAogICAgICAgICAvKiBTZXJ2ZXJfcGFydGl0aW9uIHJlcXVlc3RzIGNsaWVudCB0byBjb25uZWN0IHRvIFNFUlZFUl9TRUNVUkVfQ09OTkVDVF9PTkxZX1NJRCAqLwogICAgICAgICBlbHNlIGlmIChzaWduYWxzICYgUFNBX0RPT1JCRUxMKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocHNhX2Nvbm5lY3QoU0VSVkVSX1NFQ1VSRV9DT05ORUNUX09OTFlfU0lELCAyKSAhPSBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKQorICAgICAgICAgICAgaWYgKHBzYV9jb25uZWN0KFNFUlZFUl9TRUNVUkVfQ09OTkVDVF9PTkxZX1NJRCwgMikgIT0gUFNBX0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgInBzYV9jb25uZWN0IGZhaWxlZCBcbiIsIDApOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL2ZmL3BhcnRpdGlvbi9pcGMvc2VydmVyX3BhcnRpdGlvbi5jIGIvYXBpLXRlc3RzL2ZmL3BhcnRpdGlvbi9pcGMvc2VydmVyX3BhcnRpdGlvbi5jCmluZGV4IDM1YzA2NDEuLmRlMGU3YTQgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9mZi9wYXJ0aXRpb24vaXBjL3NlcnZlcl9wYXJ0aXRpb24uYworKysgYi9hcGktdGVzdHMvZmYvcGFydGl0aW9uL2lwYy9zZXJ2ZXJfcGFydGl0aW9uLmMKQEAgLTE3LDYgKzE3LDkgQEAKIAogI2luY2x1ZGUgInNlcnZlcl9wYXJ0aXRpb24uaCIKIAordmFsX2FwaV90ICp2YWxfc2VydmVyX3NwID0gJnZhbF9hcGk7Citwc2FfYXBpX3QgKnBzYV9zZXJ2ZXJfc3AgPSAmcHNhX2FwaTsKKwogdm9pZCBzZXJ2ZXJfbWFpbih2b2lkKQogewogICAgIHVpbnQzMl90ICAgICAgICB0ZXN0X2RhdGEgPSAwOwpAQCAtNDAsNyArNDMsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiAodGVzdF9kYXRhICE9IDApCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIm11c3QgY2xlYXIgcHJldmlvdXMgZGlzcGF0Y2hlciBjb25uZWN0aW9uXG4iLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHsKQEAgLTU2LDcgKzU5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAKQEAgLTgwLDcgKzgzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfQ09OTkVDVElPTl9SRUZVU0VEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9yZXBseShtc2cuaGFuZGxlLCBQU0FfRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFBTQV9JUENfRElTQ09OTkVDVDoKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS9kcml2ZXJzL252bWVtL3BhbF9udm1lbS5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL2RyaXZlcnMvbnZtZW0vcGFsX252bWVtLmMKaW5kZXggNjVhOTQ0Mi4uNTAyZDcwMSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL2RyaXZlcnMvbnZtZW0vcGFsX252bWVtLmMKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL2RyaXZlcnMvbnZtZW0vcGFsX252bWVtLmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS9kcml2ZXJzL252bWVtL3BhbF9udm1lbS5oIGIvYXBpLXRlc3RzL3BsYXRmb3JtL2RyaXZlcnMvbnZtZW0vcGFsX252bWVtLmgKaW5kZXggNWE2ZjdiZS4uMTE0NDMwNCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL2RyaXZlcnMvbnZtZW0vcGFsX252bWVtLmgKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL2RyaXZlcnMvbnZtZW0vcGFsX252bWVtLmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS9kcml2ZXJzL3VhcnQvY21zZGsvcGFsX3VhcnQuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS9kcml2ZXJzL3VhcnQvY21zZGsvcGFsX3VhcnQuYwppbmRleCA1Y2NjNWZjLi5lNTVhNDExIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vZHJpdmVycy91YXJ0L2Ntc2RrL3BhbF91YXJ0LmMKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL2RyaXZlcnMvdWFydC9jbXNkay9wYWxfdWFydC5jCkBAIC02NSwxMCArNjUsMTAgQEAKICAgICBAcGFyYW0gICAgLSBzdHIgICAgICA6IElucHV0IFN0cmluZwogICAgICAgICAgICAgICAtIGRhdGEgICAgIDogVmFsdWUgZm9yIGZvcm1hdCBzcGVjaWZpZXIKICoqLwotdm9pZCBwYWxfY21zZGtfcHJpbnQoY2hhciAqc3RyLCB1aW50MzJfdCBkYXRhKQordm9pZCBwYWxfY21zZGtfcHJpbnQoY2hhciAqc3RyLCBpbnQzMl90IGRhdGEpCiB7Ci0gICAgdWludDhfdCBqLCBidWZmZXJbMTZdOwotICAgIGludDhfdCAgaSA9IDA7CisgICAgaW50OF90ICBqLCBidWZmZXJbMTZdOworICAgIGludDhfdCAgaSA9IDAsIGlzX25lZyA9IDA7CiAKICAgICBmb3IgKDsgKnN0ciAhPSAnXDAnOyArK3N0cikKICAgICB7CkBAIC03Nyw2ICs3NywxMiBAQAogICAgICAgICAgICAgKytzdHI7CiAgICAgICAgICAgICBpZiAoKnN0ciA9PSAnZCcpCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGRhdGEgPCAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IC0oZGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGlzX25lZyA9IDE7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgd2hpbGUgKGRhdGEgIT0gMCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGogICAgICAgICA9IGRhdGEgJSAxMDsKQEAgLTg0LDYgKzkwLDkgQEAKICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gaiArIDQ4OwogICAgICAgICAgICAgICAgICAgICBpICAgICAgICArPSAxOwogICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChpc19uZWcpCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpKytdID0gJy0nOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoKnN0ciA9PSAneCcgfHwgKnN0ciA9PSAnWCcpCiAgICAgICAgICAgICB7CkBAIC0xMTIsMyArMTIxLDM5IEBACiAgICAgICAgIH0KICAgICB9CiB9CisKKy8qKgorICAgIEBicmllZiAgICAtIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGZvciBUWCBpbnRlcnJ1cHQgdHJpZ2dlcmVkIG9yIG5vdAorKiovCitzdGF0aWMgaW50IHBhbF91YXJ0X2Ntc2RrX2lzX3R4X2lycV90cmlnZ2VyZCh2b2lkKQoreworICAgIHJldHVybiAoKCh1YXJ0X3QgKikgZ191YXJ0KS0+SU5UU1RBVFVTICYgQ01TREtfVUFSVF9JTlRTVEFUVVNfVFhJUlFfTXNrKTsKK30KKworLyoqCisgICAgQGJyaWVmICAgIC0gVGhpcyBmdW5jdGlvbiB0cmlnZ2VycyB0aGUgVUFSVCBUWCBpbnRlcnJ1cHQKKyoqLwordm9pZCBwYWxfdWFydF9jbXNka19nZW5lcmF0ZV9pcnEodm9pZCkKK3sKKyAgICAvKiBFbmFibGUgVFggaW50ZXJydXB0ICovCisgICAgKCh1YXJ0X3QgKikgZ191YXJ0KS0+Q1RSTCB8PSBDTVNES19VQVJUX0NUUkxfVFhJUlFFTl9Nc2s7CisKKyAgICAvKiBGaWxsIHRoZSBUWCBidWZmZXIgdG8gZ2VuZXJhdGUgVFggSVJRICovCisgICAgcGFsX3VhcnRfY21zZGtfcHV0YygnICcpOworICAgIHBhbF91YXJ0X2Ntc2RrX3B1dGMoJyAnKTsKKworICAgIC8qIExvb3AgdW50aWwgVFggaW50ZXJydXB0IHRyaWdnZXIgKi8KKyAgICB3aGlsZSAoIXBhbF91YXJ0X2Ntc2RrX2lzX3R4X2lycV90cmlnZ2VyZCgpKTsKK30KKworLyoqCisgICAgQGJyaWVmICAgIC0gVGhpcyBmdW5jdGlvbiBkaXNhYmxlIHRoZSBVQVJUIFRYIGludGVycnVwdAorKiovCit2b2lkIHBhbF91YXJ0X2Ntc2RrX2Rpc2FibGVfaXJxKHZvaWQpCit7CisgICAgLyogQ2xlYXIgVFggaW50ZXJydXB0ICovCisgICAgKCh1YXJ0X3QgKikgZ191YXJ0KS0+SU5UQ0xFQVIgfD0gQ01TREtfVUFSVF9JTlRDTEVBUl9UWElSUV9Nc2s7CisKKyAgICAvKiBEaXNhYmxlIFRYIGludGVycnVwdCAqLworICAgICgodWFydF90ICopIGdfdWFydCktPkNUUkwgJj0gfkNNU0RLX1VBUlRfQ1RSTF9UWElSUUVOX01zazsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS9kcml2ZXJzL3VhcnQvY21zZGsvcGFsX3VhcnQuaCBiL2FwaS10ZXN0cy9wbGF0Zm9ybS9kcml2ZXJzL3VhcnQvY21zZGsvcGFsX3VhcnQuaAppbmRleCA3ZTgyZDQxLi40NDI1MzZmIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vZHJpdmVycy91YXJ0L2Ntc2RrL3BhbF91YXJ0LmgKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL2RyaXZlcnMvdWFydC9jbXNkay9wYWxfdWFydC5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0yNyw2ICsyNywxNSBAQAogLyogQ01TREtfVUFSVCBDVFJMIFJlZ2lzdGVyIERlZmluaXRpb25zICovCiAjZGVmaW5lIENNU0RLX1VBUlRfQ1RSTF9UWEVOX1BvcyAgICAgICAgICAwICAgICAgIC8qIENNU0RLX1VBUlQgQ1RSTDogVFhFTiBQb3NpdGlvbiAqLwogI2RlZmluZSBDTVNES19VQVJUX0NUUkxfVFhFTl9Nc2sgICAgICAgICAoMHgwMVVMKSAvKiBDTVNES19VQVJUIENUUkw6IFRYRU4gTWFzayAqLworI2RlZmluZSBDTVNES19VQVJUX0NUUkxfVFhJUlFFTl9Qb3MgICAgICAgMiAgLyogQ01TREtfVUFSVCBDVFJMOiBUWElSUUVOIFBvc2l0aW9uICovCisjZGVmaW5lIENNU0RLX1VBUlRfQ1RSTF9UWElSUUVOX01zayAgICAgICAoMHgwMXVsIDw8IENNU0RLX1VBUlRfQ1RSTF9UWElSUUVOX1BvcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ01TREtfVUFSVCBDVFJMOiBUWElSUUVOIE1hc2sgKi8KKyNkZWZpbmUgQ01TREtfVUFSVF9JTlRDTEVBUl9UWElSUV9Qb3MgIDAgICAvKiBDTVNES19VQVJUIENMRUFSOiBUWElSUSBQb3NpdGlvbiAqLworI2RlZmluZSBDTVNES19VQVJUX0lOVENMRUFSX1RYSVJRX01zayAgICAgICAoMHgwMXVsIDw8IENNU0RLX1VBUlRfSU5UQ0xFQVJfVFhJUlFfUG9zKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDTVNES19VQVJUIENMRUFSOiBUWElSUSBNYXNrICovCisjZGVmaW5lIENNU0RLX1VBUlRfSU5UU1RBVFVTX1RYSVJRX1BvcyAgMCAgIC8qIENNU0RLX1VBUlQgU1RBVFVTOiBUWElSUSBQb3NpdGlvbiAqLworI2RlZmluZSBDTVNES19VQVJUX0lOVFNUQVRVU19UWElSUV9Nc2sgICAgICAgKDB4MDF1bCA8PCBDTVNES19VQVJUX0lOVFNUQVRVU19UWElSUV9Qb3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENNU0RLX1VBUlQgU1RBVFVTOiBUWElSUSBNYXNrICovCiAKIC8qIHR5cGVkZWYncyAqLwogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtNDMsNiArNTIsOCBAQAogCiAvKiBmdW5jdGlvbiBwcm90b3R5cGVzICovCiB2b2lkIHBhbF91YXJ0X2Ntc2RrX2luaXQodWludDMyX3QgdWFydF9iYXNlX2FkZHIpOwotdm9pZCBwYWxfY21zZGtfcHJpbnQoY2hhciAqc3RyLCB1aW50MzJfdCBkYXRhKTsKK3ZvaWQgcGFsX2Ntc2RrX3ByaW50KGNoYXIgKnN0ciwgaW50MzJfdCBkYXRhKTsKK3ZvaWQgcGFsX3VhcnRfY21zZGtfZ2VuZXJhdGVfaXJxKHZvaWQpOwordm9pZCBwYWxfdWFydF9jbXNka19kaXNhYmxlX2lycSh2b2lkKTsKIAogI2VuZGlmIC8qIF9QQUxfVUFSVF9DTVNES19IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL2RyaXZlcnMvdWFydC9wbDAxMS9wYWxfdWFydC5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL2RyaXZlcnMvdWFydC9wbDAxMS9wYWxfdWFydC5jCmluZGV4IGI2YmExYmQuLjlhMTA5NWIgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS9kcml2ZXJzL3VhcnQvcGwwMTEvcGFsX3VhcnQuYworKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vZHJpdmVycy91YXJ0L3BsMDExL3BhbF91YXJ0LmMKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTE3LDcgKzE3LDcgQEAKIAogI2luY2x1ZGUgInBhbF91YXJ0LmgiCiAKLXZvbGF0aWxlIHVpbnQzMl90IHVhcnQ7Cit2b2xhdGlsZSB1aW50MzJfdCBnX3VhcnQ7CiAKIC8qKgogICAgIEBicmllZiAgICAtIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIFVBUlQKQEAgLTI1LDcgKzI1LDcgQEAKICoqLwogdm9pZCBwYWxfdWFydF9wbDAxMV9pbml0KHVpbnQzMl90IHVhcnRfYmFzZV9hZGRyKQogewotICAgIHVhcnQgPSB1YXJ0X2Jhc2VfYWRkcjsKKyAgICBnX3VhcnQgPSB1YXJ0X2Jhc2VfYWRkcjsKIH0KIAogLyoqCkBAIC0zMywxMSArMzMsMTEgQEAKICoqLwogc3RhdGljIGludCBwYWxfdWFydF9pc190eF9lbXB0eSh2b2lkKQogewotICAgIGlmICgoKCh1YXJ0X2d0ICopdWFydCktPnVhcnRjciAmIFVBUlRfUEwwMTFfVUFUUkNSX0VOX01BU0spICYmCisgICAgaWYgKCgoKHVhcnRfdCAqKWdfdWFydCktPnVhcnRjciAmIFVBUlRfUEwwMTFfVUFUUkNSX0VOX01BU0spICYmCiAgICAgICAgIC8qIFVBUlQgaXMgZW5hYmxlZCAqLwotICAgICAgICAoKCh1YXJ0X2d0ICopdWFydCktPnVhcnRjciAmIFVBUlRfUEwwMTFfVUFSVENSX1RYX0VOX01BU0spICYmCisgICAgICAgICgoKHVhcnRfdCAqKWdfdWFydCktPnVhcnRjciAmIFVBUlRfUEwwMTFfVUFSVENSX1RYX0VOX01BU0spICYmCiAgICAgICAgIC8qIFRyYW5zbWl0IGlzIGVuYWJsZWQgKi8KLSAgICAgICAgKCgoKHVhcnRfZ3QgKil1YXJ0KS0+dWFydGZyICYgVUFSVF9QTDAxMV9VQVJURlJfVFhfRklGT19GVUxMKSA9PSAwKSkKKyAgICAgICAgKCgoKHVhcnRfdCAqKWdfdWFydCktPnVhcnRmciAmIFVBUlRfUEwwMTFfVUFSVEZSX1RYX0ZJRk9fRlVMTCkgPT0gMCkpCiAgICAgewogICAgICAgICByZXR1cm4gMTsKICAgICB9CkBAIC01MCw3ICs1MCw3IEBACiAvKioKICAgICBAYnJpZWYgICAgLSBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBmb3IgZW1wdHkgVFggRklGTyBhbmQgd3JpdGVzIHRvIEZJRk8gcmVnaXN0ZXIKICoqLwotc3RhdGljIHZvaWQgcGFsX3VhcnRfcHV0Yyh1aW50OF90IGMpCit2b2lkIHBhbF91YXJ0X3B1dGModWludDhfdCBjKQogewogICAgIGNvbnN0IHVpbnQ4X3QgcGRhdGEgPSAodWludDhfdCljOwogCkBAIC01OCw3ICs1OCw3IEBACiAgICAgd2hpbGUoIXBhbF91YXJ0X2lzX3R4X2VtcHR5KCkpOwogCiAgICAgLyogd3JpdGUgdGhlIGRhdGEgKHVwcGVyIDI0IGJpdHMgYXJlIHJlc2VydmVkKSAqLwotICAgICgodWFydF9ndCAqKXVhcnQpLT51YXJ0ZHIgPSBwZGF0YTsKKyAgICAoKHVhcnRfdCAqKWdfdWFydCktPnVhcnRkciA9IHBkYXRhOwogfQogCiAvKioKQEAgLTY2LDEwICs2NiwxMCBAQAogICAgIEBwYXJhbSAgICAtIHN0ciAgICAgIDogSW5wdXQgU3RyaW5nCiAgICAgICAgICAgICAgIC0gZGF0YSAgICAgOiBWYWx1ZSBmb3IgZm9ybWF0IHNwZWNpZmllcgogKiovCi12b2lkIHBhbF91YXJ0X3BsMDExX3ByaW50KGNoYXIgKnN0ciwgdWludDMyX3QgZGF0YSkKK3ZvaWQgcGFsX3VhcnRfcGwwMTFfcHJpbnQoY2hhciAqc3RyLCBpbnQzMl90IGRhdGEpCiB7CiAgICAgdWludDhfdCBqLCBidWZmZXJbMTZdOwotICAgIGludDhfdCAgaSA9IDA7CisgICAgaW50OF90ICBpID0gMCwgaXNfbmVnID0gMDsKIAogICAgIGZvciAoOyAqc3RyICE9ICdcMCc7ICsrc3RyKQogICAgIHsKQEAgLTc4LDYgKzc4LDEyIEBACiAgICAgICAgICAgICArK3N0cjsKICAgICAgICAgICAgIGlmICgqc3RyID09ICdkJykKICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZGF0YSA8IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkYXRhID0gLShkYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgaXNfbmVnID0gMTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICB3aGlsZSAoZGF0YSAhPSAwKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaiAgICAgICAgID0gZGF0YSAlIDEwOwpAQCAtODUsNiArOTEsOSBAQAogICAgICAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSBqICsgNDg7CiAgICAgICAgICAgICAgICAgICAgIGkgICAgICAgICs9IDE7CiAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGlzX25lZykKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2krK10gPSAnLSc7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmICgqc3RyID09ICd4JyB8fCAqc3RyID09ICdYJykKICAgICAgICAgICAgIHsKQEAgLTExOSwzICsxMjgsNDMgQEAKICAgICAgICAgfQogICAgIH0KIH0KKworLyoqCisgICAgQGJyaWVmICAgIC0gVGhpcyBmdW5jdGlvbiBjaGVja3MgZm9yIFRYIGludGVycnVwdCB0cmlnZ2VyZWQgb3Igbm90CisqKi8KK3N0YXRpYyBpbnQgcGFsX3VhcnRfcGwwMTFfaXNfdHhfaXJxX3RyaWdnZXJkKHZvaWQpCit7CisgICAgcmV0dXJuICgoKHVhcnRfdCAqKSBnX3VhcnQpLT51YXJ0cmlzICYgVUFSVF9QTDAxMV9UWF9JTlRSX01BU0spOworfQorCisvKioKKyAgICBAYnJpZWYgICAgLSBUaGlzIGZ1bmN0aW9uIHRyaWdnZXJzIHRoZSBVQVJUIFRYIGludGVycnVwdAorKiovCit2b2lkIHBhbF91YXJ0X3BsMDExX2dlbmVyYXRlX2lycSh2b2lkKQoreworICAgIHZvbGF0aWxlIGludCBieXRlY291bnQgPSAzMjsKKworICAgIC8qIEVuYWJsZSBUWCBpbnRlcnJ1cHQgKi8KKyAgICAoKHVhcnRfdCAqKSBnX3VhcnQpLT51YXJ0aW1zYyB8PSAodWludDMyX3QpKFVBUlRfUEwwMTFfVFhfSU5UUl9NQVNLKTsKKworICAgIC8qIEZpbGwgdGhlIFRYIGJ1ZmZlciB0byBnZW5lcmF0ZSBUWCBJUlEuIFRYIGJ1ZmZlciBpcyAxNng4IGJpdCB3aWRlICovCisgICAgZG8KKyAgICB7CisgICAgICAgIHBhbF91YXJ0X3B1dGMoJyAnKTsKKyAgICB9IHdoaWxlICgtLWJ5dGVjb3VudCk7CisKKyAgICAvKiBMb29wIHVudGlsIFRYIGludGVycnVwdCB0cmlnZ2VyICovCisgICAgd2hpbGUgKCFwYWxfdWFydF9wbDAxMV9pc190eF9pcnFfdHJpZ2dlcmQoKSk7Cit9CisKKy8qKgorICAgIEBicmllZiAgICAtIFRoaXMgZnVuY3Rpb24gZGlzYWJsZSB0aGUgVUFSVCBUWCBpbnRlcnJ1cHQKKyoqLwordm9pZCBwYWxfdWFydF9wbDAxMV9kaXNhYmxlX2lycSh2b2lkKQoreworICAgIC8qIENsZWFyIFRYIGludGVycnVwdCAqLworICAgICgodWFydF90ICopIGdfdWFydCktPnVhcnRpY3IgPSAodWludDMyX3QpKFVBUlRfUEwwMTFfVFhfSU5UUl9NQVNLKTsKKworICAgIC8qIERpc2FibGUgVFggaW50ZXJydXB0ICovCisgICAgKCh1YXJ0X3QgKikgZ191YXJ0KS0+dWFydGltc2MgJj0gKHVpbnQzMl90KSh+VUFSVF9QTDAxMV9UWF9JTlRSX01BU0spOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL2RyaXZlcnMvdWFydC9wbDAxMS9wYWxfdWFydC5oIGIvYXBpLXRlc3RzL3BsYXRmb3JtL2RyaXZlcnMvdWFydC9wbDAxMS9wYWxfdWFydC5oCmluZGV4IDA1NTMwMTMuLjNiOGVhOGEgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS9kcml2ZXJzL3VhcnQvcGwwMTEvcGFsX3VhcnQuaAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vZHJpdmVycy91YXJ0L3BsMDExL3BhbF91YXJ0LmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTM2LDcgKzM2LDEzIEBACiAgICAgdm9sYXRpbGUgdWludDMyX3QgdWFydGZicmQ7ICAgICAgICAvKiBPZmZzZXQ6IDB4MDI4IChSL1cpIEZyYWN0aW9uYWwgYmF1ZCByYXRlIHJlZ2lzdGVyICovCiAgICAgdm9sYXRpbGUgdWludDMyX3QgdWFydGxjcl9oOyAgICAgICAvKiBPZmZzZXQ6IDB4MDJDIChSL1cpIExpbmUgY29udHJvbCByZWdpc3RlciAqLwogICAgIHZvbGF0aWxlIHVpbnQzMl90IHVhcnRjcjsgICAgICAgICAgLyogT2Zmc2V0OiAweDAzMCAoUi9XKSBDb250cm9sIHJlZ2lzdGVyICovCi19IHVhcnRfZ3Q7CisgICAgdm9sYXRpbGUgdWludDMyX3QgdWFydGlmbHM7ICAgICAgICAvKiBPZmZzZXQ6IDB4MDM0IChSL1cpIEludGVycnVwdCBGSUZPIGxldmVsIHNlbGVjdCByZWcgKi8KKyAgICB2b2xhdGlsZSB1aW50MzJfdCB1YXJ0aW1zYzsgICAgICAgIC8qIE9mZnNldDogMHgwMzggKFIvVykgSW50ZXJydXB0IG1hc2sgc2V0L2NsZWFyIHJlZ2lzdGVyICovCisgICAgdm9sYXRpbGUgdWludDMyX3QgdWFydHJpczsgICAgICAgICAvKiBPZmZzZXQ6IDB4MDNDIChSLyApIFJhdyBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCisgICAgdm9sYXRpbGUgdWludDMyX3QgdWFydG1pczsgICAgICAgICAvKiBPZmZzZXQ6IDB4MDQwIChSLyApIE1hc2tlZCBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCisgICAgdm9sYXRpbGUgdWludDMyX3QgdWFydGljcjsgICAgICAgICAvKiBPZmZzZXQ6IDB4MDQ0ICggL1cpIEludGVycnVwdCBjbGVhciByZWdpc3RlciAqLworICAgIHZvbGF0aWxlIHVpbnQzMl90IHVhcnRkbWFjcjsgICAgICAgLyogT2Zmc2V0OiAweDA0OCAoUi9XKSBETUEgY29udHJvbCByZWdpc3RlciAqLworfSB1YXJ0X3Q7CiAKICNkZWZpbmUgVUFSVF9QTDAxMV9VQVJUQ1JfVUFSVEVOX09GRiAgICAgICAweDB1CiAjZGVmaW5lIFVBUlRfUEwwMTFfVUFSVENSX1RYRV9PRkYgICAgICAgICAgMHg4dQpAQCAtNDYsOCArNTIsMTUgQEAKICNkZWZpbmUgVUFSVF9QTDAxMV9VQVJUQ1JfVFhfRU5fTUFTSyAgICAgICAoMHgxdSA8PCBVQVJUX1BMMDExX1VBUlRDUl9UWEVfT0ZGKQogI2RlZmluZSBVQVJUX1BMMDExX1VBUlRGUl9UWF9GSUZPX0ZVTEwgICAgICgweDF1IDw8IFVBUlRfUEwwMTFfVUFSVEZSX1RYX0ZJRk9fRlVMTF9PRkYpCiAKKyNkZWZpbmUgVUFSVF9QTDAxMV9JTlRSX1RYX09GRiAgICAgICAgICAgICAweDV1CisjZGVmaW5lIFVBUlRfUEwwMTFfVFhfSU5UUl9NQVNLICAgICAgICAgICAgKDB4MXUgPDwgVUFSVF9QTDAxMV9JTlRSX1RYX09GRikKKyNkZWZpbmUgVUFSVF9QTDAxMV9VQVJUTENSX0hfRkVOX09GRiAgICAgICAweDR1CisjZGVmaW5lIFVBUlRfUEwwMTFfVUFSVExDUl9IX0ZFTl9NQVNLICAgICAgKDB4MXUgPDwgVUFSVF9QTDAxMV9VQVJUTENSX0hfRkVOX09GRikKKwogLyogZnVuY3Rpb24gcHJvdG90eXBlcyAqLwogdm9pZCBwYWxfdWFydF9wbDAxMV9pbml0KHVpbnQzMl90IHVhcnRfYmFzZV9hZGRyKTsKLXZvaWQgcGFsX3VhcnRfcGwwMTFfcHJpbnQoY2hhciAqc3RyLCB1aW50MzJfdCBkYXRhKTsKK3ZvaWQgcGFsX3VhcnRfcGwwMTFfcHJpbnQoY2hhciAqc3RyLCBpbnQzMl90IGRhdGEpOwordm9pZCBwYWxfdWFydF9wbDAxMV9nZW5lcmF0ZV9pcnEodm9pZCk7Cit2b2lkIHBhbF91YXJ0X3BsMDExX2Rpc2FibGVfaXJxKHZvaWQpOwogCiAjZW5kaWYgLyogX1BBTF9VQVJUX0NNU0RLX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vZHJpdmVycy93YXRjaGRvZy9jbXNkay9wYWxfd2RfY21zZGsuaCBiL2FwaS10ZXN0cy9wbGF0Zm9ybS9kcml2ZXJzL3dhdGNoZG9nL2Ntc2RrL3BhbF93ZF9jbXNkay5oCmluZGV4IDliZjMzYzYuLjkzMGUxYTEgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS9kcml2ZXJzL3dhdGNoZG9nL2Ntc2RrL3BhbF93ZF9jbXNkay5oCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS9kcml2ZXJzL3dhdGNoZG9nL2Ntc2RrL3BhbF93ZF9jbXNkay5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L01ha2VmaWxlIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9NYWtlZmlsZQppbmRleCBhMDIzMGRhLi5mNzU3ZTRiIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L01ha2VmaWxlCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvTWFrZWZpbGUKQEAgLTgzLDYgKzgzLDcgQEAKIGlmZXEgKCR7UFNBX0lOSVRJQUxfQVRURVNUQVRJT05fSU1QTEVNRU5URUR9LDEpCiBTUkNfQ19OU1BFICs9IHBhbF9hdHRlc3RhdGlvbl9pbnRmLmMKIFNSQ19DX05TUEUgKz0gcGFsX2F0dGVzdGF0aW9uX2VhdC5jCitTUkNfQ19OU1BFICs9IHBhbF9hdHRlc3RhdGlvbl9jcnlwdG8uYwogZWxzZQogU1JDX0NfTlNQRSArPSBwYWxfYXR0ZXN0YXRpb25fZW1wdHlfaW50Zi5jCiBlbmRpZgpAQCAtOTgsNyArOTksNyBAQAogICAgICAgICAgLUkkKFNPVVJDRSkvcGxhdGZvcm0vdGFyZ2V0cy8kKFRBUkdFVCkvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uIFwKICAgICAgICAgIC1JJChTT1VSQ0UpL3BsYXRmb3JtL3RhcmdldHMvJChUQVJHRVQpL25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9leHQvaW5jIFwKICAgICAgICAgIC1JJChTT1VSQ0UpL3BsYXRmb3JtL3RhcmdldHMvJChUQVJHRVQpL25zcGUvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlIFwKLSAgICAgICAgIC1JJChTT1VSQ0UpL3BsYXRmb3JtL3RhcmdldHMvJChUQVJHRVQpL25zcGUvcHJvdGVjdGVkX3N0b3JhZ2UKKyAgICAgICAgIC1JJChTT1VSQ0UpL3BsYXRmb3JtL3RhcmdldHMvJChUQVJHRVQpL25zcGUvcHJvdGVjdGVkX3N0b3JhZ2UgXAogCiBWUEFUSD0kKFNPVVJDRSkvcGxhdGZvcm0vdGFyZ2V0cy8kKFRBUkdFVCkvOiBcCiAgICAgICAkKFNPVVJDRSkvcGxhdGZvcm0vdGFyZ2V0cy8kKFRBUkdFVCkvc3BlOiBcCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L21hbmlmZXN0cy9jb21tb24vZHJpdmVyX3BhcnRpdGlvbl9wc2EuanNvbiBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbWFuaWZlc3RzL2NvbW1vbi9kcml2ZXJfcGFydGl0aW9uX3BzYS5qc29uCmluZGV4IDVkNTc1NzEuLjNlMmVjNjcgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbWFuaWZlc3RzL2NvbW1vbi9kcml2ZXJfcGFydGl0aW9uX3BzYS5qc29uCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbWFuaWZlc3RzL2NvbW1vbi9kcml2ZXJfcGFydGl0aW9uX3BzYS5qc29uCkBAIC0zLDExICszLDkgQEAKICAgIm5hbWUiOiAiRFJJVkVSX1BBUlRJVElPTiIsCiAgICJ0eXBlIjogIlBTQS1ST1QiLAogICAicHJpb3JpdHkiOiAiTk9STUFMIiwKLSAgImlkIjogIjB4MDAwMDAwMDMiLAogICAiZGVzY3JpcHRpb24iOiAiSW1wbGVtZW50cyBkZXZpY2Ugc2VydmljZXMgc3VjaCBwcmludCwgZmxhc2ggcmVhZC93cml0ZSwuIGV0Yy4iLAogICAiZW50cnlfcG9pbnQiOiAiZHJpdmVyX21haW4iLAogICAic3RhY2tfc2l6ZSI6ICIweDQwMCIsCi0gICJoZWFwX3NpemUiOiAiMHgxMDAiLAogICAic2VydmljZXMiOiBbewogICAgICAgIm5hbWUiOiAiRFJJVkVSX1VBUlRfU0lEIiwKICAgICAgICJzaWQiOiAiMHgwMDAwRkMwMSIsCkBAIC0zMyw5ICszMSw5IEBACiAgICAgICAibWlub3JfcG9saWN5IjogIlJFTEFYRUQiCiAgICAgfSwKICAgICB7Ci0gICAgICAibmFtZSI6ICJURVNUX0lOVFJfU0lEIiwKKyAgICAgICJuYW1lIjogIkRSSVZFUl9URVNUX1NJRCIsCiAgICAgICAic2lkIjogIjB4MDAwMEZDMDQiLAotICAgICAgInNpZ25hbCI6ICJURVNUX0lOVFJfU0lHIiwKKyAgICAgICJzaWduYWwiOiAiRFJJVkVSX1RFU1RfU0lHIiwKICAgICAgICJub25fc2VjdXJlX2NsaWVudHMiOiB0cnVlLAogICAgICAgIm1pbm9yX3ZlcnNpb24iOiAxLAogICAgICAgIm1pbm9yX3BvbGljeSI6ICJSRUxBWEVEIgpAQCAtNjksMTMgKzY3LDkgQEAKICAgXSwKICAgImlycXMiOiBbCiAgICAgeworICAgICAgICJkZXNjcmlwdGlvbiI6ICJVc2luZyBVQVJUIFRYIGludGVycnVwdCB0byB0ZXN0IHBzYV93YWl0IGFuZCBwc2FfZW9pIGZvciBpcnFfc2lnbmFsIiwKICAgICAgICAic2lnbmFsIjogIkRSSVZFUl9VQVJUX0lOVFJfU0lHIiwKICAgICAgICAibGluZV9udW0iOiAxNwogICAgIH0KLSAgXSwKLSAgImxpbmtlcl9wYXR0ZXJuIjogewotICAgICJvYmplY3RfbGlzdCI6IFsKLSAgICAiZHJpdmVyX3BhcnRpdGlvbi5hIgotICAgIF0KLSAgfQorICBdCiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L21hbmlmZXN0cy9pcGMvY2xpZW50X3BhcnRpdGlvbl9wc2EuanNvbiBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbWFuaWZlc3RzL2lwYy9jbGllbnRfcGFydGl0aW9uX3BzYS5qc29uCmluZGV4IDA4MWRjOTUuLmI5MzM3N2IgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbWFuaWZlc3RzL2lwYy9jbGllbnRfcGFydGl0aW9uX3BzYS5qc29uCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbWFuaWZlc3RzL2lwYy9jbGllbnRfcGFydGl0aW9uX3BzYS5qc29uCkBAIC0zLDExICszLDkgQEAKICAgIm5hbWUiOiAiQ0xJRU5UX1BBUlRJVElPTiIsCiAgICJ0eXBlIjogIkFQUExJQ0FUSU9OLVJPVCIsCiAgICJwcmlvcml0eSI6ICJOT1JNQUwiLAotICAiaWQiOiAiMHgwMDAwMDAwMSIsCiAgICJkZXNjcmlwdGlvbiI6ICJDbGllbnQgcGFydGl0aW9uIGV4ZWN1dGluZyBjbGllbnQgdGVzdCBmdW5jIGZyb20gU1BFIiwKICAgImVudHJ5X3BvaW50IjogImNsaWVudF9tYWluIiwKICAgInN0YWNrX3NpemUiOiAiMHg0MDAiLAotICAiaGVhcF9zaXplIjogIjB4MTAwIiwKICAgInNlcnZpY2VzIjogW3sKICAgICAgICJuYW1lIjogIkNMSUVOVF9URVNUX0RJU1BBVENIRVJfU0lEIiwKICAgICAgICJzaWQiOiAiMHgwMDAwRkEwMSIsCkBAIC0yMCw3ICsxOCw3IEBACiAgICJkZXBlbmRlbmNpZXMiOiBbCiAgICAgIkRSSVZFUl9VQVJUX1NJRCIsCiAgICAgIkRSSVZFUl9OVk1FTV9TSUQiLAotICAgICJURVNUX0lOVFJfU0lEIiwKKyAgICAiRFJJVkVSX1RFU1RfU0lEIiwKICAgICAiU0VSVkVSX1RFU1RfRElTUEFUQ0hFUl9TSUQiLAogICAgICJTRVJWRVJfVU5TUEVDSUZFRF9NSU5PUl9WX1NJRCIsCiAgICAgIlNFUlZFUl9TVFJJQ1RfTUlOT1JfVkVSU0lPTl9TSUQiLApAQCAtMzUsMTAgKzMzLDUgQEAKICAgICAgICJzaXplIjogIjB4MjAiLAogICAgICAgInBlcm1pc3Npb24iOiAiUkVBRC1XUklURSIKICAgICB9Ci0gICBdLAotICAibGlua2VyX3BhdHRlcm4iOiB7Ci0gICAgIm9iamVjdF9saXN0IjogWwotICAgICJjbGllbnRfcGFydGl0aW9uLmEiCi0gICAgXQotICB9CisgICBdCiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L21hbmlmZXN0cy9pcGMvc2VydmVyX3BhcnRpdGlvbl9wc2EuanNvbiBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbWFuaWZlc3RzL2lwYy9zZXJ2ZXJfcGFydGl0aW9uX3BzYS5qc29uCmluZGV4IDM1NDEzODcuLjE0NmI4ZmIgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbWFuaWZlc3RzL2lwYy9zZXJ2ZXJfcGFydGl0aW9uX3BzYS5qc29uCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbWFuaWZlc3RzL2lwYy9zZXJ2ZXJfcGFydGl0aW9uX3BzYS5qc29uCkBAIC0zLDcgKzMsNiBAQAogICAibmFtZSI6ICJTRVJWRVJfUEFSVElUSU9OIiwKICAgInR5cGUiOiAiQVBQTElDQVRJT04tUk9UIiwKICAgInByaW9yaXR5IjogIk5PUk1BTCIsCi0gICJpZCI6ICIweDAwMDAwMDAyIiwKICAgImRlc2NyaXB0aW9uIjogIlNlcnZlciBwYXJ0aXRpb24gZXhlY3V0aW5nIHNlcnZlciB0ZXN0IGZ1bmMiLAogICAiZW50cnlfcG9pbnQiOiAic2VydmVyX21haW4iLAogICAic3RhY2tfc2l6ZSI6ICIweDQwMCIsCkBAIC02NiwxMCArNjUsNSBAQAogICAiZGVwZW5kZW5jaWVzIjogWwogICAgICJEUklWRVJfVUFSVF9TSUQiLAogICAgICJEUklWRVJfTlZNRU1fU0lEIgotICBdLAotICAibGlua2VyX3BhdHRlcm4iOiB7Ci0gICAgIm9iamVjdF9saXN0IjogWwotICAgICJzZXJ2ZXJfcGFydGl0aW9uLmEiCi0gICAgXQotICB9CisgIF0KIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9jb21tb24vcGFsX2NvbmZpZy5oIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL2NvbW1vbi9wYWxfY29uZmlnLmgKaW5kZXggZGFhMGVjNS4uZTNmNzBhZCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL2NvbW1vbi9wYWxfY29uZmlnLmgKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL2NvbW1vbi9wYWxfY29uZmlnLmgKQEAgLTUwLDcgKzUwLDcgQEAKICNlbmRpZgogCiAjaWYgIWRlZmluZWQoVkVSQk9TRSkKLSNkZWZpbmUgVkVSQk9TRSA0IC8qIFByaW50IHZlcmJvc2l0eSA9IEVSUk9SICovCisjZGVmaW5lIFZFUkJPU0UgMyAvKiBQcmludCB2ZXJib3NpdHkgPSBURVNUICovCiAjZW5kaWYKIAogI2lmICghZGVmaW5lZChWQUxfTlNQRV9CVUlMRCkgJiYgIWRlZmluZWQoU1BFX0JVSUxEKSkKQEAgLTYyLDcgKzYyLDE1IEBACiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKFRFU1RfQ09NQklORV9BUkNISVZFKQotLy8jZGVmaW5lIFRFU1RfQ09NQklORV9BUkNISVZFIC8qIFRlc3QgZGlzcGF0Y2hlciBjb2RlIHNlbGVjdGlvbiAqLworI2RlZmluZSBURVNUX0NPTUJJTkVfQVJDSElWRSAwIC8qIENvbWJpbmUgdGVzdCBhcmNoaXZlIG9yIGJpbmFyeT8gKi8KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoV0FUQ0hET0dfQVZBSUxBQkxFKQorI2RlZmluZSBXQVRDSERPR19BVkFJTEFCTEUgMCAvKiBJZiB6ZXJvLCBza2lwIHdhdGNoZG9nIHByb2dyYW1taW5nICovCisjZW5kaWYKKworI2lmICFkZWZpbmVkKFNQX0hFQVBfTUVNX1NVUFApCisjZGVmaW5lIFNQX0hFQVBfTUVNX1NVUFAgMCAvKiBBcmUgRHluYW1pYyBmdW5jcyBhdmFpbGFibGUgdG8gc2VjdXJlIHBhcnRpdGlvbj8gKi8KICNlbmRpZgogCiAvKgpAQCAtNzksNiArODcsMTMgQEAKICAqIG9mIHRoaXMgZmlsZS4KICovCiAjaW5jbHVkZSAicHNhX21hbmlmZXN0L3NpZC5oIgorCisvKgorICogcHNhX21hbmlmZXN0L3BpZC5oOiBTZWN1cmUgUGFydGl0aW9uIElEcworICogTWFjcm8gZGVmaW5pdGlvbnMgdGhhdCBtYXAgZnJvbSBTZWN1cmUgUGFydGl0aW9uIG5hbWVzIHRvIFNlY3VyZSBQYXJ0aXRpb24gSURzLgorICogUGFydGl0aW9uIG1hbmlmZXN0IHBhcnNlIGJ1aWxkIHRvb2wgbXVzdCBwcm92aWRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZpbGUuCisqLworI2luY2x1ZGUgInBzYV9tYW5pZmVzdC9waWQuaCIKICNlbmRpZgogCiAjaWYgUFNBX0NSWVBUT19JTVBMRU1FTlRFRApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL2NvbW1vbi9wYWxfZHJpdmVyX2lwY19pbnRmLmMgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvY29tbW9uL3BhbF9kcml2ZXJfaXBjX2ludGYuYwppbmRleCAzMmFlZjljLi5mOGY3NzNmIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvY29tbW9uL3BhbF9kcml2ZXJfaXBjX2ludGYuYworKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvY29tbW9uL3BhbF9kcml2ZXJfaXBjX2ludGYuYwpAQCAtNTYsNyArNTYsNyBAQAogICAgIEByZXR1cm4gICAtIFNVQ0NFU1MvRkFJTFVSRQogKiovCiAKLWludCBwYWxfcHJpbnRfbnMoY2hhciAqc3RyLCB1aW50MzJfdCBkYXRhKQoraW50IHBhbF9wcmludF9ucyhjaGFyICpzdHIsIGludDMyX3QgZGF0YSkKIHsKICAgICBpbnQgICAgICAgICAgICAgc3RyaW5nX2xlbiA9IDA7CiAgICAgY2hhciAgICAgICAgICAgICpwID0gc3RyOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL2NvbW1vbi9wYWxfZHJpdmVyX25zX2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9jb21tb24vcGFsX2RyaXZlcl9uc19pbnRmLmMKaW5kZXggZGQ2YjE0Yy4uMmFmNmZjYyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL2NvbW1vbi9wYWxfZHJpdmVyX25zX2ludGYuYworKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvY29tbW9uL3BhbF9kcml2ZXJfbnNfaW50Zi5jCkBAIC0zOCw3ICszOCw3IEBACiAgICAgQHJldHVybiAgIC0gU1VDQ0VTUy9GQUlMVVJFCiAqKi8KIAotaW50IHBhbF9wcmludF9ucyhjaGFyICpzdHIsIHVpbnQzMl90IGRhdGEpCitpbnQgcGFsX3ByaW50X25zKGNoYXIgKnN0ciwgaW50MzJfdCBkYXRhKQogewogICAgIHBhbF9jbXNka19wcmludChzdHIsIGRhdGEpOwogICAgIHJldHVybiBQQUxfU1RBVFVTX1NVQ0NFU1M7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvY3J5cHRvL3BhbF9jcnlwdG9faW50Zi5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL2NyeXB0by9wYWxfY3J5cHRvX2ludGYuYwppbmRleCBhZDgzOGY5Li4zZGY2YWE4IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvY3J5cHRvL3BhbF9jcnlwdG9faW50Zi5jCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9jcnlwdG8vcGFsX2NyeXB0b19pbnRmLmMKQEAgLTM2LDcgKzM2LDcgQEAKICAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBzdGF0dXM7CiAgICAgY29uc3Qgdm9pZCAgICAgICAgICAgICAgKmV4dHJhOwogICAgIHNpemVfdCAgICAgICAgICAgICAgICAgIGV4dHJhX3NpemUsIGNhcGFjaXR5LCAqZ2VuX2NhcCwgbm9uY2VfbGVuZ3RoLCBhZGRpdGlvbmFsX2RhdGFfbGVuZ3RoOwotICAgIHBzYV9rZXlfaGFuZGxlX3QgICAgICAgIGhhbmRsZSwgKmtleV9oYW5kbGU7CisgICAgcHNhX2tleV9oYW5kbGVfdCAgICAgICAgaGFuZGxlLCAqa2V5X2hhbmRsZSwgdGFyZ2V0X2hhbmRsZTsKICAgICBwc2Ffa2V5X3R5cGVfdCAgICAgICAgICBrZXlfdHlwZSwgKmtleV90eXBlX291dDsKICAgICBwc2Ffa2V5X3BvbGljeV90ICAgICAgICAqcG9saWN5OwogICAgIHBzYV9rZXlfdXNhZ2VfdCAgICAgICAgIHVzYWdlLCAqdXNhZ2Vfb3V0OwpAQCAtMzI1LDYgKzMyNSwxMSBAQAogICAgICAgICBjYXNlIFBBTF9DUllQVE9fQUxMT0NBVEVfS0VZOgogICAgICAgICAgICAga2V5X2hhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90ICopdmFfYXJnKHZhbGlzdCwgaW50Kik7CiAgICAgICAgICAgICByZXR1cm4gcHNhX2FsbG9jYXRlX2tleShrZXlfaGFuZGxlKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0NPUFlfS0VZOgorICAgICAgICAgICAgaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIHRhcmdldF9oYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgcG9saWN5ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV9wb2xpY3lfdCopOworICAgICAgICAgICAgcmV0dXJuIHBzYV9jb3B5X2tleShoYW5kbGUsIHRhcmdldF9oYW5kbGUsIHBvbGljeSk7CiAgICAgICAgIGNhc2UgUEFMX0NSWVBUT19GUkVFOgogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IFBBTF9LRVlfU0xPVF9DT1VOVDsgaSsrKQogICAgICAgICAgICAgICAgIHBzYV9kZXN0cm95X2tleShpKTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9jcnlwdG8vcGFsX2NyeXB0b19pbnRmLmggYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvY3J5cHRvL3BhbF9jcnlwdG9faW50Zi5oCmluZGV4IGRmYWJlZTEuLmQxZGFiZmEgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9jcnlwdG8vcGFsX2NyeXB0b19pbnRmLmgKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL2NyeXB0by9wYWxfY3J5cHRvX2ludGYuaApAQCAtNjgsNiArNjgsNyBAQAogICAgIFBBTF9DUllQVE9fQVNZTU1URVJJQ19WRVJJRlkgICAgICAgID0gMHgzMSwKICAgICBQQUxfQ1JZUFRPX0tFWV9BR1JFRU1FTlQgICAgICAgICAgICA9IDB4MzIsCiAgICAgUEFMX0NSWVBUT19BTExPQ0FURV9LRVkgICAgICAgICAgICAgPSAweDMzLAorICAgIFBBTF9DUllQVE9fQ09QWV9LRVkgICAgICAgICAgICAgICAgID0gMHgzNCwKICAgICBQQUxfQ1JZUFRPX0ZSRUUgICAgICAgICAgICAgICAgICAgICA9IDB4RkUsCiB9OwogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fY3J5cHRvLmMgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fY3J5cHRvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUyYmRiYQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9jcnlwdG8uYwpAQCAtMCwwICsxLDM0NiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInBhbF9hdHRlc3RhdGlvbl9jcnlwdG8uaCIKKworc3RhdGljIHVpbnQzMl90ICBwdWJsaWNfa2V5X3JlZ2lzdGVyZWQgPSAwOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyB1c2VmdWxfYnVmX2hlYWQoc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFtb3VudCkKK3sKKyAgICByZXR1cm4gVXNlZnVsQnVmX0hlYWQoYnVmLCBhbW91bnQpOworfQorCitzdGF0aWMgdWludDMyX3QgY2hlY2tfaGFzaF9zaXplcyh2b2lkKQoreworICAgIGlmIChUX0NPU0VfQ1JZUFRPX1NIQTI1Nl9TSVpFICE9IFBTQV9IQVNIX1NJWkUoUFNBX0FMR19TSEFfMjU2KSkKKyAgICB7CisgICAgICAgIHJldHVybiBQQUxfQVRURVNUX0hBU0hfRkFJTDsKKyAgICB9CisKKyAgICByZXR1cm4gUEFMX0FUVEVTVF9TVUNDRVNTOworfQorCitzdGF0aWMgcHNhX2VjY19jdXJ2ZV90IGF0dGVzdF9tYXBfZWxsaXB0aWNfY3VydmVfdHlwZShpbnQzMl90IGNvc2VfY3VydmUpCit7CisgICAgcHNhX2VjY19jdXJ2ZV90IHBzYV9jdXJ2ZTsKKworICAgIC8qRml4TWU6IE1hcHBpbmcgaXMgbm90IGNvbXBsZXRlLCBtaXNzaW5nIG9uZXM6IFAzODQsIFA1MjEsIEVEMjU1MTksIEVENDQ4ICovCisgICAgc3dpdGNoIChjb3NlX2N1cnZlKQorICAgIHsKKyAgICBjYXNlIFBfMjU2OgorICAgICAgICBwc2FfY3VydmUgPSBQU0FfRUNDX0NVUlZFX1NFQ1AyNTZSMTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcHNhX2N1cnZlID0gVVNIUlRfTUFYOworICAgIH0KKworICAgIHJldHVybiBwc2FfY3VydmU7Cit9CisKK3N0YXRpYyBwc2FfYWxnb3JpdGhtX3QgY29zZV9oYXNoX2FsZ19pZF90b19wc2EoaW50MzJfdCBjb3NlX2hhc2hfYWxnX2lkKQoreworICAgIHBzYV9hbGdvcml0aG1fdCBzdGF0dXM7CisKKyAgICBzd2l0Y2ggKGNvc2VfaGFzaF9hbGdfaWQpCisgICAgeworICAgIGNhc2UgQ09TRV9BTEdfU0hBMjU2X1BST1BSSUVUQVJZOgorICAgICAgICBzdGF0dXMgPSBQU0FfQUxHX1NIQV8yNTY7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN0YXR1cyA9IFBTQV9BTEdfTUQ0OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50MzJfdCBoYXNoX2FsZ19pZF9mcm9tX3NpZ19hbGdfaWQoaW50MzJfdCBjb3NlX3NpZ19hbGdfaWQpCit7CisgICAgc3dpdGNoIChjb3NlX3NpZ19hbGdfaWQpCisgICAgeworICAgICAgICBjYXNlIENPU0VfQUxHT1JJVEhNX0VTMjU2OgorICAgICAgICAgICAgcmV0dXJuIENPU0VfQUxHX1NIQTI1Nl9QUk9QUklFVEFSWTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBJTlQzMl9NQVg7CisgICAgfQorfQorCitpbnQzMl90IHBhbF9jb3NlX2NyeXB0b19oYXNoX3N0YXJ0KHN0cnVjdCBwYWxfY29zZV9jcnlwdG9faGFzaCAqaGFzaF9jdHgsIGludDMyX3QgY29zZV9oYXNoX2FsZ19pZCkKK3sKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgICBjb3NlX3JldCA9IFBBTF9BVFRFU1RfU1VDQ0VTUzsKKyAgICBwc2Ffc3RhdHVzX3QgICAgICAgICAgICAgICAgICAgICBwc2FfcmV0OworICAgIHN0cnVjdCBwYWxfY29zZV9wc2FfY3J5cHRvX2hhc2ggKnBzYV9oYXNoX2N0eDsKKworICAgIGNvc2VfcmV0ID0gY2hlY2tfaGFzaF9zaXplcygpOworICAgIGlmIChjb3NlX3JldCkKKyAgICB7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgaWYgKHNpemVvZihzdHJ1Y3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2gpIDwgc2l6ZW9mKHN0cnVjdCBwYWxfY29zZV9wc2FfY3J5cHRvX2hhc2gpKQorICAgIHsKKyAgICAgICAgY29zZV9yZXQgPSBQQUxfQVRURVNUX0hBU0hfRkFJTDsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBwc2FfaGFzaF9jdHggPSAoc3RydWN0IHBhbF9jb3NlX3BzYV9jcnlwdG9faGFzaCAqKWhhc2hfY3R4OworICAgIHBzYV9yZXQgPSBwc2FfaGFzaF9zZXR1cCgmcHNhX2hhc2hfY3R4LT5vcGVyYXRpb24sIGNvc2VfaGFzaF9hbGdfaWRfdG9fcHNhKGNvc2VfaGFzaF9hbGdfaWQpKTsKKworICAgIGlmIChwc2FfcmV0ID09IFBBTF9BVFRFU1RfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIHBzYV9oYXNoX2N0eC0+c3RhdHVzID0gUEFMX0FUVEVTVF9TVUNDRVNTOworICAgICAgICBjb3NlX3JldCA9IFBBTF9BVFRFU1RfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZSBpZiAocHNhX3JldCA9PSBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCkKKyAgICB7CisgICAgICAgIGNvc2VfcmV0ID0gUEFMX0FUVEVTVF9IQVNIX1VOU1VQUE9SVEVEOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb3NlX3JldCA9IFBBTF9BVFRFU1RfSEFTSF9GQUlMOworICAgIH0KKworZXJyb3I6CisgICAgcmV0dXJuIGNvc2VfcmV0OworfQorCit2b2lkIHBhbF9jb3NlX2NyeXB0b19oYXNoX3VwZGF0ZShzdHJ1Y3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2ggKmhhc2hfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGRhdGFfdG9faGFzaCkKK3sKKyAgICBzdHJ1Y3QgcGFsX2Nvc2VfcHNhX2NyeXB0b19oYXNoICpwc2FfaGFzaF9jdHg7CisKKyAgICBpZiAoc2l6ZW9mKHN0cnVjdCBwYWxfY29zZV9jcnlwdG9faGFzaCkgPCBzaXplb2Yoc3RydWN0IHBhbF9jb3NlX3BzYV9jcnlwdG9faGFzaCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcHNhX2hhc2hfY3R4ID0gKHN0cnVjdCBwYWxfY29zZV9wc2FfY3J5cHRvX2hhc2ggKiloYXNoX2N0eDsKKworICAgIGlmIChwc2FfaGFzaF9jdHgtPnN0YXR1cyA9PSBQQUxfQVRURVNUX1NVQ0NFU1MpCisgICAgeworICAgICAgICBpZiAoZGF0YV90b19oYXNoLnB0ciAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBwc2FfaGFzaF9jdHgtPnN0YXR1cyA9IHBzYV9oYXNoX3VwZGF0ZSgmcHNhX2hhc2hfY3R4LT5vcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3RvX2hhc2gucHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90b19oYXNoLmxlbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBJbnRlbnRpb25hbGx5IGRvIG5vdGhpbmcsIGp1c3QgY29tcHV0aW5nIHRoZSBzaXplIG9mIHRoZSB0b2tlbiAqLworICAgICAgICB9CisgICAgfQorfQorCitpbnQzMl90IHBhbF9jb3NlX2NyeXB0b19oYXNoX2ZpbmlzaChzdHJ1Y3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2ggKmhhc2hfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1ZiBidWZmZXJfdG9faG9sZF9yZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgKmhhc2hfcmVzdWx0KQoreworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgIGNvc2VfcmV0ID0gUEFMX0FUVEVTVF9TVUNDRVNTOworICAgIHBzYV9zdGF0dXNfdCAgICAgICAgICAgICAgICAgICAgIHBzYV9yZXQ7CisgICAgc3RydWN0IHBhbF9jb3NlX3BzYV9jcnlwdG9faGFzaCAqcHNhX2hhc2hfY3R4OworCisgICAgaWYgKHNpemVvZihzdHJ1Y3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2gpIDwgc2l6ZW9mKHN0cnVjdCBwYWxfY29zZV9wc2FfY3J5cHRvX2hhc2gpKQorICAgIHsKKyAgICAgICAgY29zZV9yZXQgPSBQQUxfQVRURVNUX0hBU0hfRkFJTDsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBwc2FfaGFzaF9jdHggPSAoc3RydWN0IHBhbF9jb3NlX3BzYV9jcnlwdG9faGFzaCAqKWhhc2hfY3R4OworCisgICAgaWYgKHBzYV9oYXNoX2N0eC0+c3RhdHVzID09IFBBTF9BVFRFU1RfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIHBzYV9yZXQgPSBwc2FfaGFzaF9maW5pc2goJnBzYV9oYXNoX2N0eC0+b3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl90b19ob2xkX3Jlc3VsdC5wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX3RvX2hvbGRfcmVzdWx0LmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKGhhc2hfcmVzdWx0LT5sZW4pKTsKKworICAgICAgICBpZiAocHNhX3JldCA9PSBQQUxfQVRURVNUX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGhhc2hfcmVzdWx0LT5wdHIgPSBidWZmZXJfdG9faG9sZF9yZXN1bHQucHRyOworICAgICAgICAgICAgY29zZV9yZXQgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBzYV9yZXQgPT0gUFNBX0VSUk9SX0JVRkZFUl9UT09fU01BTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvc2VfcmV0ID0gUEFMX0FUVEVTVF9IQVNIX0JVRkZFUl9TSVpFOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgY29zZV9yZXQgPSBQQUxfQVRURVNUX0hBU0hfRkFJTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb3NlX3JldCA9IFBBTF9BVFRFU1RfSEFTSF9GQUlMOworICAgIH0KKworZXJyb3I6CisgICAgcmV0dXJuIGNvc2VfcmV0OworfQorCitpbnQgcGFsX2NyZWF0ZV9zaGEyNTYoc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGJ5dGVzX3RvX2hhc2gsIHN0cnVjdCBxX3VzZWZ1bF9idWYgYnVmZmVyX2Zvcl9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyAqaGFzaCkKK3sKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBQQUxfQVRURVNUX1NVQ0NFU1M7CisgICAgc3RydWN0IHBhbF9jb3NlX2NyeXB0b19oYXNoICAgaGFzaF9jdHg7CisKKyAgICBzdGF0dXMgPSBwYWxfY29zZV9jcnlwdG9faGFzaF9zdGFydCgmaGFzaF9jdHgsIENPU0VfQUxHX1NIQTI1Nl9QUk9QUklFVEFSWSk7CisgICAgaWYgKHN0YXR1cykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIHBhbF9jb3NlX2NyeXB0b19oYXNoX3VwZGF0ZSgmaGFzaF9jdHgsIGJ5dGVzX3RvX2hhc2gpOworICAgIHN0YXR1cyA9IHBhbF9jb3NlX2NyeXB0b19oYXNoX2ZpbmlzaCgmaGFzaF9jdHgsIGJ1ZmZlcl9mb3JfaGFzaCwgaGFzaCk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCit1aW50MzJfdCBwYWxfY29tcHV0ZV9oYXNoKGludDMyX3QgY29zZV9hbGdfaWQsIHN0cnVjdCBxX3VzZWZ1bF9idWYgYnVmZmVyX2Zvcl9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgKmhhc2gsIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBwcm90ZWN0ZWRfaGVhZGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHBheWxvYWQpCit7CisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgIHN0YXR1czsKKyAgICBRQ0JPUkVuY29kZUNvbnRleHQgICAgICAgICAgY2Jvcl9lbmNvZGVfY3R4OworICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyAgICAgICB0YnNfZmlyc3RfcGFydDsKKyAgICBRQ0JPUkVycm9yICAgICAgICAgICAgICAgICAgcWNib3JfcmVzdWx0OworICAgIHN0cnVjdCBwYWxfY29zZV9jcnlwdG9faGFzaCBoYXNoX2N0eCA9IHt7MH19OworICAgIGludDMyX3QgICAgICAgICAgICAgICAgICAgICBoYXNoX2FsZ19pZDsKKyAgICBVc2VmdWxCdWZfTUFLRV9TVEFDS19VQiAgICAoYnVmZmVyX2Zvcl9UQlNfZmlyc3RfcGFydCwgVF9DT1NFX1NJWkVfT0ZfVEJTKTsKKworICAgIC8qIFRoaXMgYnVpbGRzIHRoZSBDQk9SLWZvcm1hdCB0by1iZS1zaWduZWQgYnl0ZXMgKi8KKyAgICBRQ0JPUkVuY29kZV9Jbml0KCZjYm9yX2VuY29kZV9jdHgsIGJ1ZmZlcl9mb3JfVEJTX2ZpcnN0X3BhcnQpOworICAgIFFDQk9SRW5jb2RlX09wZW5BcnJheSgmY2Jvcl9lbmNvZGVfY3R4KTsKKyAgICAvKiBjb250ZXh0ICovCisgICAgUUNCT1JFbmNvZGVfQWRkU1pTdHJpbmcoJmNib3JfZW5jb2RlX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1NFX1NJR19DT05URVhUX1NUUklOR19TSUdOQVRVUkUxKTsKKyAgICAvKiBib2R5X3Byb3RlY3RlZCAqLworICAgIFFDQk9SRW5jb2RlX0FkZEJ5dGVzKCZjYm9yX2VuY29kZV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkX2hlYWRlcnMpOworICAgIC8qIHNpZ25fcHJvdGVjdGVkICovCisgICAgUUNCT1JFbmNvZGVfQWRkQnl0ZXMoJmNib3JfZW5jb2RlX2N0eCwgTlVMTF9VU0VGVUxfQlVGX0MpOworICAgIC8qIGV4dGVybmFsX2FhZCAqLworICAgIFFDQk9SRW5jb2RlX0FkZEJ5dGVzKCZjYm9yX2VuY29kZV9jdHgsIE5VTExfVVNFRlVMX0JVRl9DKTsKKyAgICAvKiBmYWtlIHBheWxvYWQgKi8KKyAgICBRQ0JPUkVuY29kZV9BZGRCeXRlcygmY2Jvcl9lbmNvZGVfY3R4LCBOVUxMX1VTRUZVTF9CVUZfQyk7CisgICAgUUNCT1JFbmNvZGVfQ2xvc2VBcnJheSgmY2Jvcl9lbmNvZGVfY3R4KTsKKworICAgIC8qIEdldCB0aGUgcmVzdWx0IGFuZCBjb252ZXJ0IGl0IHRvIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyByZXByZXNlbnRhdGlvbiAqLworICAgIHFjYm9yX3Jlc3VsdCA9IFFDQk9SRW5jb2RlX0ZpbmlzaCgmY2Jvcl9lbmNvZGVfY3R4LCAmdGJzX2ZpcnN0X3BhcnQpOworICAgIGlmIChxY2Jvcl9yZXN1bHQpCisgICAgeworICAgICAgICAvKiBNYWlubHkgbWVhbnMgdGhhdCB0aGUgcHJvdGVjdGVkX2hlYWRlcnMgd2VyZSB0b28gYmlnCisgICAgICAgICAod2hpY2ggc2hvdWxkIG5ldmVyIGhhcHBlbikgKi8KKyAgICAgICAgc3RhdHVzID0gUEFMX0FUVEVTVF9FUlJfU0lHTl9TVFJVQ1Q7CisgICAgICAgIGdvdG8gRG9uZTsKKyAgICB9CisKKyAgICAvKiBTdGFydCB0aGUgaGFzaGluZyAqLworICAgIGhhc2hfYWxnX2lkID0gaGFzaF9hbGdfaWRfZnJvbV9zaWdfYWxnX2lkKGNvc2VfYWxnX2lkKTsKKworICAgIC8qIERvbid0IGNoZWNrIGhhc2hfYWxnX2lkIGZvciBmYWlsdXJlLiBwYWxfY29zZV9jcnlwdG9faGFzaF9zdGFydCgpCisgICAgICogd2lsbCBoYW5kbGUgaXQgcHJvcGVybHkKKyAgICAgKi8KKyAgICBzdGF0dXMgPSBwYWxfY29zZV9jcnlwdG9faGFzaF9zdGFydCgmaGFzaF9jdHgsIGhhc2hfYWxnX2lkKTsKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICBnb3RvIERvbmU7CisKKyAgICAvKiBIYXNoIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBUQlMuIFRha2UgYWxsIGJ1dCB0aGUgbGFzdCB0d28KKyAgICAgKiBieXRlcy4gVGhlIGxhc3QgdHdvIGJ5dGVzIGFyZSB0aGUgZmFrZSBwYXlsb2FkIGZyb20gYWJvdmUuIEl0CisgICAgICogaXMgcmVwbGFjZWQgYnkgdGhlIHJlYWwgcGF5bG9hZCB3aGljaCBpcyBoYXNoZWQgbmV4dC4gVGhlIGZha2UKKyAgICAgKiBwYXlsb2FkIGlzIG5lZWRlZCBzbyB0aGUgYXJyYXkgY291bnQgaXMgcmlnaHQuIFRoaXMgaXMgb25lIG9mCisgICAgICogdGhlIG1haW4gdGhpbmdzIHRoYXQgbWFrZSBpdCBwb3NzaWJsZSB0byBpbXBsZW1lbnQgd2l0aCBvbmUKKyAgICAgKiBidWZmZXIgZm9yIHRoZSB3aG9sZSBjb3NlIHNpZ24xLgorICAgICAqLworICAgIHBhbF9jb3NlX2NyeXB0b19oYXNoX3VwZGF0ZSgmaGFzaF9jdHgsIHVzZWZ1bF9idWZfaGVhZCh0YnNfZmlyc3RfcGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YnNfZmlyc3RfcGFydC5sZW4gLSAyKSk7CisKKyAgICAvKiBIYXNoIHRoZSBwYXlsb2FkICovCisgICAgcGFsX2Nvc2VfY3J5cHRvX2hhc2hfdXBkYXRlKCZoYXNoX2N0eCwgcGF5bG9hZCk7CisKKyAgICAvKiBGaW5pc2ggdGhlIGhhc2ggYW5kIHNldCB1cCB0byByZXR1cm4gaXQgKi8KKyAgICBzdGF0dXMgPSBwYWxfY29zZV9jcnlwdG9faGFzaF9maW5pc2goJmhhc2hfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX2Zvcl9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCk7CisKK0RvbmU6CisgICAgcmV0dXJuIHN0YXR1czsKK30KKwordWludDMyX3QgcGFsX2ltcG9ydF9hdHRlc3Rfa2V5KGludDMyX3QgYWxnKQoreworICAgIHBzYV9rZXlfdHlwZV90ICAgYXR0ZXN0X2tleV90eXBlOworICAgIHNpemVfdCAgICAgICAgICAgcHVibGljX2tleV9zaXplOworICAgIHBzYV9zdGF0dXNfdCAgICAgc3RhdHVzID0gUFNBX1NVQ0NFU1M7CisgICAgcHNhX2tleV9wb2xpY3lfdCBwb2xpY3k7CisgICAgcHNhX2VjY19jdXJ2ZV90ICBwc2FfY3VydmU7CisgICAgcHNhX2tleV9oYW5kbGVfdCBwdWJsaWNfa2V5X2hhbmRsZTsKKworICAgIC8qIE1hcHBpbmcgb2YgQ09TRSBjdXJ2ZSB0eXBlIHRvIFBTQSBjdXJ2ZSB0eXBlcyAqLworICAgIHBzYV9jdXJ2ZSA9IGF0dGVzdF9tYXBfZWxsaXB0aWNfY3VydmVfdHlwZShQXzI1Nik7CisgICAgaWYgKHBzYV9jdXJ2ZSA9PSBVU0hSVF9NQVgpCisgICAgICAgIHJldHVybiBQQUxfQVRURVNUX0VSUk9SOworCisgICAgLyogU2V0dXAgdGhlIGtleSBwb2xpY3kgZm9yIHB1YmxpYyBrZXkgKi8KKyAgICBwb2xpY3kgPSBwc2Ffa2V5X3BvbGljeV9pbml0KCk7CisgICAgcHNhX2tleV9wb2xpY3lfc2V0X3VzYWdlKCZwb2xpY3ksIFBTQV9LRVlfVVNBR0VfVkVSSUZZLCBhbGcpOworCisgICAgc3RhdHVzID0gcHNhX2FsbG9jYXRlX2tleSgmcHVibGljX2tleV9oYW5kbGUpOworICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICBzdGF0dXMgPSBwc2Ffc2V0X2tleV9wb2xpY3kocHVibGljX2tleV9oYW5kbGUsICZwb2xpY3kpOworICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICBhdHRlc3Rfa2V5X3R5cGUgPSBQU0FfS0VZX1RZUEVfRUNDX1BVQkxJQ19LRVkocHNhX2N1cnZlKTsKKworICAgIC8qIFJlZ2lzdGVyIHB1YmxpYyBrZXkgdG8gY3J5cHRvIHNlcnZpY2UgKi8KKyAgICBwdWJsaWNfa2V5X3NpemUgPSBhdHRlc3Rfa2V5LnB1Ynhfa2V5X3NpemUgKyBhdHRlc3Rfa2V5LnB1Ynlfa2V5X3NpemU7CisKKyAgICBzdGF0dXMgPSBwc2FfaW1wb3J0X2tleShwdWJsaWNfa2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ZXN0X2tleV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdWludDhfdCAqKSZhdHRlc3RfcHVibGljX2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljX2tleV9zaXplICsgMSk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisKK3VpbnQzMl90IHBhbF9jcnlwdG9fcHViX2tleV92ZXJpZnkoaW50MzJfdCBjb3NlX2FsZ29yaXRobV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHRva2VuX2hhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBzaWduYXR1cmUpCit7CisgICAgdWludDMyX3Qgc3RhdHVzID0gUEFMX0FUVEVTVF9TVUNDRVNTOworCisgICAgaWYgKCFwdWJsaWNfa2V5X3JlZ2lzdGVyZWQpCisgICAgeworICAgICAgICBzdGF0dXMgPSBwYWxfaW1wb3J0X2F0dGVzdF9rZXkoY29zZV9hbGdvcml0aG1faWQpOworICAgICAgICBpZiAoc3RhdHVzICE9IFBBTF9BVFRFU1RfU1VDQ0VTUykKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICAgICAgcHVibGljX2tleV9yZWdpc3RlcmVkID0gMTsKKyAgICB9CisKKy8qCisgKiBFbmFibGUgdGhlIHZlcmlmeSBmdW5jdGlvbiB3aGVuIFRydXN0ZWQgRmlybWFyZSAtIE0gU3VwcG9ydHMKKworICogIFZlcmlmeSB0aGUgc2lnbmF0dXJlIGEgaGFzaCBvciBzaG9ydCBtZXNzYWdlIHVzaW5nIGEgcHVibGljIGtleS4KKyAgICBzdGF0dXMgPSBwc2FfYXN5bW1ldHJpY192ZXJpZnkocHVibGljX2tleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3NlX2FsZ29yaXRobV9pZCwgdG9rZW5faGFzaC5wdHIsIHRva2VuX2hhc2gubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlLnB0ciwgc2lnbmF0dXJlLmxlbik7CisqLworICAgIHJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fY3J5cHRvLmggYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fY3J5cHRvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ2M2FkMQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9jcnlwdG8uaApAQCAtMCwwICsxLDEwMiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInBhbF9jb21tb24uaCIKKyNpbmNsdWRlICJwYWxfYXR0ZXN0YXRpb25fZWF0LmgiCisKKyNkZWZpbmUgQVRURVNUX1BVQkxJQ19LRVlfU0xPVCAgICAgICAgICAgIDQKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgdWludDhfdCAgKnB1Ynhfa2V5OworICAgIHVpbnQzMl90ICBwdWJ4X2tleV9zaXplOworICAgIHVpbnQ4X3QgICpwdWJ5X2tleTsKKyAgICB1aW50MzJfdCAgcHVieV9rZXlfc2l6ZTsKK30gZWNjX2tleV90OworCitzdHJ1Y3QgZWNjX3B1YmxpY19rZXlfdCB7CisgICAgY29uc3QgdWludDhfdCBhOworICAgIHVpbnQ4X3QgcHVibGljX2tleVtdOyAvKiBYLWNvb3JkaW5hdGUgfHwgWS1jb29yZGluYXRlICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGVjY19wdWJsaWNfa2V5X3QgYXR0ZXN0X3B1YmxpY19rZXkgPSB7CisgICAgIC8qIENvbnN0YW50IGJ5dGUgKi8KKyAgICAgMHgwNCwKKyAgICAgLyogWC1jb29yZGluYXRlICovCisgICAgIHsweDc5LCAweEVCLCAweEE5LCAweDBFLCAweDhCLCAweEY0LCAweDUwLCAweEE2LAorICAgICAgMHg3NSwgMHgxNSwgMHg3NiwgMHhBRCwgMHg0NSwgMHg5OSwgMHhCMCwgMHg3QSwKKyAgICAgIDB4REYsIDB4OTMsIDB4OEQsIDB4QTMsIDB4QkIsIDB4MEIsIDB4RDEsIDB4N0QsCisgICAgICAweDAwLCAweDM2LCAweEVELCAweDQ5LCAweEEyLCAweEQwLCAweEZDLCAweDNGLAorICAgICAvKiBZLWNvb3JkaW5hdGUgKi8KKyAgICAgIDB4QkYsIDB4Q0QsIDB4RkEsIDB4ODksIDB4NTYsIDB4QjUsIDB4NjgsIDB4QkYsCisgICAgICAweERCLCAweDg2LCAweDczLCAweEU2LCAweDQ4LCAweEQ4LCAweEI1LCAweDhELAorICAgICAgMHg5MiwgMHg5OSwgMHg1NSwgMHhCMSwgMHg0QSwgMHgyNiwgMHhDMywgMHgwOCwKKyAgICAgIDB4MEYsIDB4MzQsIDB4MTEsIDB4N0QsIDB4OTcsIDB4MUQsIDB4NjgsIDB4NjR9LAorfTsKKworc3RydWN0IHBhbF9jb3NlX2NyeXB0b19oYXNoIHsKKyAgICAvKiBDYW4ndCBwdXQgdGhlIGFjdHVhbCBzaXplIGhlcmUgd2l0aG91dCBjcmVhdGluZyBkZXBlbmRlY3kgb24KKyAgICAgKiBhY3R1YWwgaGFzaCBpbXBsZW1lbnRhdGlvbiwgc28gdGhpcyBpcyBhIGZhaXJseSBsYXJnZSBhbmQKKyAgICAgKiBhY2NvbW1vZGF0aW5nIHNpemUuCisgICAgICovCisgICAgdWludDhfdCBieXRlc1sxMjhdOworfTsKKworc3RydWN0IHBhbF9jb3NlX3BzYV9jcnlwdG9faGFzaCB7CisgICAgcHNhX3N0YXR1c190ICAgICAgICAgc3RhdHVzOworICAgIHBzYV9oYXNoX29wZXJhdGlvbl90IG9wZXJhdGlvbjsKK307CisKK3N0YXRpYyBjb25zdCB1aW50OF90IGluaXRpYWxfYXR0ZXN0YXRpb25fcHVibGljX3hfa2V5W10gPQoreworICAgIDB4NzksIDB4RUIsIDB4QTksIDB4MEUsIDB4OEIsIDB4RjQsIDB4NTAsIDB4QTYsCisgICAgMHg3NSwgMHgxNSwgMHg3NiwgMHhBRCwgMHg0NSwgMHg5OSwgMHhCMCwgMHg3QSwKKyAgICAweERGLCAweDkzLCAweDhELCAweEEzLCAweEJCLCAweDBCLCAweEQxLCAweDdELAorICAgIDB4MDAsIDB4MzYsIDB4RUQsIDB4NDksIDB4QTIsIDB4RDAsIDB4RkMsIDB4M0YKK307CisKK3N0YXRpYyBjb25zdCB1aW50OF90IGluaXRpYWxfYXR0ZXN0YXRpb25fcHVibGljX3lfa2V5W10gPQoreworICAgIDB4QkYsIDB4Q0QsIDB4RkEsIDB4ODksIDB4NTYsIDB4QjUsIDB4NjgsIDB4QkYsCisgICAgMHhEQiwgMHg4NiwgMHg3MywgMHhFNiwgMHg0OCwgMHhEOCwgMHhCNSwgMHg4RCwKKyAgICAweDkyLCAweDk5LCAweDU1LCAweEIxLCAweDRBLCAweDI2LCAweEMzLCAweDA4LAorICAgIDB4MEYsIDB4MzQsIDB4MTEsIDB4N0QsIDB4OTcsIDB4MUQsIDB4NjgsIDB4NjQKK307CisKKy8qIEluaXRpYWxpemUgdGhlIHN0cnVjdHVyZSB3aXRoIGdpdmVuIHB1YmxpYyBrZXkgKi8KK3N0YXRpYyBjb25zdCBlY2Nfa2V5X3QgYXR0ZXN0X2tleSA9IHsKKyAgICAgICAgKHVpbnQ4X3QgKilpbml0aWFsX2F0dGVzdGF0aW9uX3B1YmxpY194X2tleSwKKyAgICAgICAgc2l6ZW9mKGluaXRpYWxfYXR0ZXN0YXRpb25fcHVibGljX3hfa2V5KSwKKyAgICAgICAgKHVpbnQ4X3QgKilpbml0aWFsX2F0dGVzdGF0aW9uX3B1YmxpY195X2tleSwKKyAgICAgICAgc2l6ZW9mKGluaXRpYWxfYXR0ZXN0YXRpb25fcHVibGljX3lfa2V5KQorfTsKKworaW50MzJfdCBwYWxfY29zZV9jcnlwdG9faGFzaF9zdGFydChzdHJ1Y3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2ggKmhhc2hfY3R4LCBpbnQzMl90IGNvc2VfaGFzaF9hbGdfaWQpOwordm9pZCBwYWxfY29zZV9jcnlwdG9faGFzaF91cGRhdGUoc3RydWN0IHBhbF9jb3NlX2NyeXB0b19oYXNoICpoYXNoX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBkYXRhX3RvX2hhc2gpOworaW50MzJfdCBwYWxfY29zZV9jcnlwdG9faGFzaF9maW5pc2goc3RydWN0IHBhbF9jb3NlX2NyeXB0b19oYXNoICpoYXNoX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWYgYnVmZmVyX3RvX2hvbGRfcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jICpoYXNoX3Jlc3VsdCk7CitpbnQgcGFsX2NyZWF0ZV9zaGEyNTYoc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGJ5dGVzX3RvX2hhc2gsIHN0cnVjdCBxX3VzZWZ1bF9idWYgYnVmZmVyX2Zvcl9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyAqaGFzaCk7Cit1aW50MzJfdCBwYWxfY29tcHV0ZV9oYXNoKGludDMyX3QgY29zZV9hbGdfaWQsIHN0cnVjdCBxX3VzZWZ1bF9idWYgYnVmZmVyX2Zvcl9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgKmhhc2gsIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBwcm90ZWN0ZWRfaGVhZGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHBheWxvYWQpOwordWludDMyX3QgcGFsX2ltcG9ydF9hdHRlc3Rfa2V5KGludDMyX3QgYWxnKTsKK3VpbnQzMl90IHBhbF9jcnlwdG9fcHViX2tleV92ZXJpZnkoaW50MzJfdCBjb3NlX2FsZ29yaXRobV9pZCwgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHRva2VuX2hhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBzaWduYXR1cmUpOworCisKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9lYXQuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9lYXQuYwppbmRleCAyNjJkYzVkLi4xNzhmZGM5IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fZWF0LmMKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2VhdC5jCkBAIC0xNSwxMCArMTUsNTYgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKiovCiAKLSNpbmNsdWRlICJwYWxfYXR0ZXN0YXRpb25fZWF0LmgiCisjaW5jbHVkZSAicGFsX2F0dGVzdGF0aW9uX2NyeXB0by5oIgogCi11aW50MzJfdCAgbWFuZGF0b3J5X2NsYWltcyA9IDAsIG1hbmRhcm90eV9zd19jb21wb25lbnRzID0gMDsKLWJvb2xfdCAgICBzd19jb21wb25lbnRfcHJlc2VudCA9IDA7Cit1aW50MzJfdCAgICBtYW5kYXRvcnlfY2xhaW1zID0gMDsKK3VpbnQzMl90ICAgIG1hbmRhcm90eV9zd19jb21wb25lbnRzID0gMDsKK2Jvb2xfdCAgICAgIHN3X2NvbXBvbmVudF9wcmVzZW50ID0gMDsKKworc3RhdGljIGludCBwYWxfZW5jb2RlX2Nvc2Vfa2V5KHN0cnVjdCBxX3VzZWZ1bF9idWZfYyAqY29zZV9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1ZiBidWZmZXJfZm9yX2Nvc2Vfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyB4X2NvcmQsIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyB5X2NvcmQpCit7CisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU7CisgICAgUUNCT1JFcnJvciAgICAgICAgICAgICAgICBxY2Jvcl9yZXN1bHQ7CisgICAgUUNCT1JFbmNvZGVDb250ZXh0ICAgICAgICBjYm9yX2VuY29kZV9jdHg7CisgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgICBjb3NlX2N1cnZlX2lkID0gUF8yNTY7CisgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jICAgICAgIGVuY29kZWRfa2V5X2lkOworCisgICAgLyogR2V0IHRoZSBwdWJsaWMga2V5IHggYW5kIHkgKi8KKyAgICAvKiBFbmNvZGUgaXQgaW50byBhIENPU0VfS2V5IHN0cnVjdHVyZSAqLworICAgIFFDQk9SRW5jb2RlX0luaXQoJmNib3JfZW5jb2RlX2N0eCwgYnVmZmVyX2Zvcl9jb3NlX2tleSk7CisgICAgUUNCT1JFbmNvZGVfT3Blbk1hcCgmY2Jvcl9lbmNvZGVfY3R4KTsKKyAgICBRQ0JPUkVuY29kZV9BZGRJbnQ2NFRvTWFwTigmY2Jvcl9lbmNvZGVfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPU0VfS0VZX0NPTU1PTl9LVFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09TRV9LRVlfVFlQRV9FQzIpOworICAgIFFDQk9SRW5jb2RlX0FkZEludDY0VG9NYXBOKCZjYm9yX2VuY29kZV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09TRV9LRVlfUEFSQU1fQ1JWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvc2VfY3VydmVfaWQpOworICAgIFFDQk9SRW5jb2RlX0FkZEJ5dGVzVG9NYXBOKCZjYm9yX2VuY29kZV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09TRV9LRVlfUEFSQU1fWF9DT09SRElOQVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhfY29yZCk7CisgICAgUUNCT1JFbmNvZGVfQWRkQnl0ZXNUb01hcE4oJmNib3JfZW5jb2RlX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1NFX0tFWV9QQVJBTV9ZX0NPT1JESU5BVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeV9jb3JkKTsKKyAgICBRQ0JPUkVuY29kZV9DbG9zZU1hcCgmY2Jvcl9lbmNvZGVfY3R4KTsKKworICAgIHFjYm9yX3Jlc3VsdCA9IFFDQk9SRW5jb2RlX0ZpbmlzaCgmY2Jvcl9lbmNvZGVfY3R4LCAmZW5jb2RlZF9rZXlfaWQpOworICAgIGlmIChxY2Jvcl9yZXN1bHQgIT0gUUNCT1JfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIC8qIE1haW5seSBtZWFucyB0aGF0IHRoZSBDT1NFX0tleSB3YXMgdG9vIGJpZyBmb3IgYnVmZmVyX2Zvcl9jb3NlX2tleSAqLworICAgICAgICByZXR1cm5fdmFsdWUgPSBQQUxfQVRURVNUX0VSUl9QUk9URUNURURfSEVBREVSUzsKKyAgICAgICAgZ290byBEb25lOworICAgIH0KKworICAgIC8qIEZpbmlzaCB1cCBhbmQgcmV0dXJuICovCisgICAgKmNvc2Vfa2V5ID0gZW5jb2RlZF9rZXlfaWQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUEFMX0FUVEVTVF9TVUNDRVNTOworCitEb25lOgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKIAogc3RhdGljIGludCBnZXRfaXRlbXNfaW5fbWFwKFFDQk9SRGVjb2RlQ29udGV4dCAqZGVjb2RlX2NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0ZW1zX3RvX2dldF90ICppdGVtX2xpc3QpCkBAIC05MCw3ICsxMzYsNyBAQAogfQogCiBzdGF0aWMgaW50IHBhcnNlX3VucHJvdGVjdGVkX2hlYWRlcnMoUUNCT1JEZWNvZGVDb250ZXh0ICpkZWNvZGVfY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXNlZnVsX2J1Zl9jICpjaGlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgKmNoaWxkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmxvb3BfYmFjaykKIHsKICAgICBzdHJ1Y3QgaXRlbXNfdG9fZ2V0X3QgICBpdGVtX2xpc3RbM107CkBAIC0xMjAsNyArMTY2LDcgQEAKICAgICByZXR1cm4gUEFMX0FUVEVTVF9TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IHBhcnNlX3Byb3RlY3RlZF9oZWFkZXJzKHN0cnVjdCB1c2VmdWxfYnVmX2MgcHJvdGVjdGVkX2hlYWRlcnMsCitzdGF0aWMgaW50IHBhcnNlX3Byb3RlY3RlZF9oZWFkZXJzKHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBwcm90ZWN0ZWRfaGVhZGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqYWxnX2lkKQogewogICAgIFFDQk9SRGVjb2RlQ29udGV4dCAgZGVjb2RlX2NvbnRleHQ7CkBAIC0xNTYsNyArMjAyLDcgQEAKICAgICBAcmV0dXJuICAgLSBlcnJvciBzdGF0dXMKICoqLwogc3RhdGljIGludCBwYXJzZV9jbGFpbXMoUUNCT1JEZWNvZGVDb250ZXh0ICpkZWNvZGVfY29udGV4dCwgUUNCT1JJdGVtIGl0ZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1c2VmdWxfYnVmX2MgY29tcGxldGVkX2NoYWxsZW5nZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGNvbXBsZXRlZF9jaGFsbGVuZ2UpCiB7CiAgICAgaW50IGksIGNvdW50ID0gMDsKICAgICBpbnQgc3RhdHVzID0gUEFMX0FUVEVTVF9TVUNDRVNTOwpAQCAtMjgxLDE2ICszMjcsNDIgQEAKIGludDMyX3QgcGFsX2luaXRpYWxfYXR0ZXN0X3ZlcmlmeV90b2tlbih1aW50OF90ICpjaGFsbGVuZ2UsIHVpbnQzMl90IGNoYWxsZW5nZV9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnRva2VuLCB1aW50MzJfdCB0b2tlbl9zaXplKQogewotICAgIGludCAgICAgICAgICAgICAgICAgc3RhdHVzID0gUEFMX0FUVEVTVF9TVUNDRVNTOworICAgIGludDMyX3QgICAgICAgICAgICAgc3RhdHVzID0gUEFMX0FUVEVTVF9TVUNDRVNTOwogICAgIGJvb2wgICAgICAgICAgICAgICAgc2hvcnRfY2lyY3VpdDsKICAgICBpbnQzMl90ICAgICAgICAgICAgIGNvc2VfYWxnb3JpdGhtX2lkOwogICAgIFFDQk9SSXRlbSAgICAgICAgICAgaXRlbTsKICAgICBRQ0JPUkRlY29kZUNvbnRleHQgIGRlY29kZV9jb250ZXh0OwotICAgIHN0cnVjdCB1c2VmdWxfYnVmX2MgY29tcGxldGVkX2NoYWxsZW5nZTsKLSAgICBzdHJ1Y3QgdXNlZnVsX2J1Zl9jIGNvbXBsZXRlZF90b2tlbjsKLSAgICBzdHJ1Y3QgdXNlZnVsX2J1Zl9jIHBheWxvYWQ7Ci0gICAgc3RydWN0IHVzZWZ1bF9idWZfYyBwcm90ZWN0ZWRfaGVhZGVyczsKLSAgICBzdHJ1Y3QgdXNlZnVsX2J1Zl9jIGtpZDsKKyAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgY29tcGxldGVkX2NoYWxsZW5nZTsKKyAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgY29tcGxldGVkX3Rva2VuOworICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBwYXlsb2FkOworICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBzaWduYXR1cmU7CisgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHByb3RlY3RlZF9oZWFkZXJzOworICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBraWQ7CisgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHhfY29yZDsKKyAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgeV9jb3JkOworICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBjb3NlX2tleV90b19oYXNoOworICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBrZXlfaGFzaDsKKyAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgdG9rZW5faGFzaDsKKyAgICBVU0VGVUxfQlVGX01BS0VfU1RBQ0tfVUIoYnVmX3RvX2hvbGRfeF9jb29yZCwgVF9DT1NFX0NSWVBUT19FQ19QMjU2X0NPT1JEX1NJWkUpOworICAgIFVTRUZVTF9CVUZfTUFLRV9TVEFDS19VQihidWZfdG9faG9sZF95X2Nvb3JkLCBUX0NPU0VfQ1JZUFRPX0VDX1AyNTZfQ09PUkRfU0laRSk7CisgICAgVVNFRlVMX0JVRl9NQUtFX1NUQUNLX1VCKGJ1ZmZlcl9mb3Jfa2lkLCBUX0NPU0VfQ1JZUFRPX1NIQTI1Nl9TSVpFKTsKKyAgICBVU0VGVUxfQlVGX01BS0VfU1RBQ0tfVUIoYnVmZmVyX2Zvcl9jb3NlX2tleSwgTUFYX0VOQ09ERURfQ09TRV9LRVlfU0laRSk7CisgICAgVVNFRlVMX0JVRl9NQUtFX1NUQUNLX1VCKGJ1ZmZlcl9mb3JfZW5jb2RlZF9rZXksIE1BWF9FTkNPREVEX0NPU0VfS0VZX1NJWkUpOworICAgIFVTRUZVTF9CVUZfTUFLRV9TVEFDS19VQihidWZmZXJfZm9yX3Rva2VuX2hhc2gsIFRfQ09TRV9DUllQVE9fU0hBMjU2X1NJWkUpOworCisgICAga2lkLnB0ciA9IGJ1ZmZlcl9mb3JfZW5jb2RlZF9rZXkucHRyOworCisgICAgbWVtY3B5KGJ1Zl90b19ob2xkX3hfY29vcmQucHRyLCAoY29uc3Qgdm9pZCAqKWF0dGVzdF9rZXkucHVieF9rZXksIGF0dGVzdF9rZXkucHVieF9rZXlfc2l6ZSk7CisgICAgbWVtY3B5KGJ1Zl90b19ob2xkX3lfY29vcmQucHRyLCAoY29uc3Qgdm9pZCAqKWF0dGVzdF9rZXkucHVieV9rZXksIGF0dGVzdF9rZXkucHVieV9rZXlfc2l6ZSk7CisKKyAgICAvKiBVcGRhdGUgc2l6ZSAqLworICAgIGJ1Zl90b19ob2xkX3hfY29vcmQubGVuID0gYXR0ZXN0X2tleS5wdWJ4X2tleV9zaXplOworICAgIGJ1Zl90b19ob2xkX3lfY29vcmQubGVuID0gYXR0ZXN0X2tleS5wdWJ5X2tleV9zaXplOworCisgICAgeF9jb3JkLnB0ciA9IGJ1Zl90b19ob2xkX3hfY29vcmQucHRyOworICAgIHhfY29yZC5sZW4gPSBidWZfdG9faG9sZF94X2Nvb3JkLmxlbjsKKyAgICB5X2NvcmQucHRyID0gYnVmX3RvX2hvbGRfeV9jb29yZC5wdHI7CisgICAgeV9jb3JkLmxlbiA9IGJ1Zl90b19ob2xkX3lfY29vcmQubGVuOwogCiAgICAgLyogQ29uc3RydWN0IHRoZSB0b2tlbiBidWZmZXIgZm9yIHZhbGlkYXRpb24gKi8KICAgICBjb21wbGV0ZWRfdG9rZW4ucHRyID0gdG9rZW47CkBAIC0zNDUsNiArNDE3LDI3IEBACiAgICAgaWYgKHN0YXR1cyAhPSBQQUxfQVRURVNUX1NVQ0NFU1MpCiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAKKyAgICAvKiBFbmNvZGUgdGhlIGdpdmVuIHB1YmxpYyBrZXkgKi8KKyAgICBzdGF0dXMgPSBwYWxfZW5jb2RlX2Nvc2Vfa2V5KCZjb3NlX2tleV90b19oYXNoLCBidWZmZXJfZm9yX2Nvc2Vfa2V5LCB4X2NvcmQsIHlfY29yZCk7CisgICAgaWYgKHN0YXR1cyAhPSBQQUxfQVRURVNUX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICAvKiBDcmVhdGUgaGFzaCBvZiB0aGUgZ2l2ZW4gcHVibGljIGtleSAqLworICAgIHN0YXR1cyA9IHBhbF9jcmVhdGVfc2hhMjU2KGNvc2Vfa2V5X3RvX2hhc2gsIGJ1ZmZlcl9mb3Jfa2lkLCAma2V5X2hhc2gpOworICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICAvKiBDb21wYXJlIHRoZSBoYXNoIG9mIHRoZSBwdWJsaWMga2V5IGluIHRva2VuIGFuZCBoYXNoIG9mIHRoZSBnaXZlbiBwdWJsaWMga2V5ICovCisgICAgaWYgKGtpZC5sZW4gIT0ga2V5X2hhc2gubGVuKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFBBTF9BVFRFU1RfSEFTSF9MRU5HVEhfTUlTTUFUQ0g7CisgICAgfQorCisgICAgaWYgKG1lbWNtcChraWQucHRyLCBrZXlfaGFzaC5wdHIsIGtpZC5sZW4pICE9IDApCisgICAgeworICAgICAgICByZXR1cm4gUEFMX0FUVEVTVF9IQVNIX01JU01BVENIOworICAgIH0KKwogICAgIC8qIEdldCB0aGUgcGF5bG9hZCAqLwogICAgIFFDQk9SRGVjb2RlX0dldE5leHQoJmRlY29kZV9jb250ZXh0LCAmaXRlbSk7CiAgICAgaWYgKGl0ZW0udURhdGFUeXBlICE9IFFDQk9SX1RZUEVfQllURV9TVFJJTkcpCkBAIC0zNTcsNiArNDUwLDE5IEBACiAgICAgaWYgKGl0ZW0udURhdGFUeXBlICE9IFFDQk9SX1RZUEVfQllURV9TVFJJTkcpCiAgICAgICAgIHJldHVybiBQQUxfQVRURVNUX1RPS0VOX0VSUl9DQk9SX0ZPUk1BVFRJTkc7CiAKKyAgICBzaWduYXR1cmUgPSBpdGVtLnZhbC5zdHJpbmc7CisKKyAgICAvKiBDb21wdXRlIHRoZSBoYXNoIGZyb20gdGhlIHRva2VuICovCisgICAgc3RhdHVzID0gcGFsX2NvbXB1dGVfaGFzaChjb3NlX2FsZ29yaXRobV9pZCwgYnVmZmVyX2Zvcl90b2tlbl9oYXNoLCAmdG9rZW5faGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZF9oZWFkZXJzLCBwYXlsb2FkKTsKKyAgICBpZiAoc3RhdHVzICE9IFBBTF9BVFRFU1RfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIC8qIFZlcmlmeSB0aGUgc2lnbmF0dXJlICovCisgICAgc3RhdHVzID0gcGFsX2NyeXB0b19wdWJfa2V5X3ZlcmlmeShjb3NlX2FsZ29yaXRobV9pZCwgdG9rZW5faGFzaCwgc2lnbmF0dXJlKTsKKyAgICBpZiAoc3RhdHVzICE9IFBBTF9BVFRFU1RfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKwogICAgIC8qIEluaXRpYWxpemUgdGhlIERlY29kZXIgYW5kIHZhbGlkYXRlIHRoZSBwYXlsb2FkIGZvcm1hdCAqLwogICAgIFFDQk9SRGVjb2RlX0luaXQoJmRlY29kZV9jb250ZXh0LCBwYXlsb2FkLCBRQ0JPUl9ERUNPREVfTU9ERV9OT1JNQUwpOwogICAgIHN0YXR1cyA9IFFDQk9SRGVjb2RlX0dldE5leHQoJmRlY29kZV9jb250ZXh0LCAmaXRlbSk7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fZWF0LmggYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fZWF0LmgKaW5kZXggOWY0MzVmYi4uOGEwYzU0NSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2VhdC5oCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9lYXQuaApAQCAtMTcsMTYgKzE3LDcwIEBACiAKICNpbmNsdWRlICJxY2Jvci5oIgogI2luY2x1ZGUgInBhbF9jb21tb24uaCIKKyNpbmNsdWRlICJwc2EvY3J5cHRvLmgiCiAKICNkZWZpbmUgUEFMX0FUVEVTVF9NSU5fRVJST1IgICAgICAgICAgICAgIDMwCiAKKy8qIE5JU1QgUC0yNTYgYWxzbyBrbm93biBhcyBzZWNwMjU2cjEgKi8KKyNkZWZpbmUgUF8yNTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKwogI2RlZmluZSBDT1NFX0hFQURFUl9QQVJBTV9BTEcgICAgICAgICAgICAgMQogI2RlZmluZSBDT1NFX0hFQURFUl9QQVJBTV9LSUQgICAgICAgICAgICAgNAogCi0jZGVmaW5lIE1BTkRBVE9SWV9DTEFJTV9XSVRIX1NXX0NPTVAgICAgICA4NjIKLSNkZWZpbmUgTUFOREFUT1JZX0NMQUlNX05PX1NXX0NPTVAgICAgICAgIDkyNgotI2RlZmluZSBNQU5EQVRPUllfU1dfQ09NUCAgICAgICAgICAgICAgICAgMzYKLSNkZWZpbmUgQ0JPUl9BUk1fVE9UQUxfQ0xBSU1fSU5TVEFOQ0UgICAgIDEwCisjZGVmaW5lIENPU0VfS0VZX0NPTU1PTl9LVFkgICAgICAgICAgICAgICAxCisjZGVmaW5lIENPU0VfS0VZX1RZUEVfRUMyICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENPU0VfS0VZX1BBUkFNX0NSViAgICAgICAgICAgICAgIC0xCisjZGVmaW5lIENPU0VfS0VZX1BBUkFNX1hfQ09PUkRJTkFURSAgICAgIC0yCisjZGVmaW5lIENPU0VfS0VZX1BBUkFNX1lfQ09PUkRJTkFURSAgICAgIC0zCisjZGVmaW5lIENPU0VfQUxHT1JJVEhNX0VTMjU2ICAgICAgICAgICAgIC03CisjZGVmaW5lIENPU0VfQUxHX1NIQTI1Nl9QUk9QUklFVEFSWSAgICAgIC03MjAwMAorCisvKioKKyAqIFRoZSBzaXplIG9mIFggYW5kIFkgY29vcmRpbmF0ZSBpbiAyIHBhcmFtZXRlciBzdHlsZSBFQyBwdWJsaWMKKyAqIGtleS4gRm9ybWF0IGlzIGFzIGRlZmluZWQgaW4gW0NPU0UgKFJGQyA4MTUyKV0KKyAqIChodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjODE1MikgYW5kIFtTRUMgMTogRWxsaXB0aWMgQ3VydmUKKyAqIENyeXB0b2dyYXBoeV0oaHR0cDovL3d3dy5zZWNnLm9yZy9zZWMxLXYyLnBkZikuCisgKgorICogVGhpcyBzaXplIGlzIHdlbGwta25vd24gYW5kIGRvY3VtZW50ZWQgaW4gcHVibGljIHN0YW5kYXJkcy4KKyAqLworI2RlZmluZSBUX0NPU0VfQ1JZUFRPX0VDX1AyNTZfQ09PUkRfU0laRSAgMzIKKyNkZWZpbmUgVF9DT1NFX0NSWVBUT19TSEEyNTZfU0laRSAgICAgICAgIDMyCisKKyNkZWZpbmUgTUFYX0VOQ09ERURfQ09TRV9LRVlfU0laRSBcCisgICAgMSArIC8qIDEgYnl0ZSB0byBlbmNvZGUgbWFwICovIFwKKyAgICAyICsgLyogMiBieXRlcyB0byBlbmNvZGUga2V5IHR5cGUgKi8gXAorICAgIDIgKyAvKiAyIGJ5dGVzIHRvIGVuY29kZSBjdXJ2ZSAqLyBcCisgICAgMiAqIC8qIHRoZSBYIGFuZCBZIGNvb3JkaW5hdGVzIGF0IDMyIGJ5dGVzIGVhY2ggKi8gXAorICAgICAgICAoVF9DT1NFX0NSWVBUT19FQ19QMjU2X0NPT1JEX1NJWkUgKyAxICsgMikKKyNkZWZpbmUgVVNFRlVMX0JVRl9NQUtFX1NUQUNLX1VCIFVzZWZ1bEJ1Zl9NQUtFX1NUQUNLX1VCCisKKyNkZWZpbmUgQ09TRV9TSUdfQ09OVEVYVF9TVFJJTkdfU0lHTkFUVVJFMSAiU2lnbmF0dXJlMSIKKworLyogUHJpdmF0ZSB2YWx1ZS4gSW50ZW50aW9uYWxseSBub3QgZG9jdW1lbnRlZCBmb3IgRG94eWdlbi4KKyAqIFRoaXMgaXMgdGhlIHNpemUgYWxsb2NhdGVkIGZvciB0aGUgZW5jb2RlZCBwcm90ZWN0ZWQgaGVhZGVycy4gIEl0CisgKiBuZWVkcyB0byBiZSBiaWcgZW5vdWdoIGZvciBtYWtlX3Byb3RlY3RlZF9oZWFkZXIoKSB0byBzdWNjZWVkLiBJdAorICogY3VycmVudGx5IHNpemVkIGZvciBvbmUgaGVhZGVyIHdpdGggYW4gYWxnb3JpdGhtIElEIHVwIHRvIDMyIGJpdHMKKyAqIGxvbmcgLS0gb25lIGJ5dGUgZm9yIHRoZSB3cmFwcGluZyBtYXAsIG9uZSBieXRlIGZvciB0aGUgbGFiZWwsIDUKKyAqIGJ5dGVzIGZvciB0aGUgSUQuIElmIHRoaXMgaXMgbWFkZSBhY2NpZGVudGlhbGx5IHRvbyBzbWFsbCwgUUNCT1Igd2lsbAorICogb25seSByZXR1cm4gYW4gZXJyb3IsIGFuZCBub3Qgb3ZlcnJ1biBhbnkgYnVmZmVycy4KKyAqCisgKiA5IGV4dHJhIGJ5dGVzIGFyZSBhZGRlZCwgcm91bmRpbmcgaXQgdXAgdG8gMTYgdG90YWwsIGluIGNhc2Ugc29tZQorICogb3RoZXIgcHJvdGVjdGVkIGhlYWRlciBpcyB0byBiZSBhZGRlZC4KKyAqLworI2RlZmluZSBUX0NPU0VfU0lHTjFfTUFYX1BST1RfSEVBREVSICgxKzErNSs5KQorCisvKioKKyAqIFRoaXMgaXMgdGhlIHNpemUgb2YgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIENCT1IgZW5jb2RlZCBUQlMKKyAqIGJ5dGVzLiBJdCBpcyBhcm91bmQgMjAgYnl0ZXMuIFNlZSBjcmVhdGVfdGJzX2hhc2goKS4KKyAqLworI2RlZmluZSBUX0NPU0VfU0laRV9PRl9UQlMgXAorICAgIDEgKyAvKiBGb3Igb3BlbmluZyB0aGUgYXJyYXkgKi8gXAorICAgIHNpemVvZihDT1NFX1NJR19DT05URVhUX1NUUklOR19TSUdOQVRVUkUxKSArIC8qICJTaWduYXR1cmUxIiAqLyBcCisgICAgMiArIC8qIE92ZXJoZWFkIGZvciBlbmNvZGluZyBzdHJpbmcgKi8gXAorICAgIFRfQ09TRV9TSUdOMV9NQVhfUFJPVF9IRUFERVIgKyAvKiBlbnRpcmUgcHJvdGVjdGVkIGhlYWRlcnMgKi8gXAorICAgIDMgKiAoIC8qIDMgTlVMTCBic3RycyBmb3IgZmllbGRzIG5vdCB1c2VkICovIFwKKyAgICAgICAgMSAvKiBzaXplIG9mIGEgTlVMTCBic3RyICovICBcCisgICAgKQogCiAvKgogIENCT1IgTGFiZWwgZm9yIHByb3ByaWV0YXJ5IGhlYWRlciBpbmRpY2F0aW5nIHNob3J0LWNpcmN1aXQKQEAgLTQ3LDYgKzEwMSw4IEBACiAjZGVmaW5lIEVBVF9DQk9SX0FSTV9MQUJFTF9VRUlEICAgICAgICAgICAgICAgICAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgLSA5KQogI2RlZmluZSBFQVRfQ0JPUl9BUk1fTEFCRUxfT1JJR0lOQVRJT04gICAgICAgICAgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFIC0gMTApCiAKKyNkZWZpbmUgQ0JPUl9BUk1fVE9UQUxfQ0xBSU1fSU5TVEFOQ0UgICAgICAgICAgIDEwCisKICNkZWZpbmUgRUFUX0NCT1JfU1dfQ09NUE9ORU5UX1RZUEUgICAgICAgICAgICAgICgxdSkKICNkZWZpbmUgRUFUX0NCT1JfU1dfQ09NUE9ORU5UX01FQVNVUkVNRU5UICAgICAgICgydSkKICNkZWZpbmUgRUFUX0NCT1JfU1dfQ09NUE9ORU5UX0VQT0NIICAgICAgICAgICAgICgzdSkKQEAgLTU0LDYgKzExMCw0MCBAQAogI2RlZmluZSBFQVRfQ0JPUl9TV19DT01QT05FTlRfU0lHTkVSX0lEICAgICAgICAgKDV1KQogI2RlZmluZSBFQVRfQ0JPUl9TV19DT01QT05FTlRfTUVBU1VSRU1FTlRfREVTQyAgKDZ1KQogCisjZGVmaW5lIE1BTkRBVE9SWV9DTEFJTV9XSVRIX1NXX0NPTVAgICAgICAgICAgICgxIDw8IChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBFQVRfQ0JPUl9BUk1fTEFCRUxfTk9OQ0UpICAgICAgICAgICAgICB8ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDw8IChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBFQVRfQ0JPUl9BUk1fTEFCRUxfVUVJRCkgICAgICAgICAgICAgICB8ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDw8IChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBFQVRfQ0JPUl9BUk1fTEFCRUxfSU1QTEVNRU5UQVRJT05fSUQpICB8ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDw8IChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBFQVRfQ0JPUl9BUk1fTEFCRUxfQ0xJRU5UX0lEKSAgICAgICAgICB8ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDw8IChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBFQVRfQ0JPUl9BUk1fTEFCRUxfU0VDVVJJVFlfTElGRUNZQ0xFKSB8ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDw8IChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBFQVRfQ0JPUl9BUk1fTEFCRUxfQk9PVF9TRUVEKSAgICAgICAgICB8ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDw8IChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBFQVRfQ0JPUl9BUk1fTEFCRUxfU1dfQ09NUE9ORU5UUykpCisKKyNkZWZpbmUgTUFOREFUT1JZX0NMQUlNX05PX1NXX0NPTVAgICAgICAgICAgICAgKDEgPDwgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEVBVF9DQk9SX0FSTV9MQUJFTF9OT05DRSkgICAgICAgICAgICAgIHwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPDwgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEVBVF9DQk9SX0FSTV9MQUJFTF9VRUlEKSAgICAgICAgICAgICAgIHwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPDwgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEVBVF9DQk9SX0FSTV9MQUJFTF9JTVBMRU1FTlRBVElPTl9JRCkgIHwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPDwgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEVBVF9DQk9SX0FSTV9MQUJFTF9DTElFTlRfSUQpICAgICAgICAgIHwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPDwgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEVBVF9DQk9SX0FSTV9MQUJFTF9TRUNVUklUWV9MSUZFQ1lDTEUpIHwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPDwgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEVBVF9DQk9SX0FSTV9MQUJFTF9CT09UX1NFRUQpICAgICAgICAgIHwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPDwgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEVBVF9DQk9SX0FSTV9MQUJFTF9OT19TV19DT01QT05FTlRTKSkKKworI2RlZmluZSBNQU5EQVRPUllfU1dfQ09NUCAgICAgICAgICAgICAgICAgICAgICAoMSA8PCBFQVRfQ0JPUl9TV19DT01QT05FTlRfTUVBU1VSRU1FTlQgICAgICB8ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDw8IEVBVF9DQk9SX1NXX0NPTVBPTkVOVF9TSUdORVJfSUQpCisKKyNkZWZpbmUgTlVMTF9VU0VGVUxfQlVGX0MgIE5VTExVc2VmdWxCdWZDCiAKIGVudW0gYXR0ZXN0YXRpb25fZXJyb3JfY29kZSB7CiAgICAgUEFMX0FUVEVTVF9TVUNDRVNTID0gMCwKQEAgLTYxLDYgKzE1MSwxMyBAQAogICAgIFBBTF9BVFRFU1RfVE9LRU5fQ0hBTExFTkdFX01JU01BVENILAogICAgIFBBTF9BVFRFU1RfVE9LRU5fTk9UX1NVUFBPUlRFRCwKICAgICBQQUxfQVRURVNUX1RPS0VOX05PVF9BTExfTUFOREFUT1JZX0NMQUlNUywKKyAgICBQQUxfQVRURVNUX0hBU0hfTEVOR1RIX01JU01BVENILAorICAgIFBBTF9BVFRFU1RfSEFTSF9NSVNNQVRDSCwKKyAgICBQQUxfQVRURVNUX0hBU0hfRkFJTCwKKyAgICBQQUxfQVRURVNUX0hBU0hfVU5TVVBQT1JURUQsCisgICAgUEFMX0FUVEVTVF9IQVNIX0JVRkZFUl9TSVpFLAorICAgIFBBTF9BVFRFU1RfRVJSX1BST1RFQ1RFRF9IRUFERVJTLAorICAgIFBBTF9BVFRFU1RfRVJSX1NJR05fU1RSVUNULAogICAgIFBBTF9BVFRFU1RfRVJST1IsCiB9OwogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25faW50Zi5oIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2ludGYuaAppbmRleCBlZjEzMmI1Li4xMmY2ZWU5IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25faW50Zi5oCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9pbnRmLmgKQEAgLTE4LDcgKzE4LDcgQEAKICNpZm5kZWYgX1BBTF9JTklUSUFMX0FUVEVTVEFUSU9OX0hfCiAjZGVmaW5lIF9QQUxfSU5JVElBTF9BVFRFU1RBVElPTl9IXwogCi0jaW5jbHVkZSAicGFsX2F0dGVzdGF0aW9uX2VhdC5oIgorI2luY2x1ZGUgInBhbF9hdHRlc3RhdGlvbl9jcnlwdG8uaCIKIAogZW51bSBhdHRlc3RhdGlvbl9mdW5jdGlvbl9jb2RlIHsKICAgICBQQUxfSU5JVElBTF9BVFRFU1RfR0VUX1RPS0VOICAgICAgICA9IDB4MSwKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvc3BlL3BhbF9kcml2ZXJfaW50Zi5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9zcGUvcGFsX2RyaXZlcl9pbnRmLmMKaW5kZXggY2M4YjUzNy4uZmQzMDc4MyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9zcGUvcGFsX2RyaXZlcl9pbnRmLmMKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9zcGUvcGFsX2RyaXZlcl9pbnRmLmMKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgICAgICAgLSBkYXRhICAgICA6IFZhbHVlIGZvciBmb3JtYXQgc3BlY2lmaWVyCiAqKi8KIAotdm9pZCBwYWxfcHJpbnQoY2hhciAqc3RyLCB1aW50MzJfdCBkYXRhKQordm9pZCBwYWxfcHJpbnQoY2hhciAqc3RyLCBpbnQzMl90IGRhdGEpCiB7CiAgIHBhbF9jbXNka19wcmludChzdHIsZGF0YSk7CiAKQEAgLTExMCwzICsxMTAsMjMgQEAKICAgICByZXR1cm4gKHBhbF93ZF9jbXNka19pc19lbmFibGVkKGJhc2VfYWRkcikpOwogfQogCisvKioKKyAgICBAYnJpZWYgICAtIFRyaWdnZXIgaW50ZXJydXB0IGZvciBpcnEgc2lnbmFsIGFzc2lnbmVkIHRvIGRyaXZlciBwYXJ0aXRpb24KKyAgICAgICAgICAgICAgIGJlZm9yZSByZXR1cm4gdG8gY2FsbGVyLgorICAgIEBwYXJhbSAgIC0gdm9pZAorICAgIEByZXR1cm4gIC0gdm9pZAorKiovCit2b2lkIHBhbF9nZW5lcmF0ZV9pbnRlcnJ1cHQodm9pZCkKK3sKKyAgICBwYWxfdWFydF9jbXNka19nZW5lcmF0ZV9pcnEoKTsKK30KKworLyoqCisgICAgQGJyaWVmICAgLSBEaXNhYmxlIGludGVycnVwdCB0aGF0IHdhcyBnZW5lcmF0ZWQgdXNpbmcgcGFsX2dlbmVyYXRlX2ludGVycnVwdCBBUEkuCisgICAgQHBhcmFtICAgLSB2b2lkCisgICAgQHJldHVybiAgLSB2b2lkCisqKi8KK3ZvaWQgcGFsX2Rpc2FibGVfaW50ZXJydXB0KHZvaWQpCit7CisgICAgcGFsX3VhcnRfY21zZGtfZGlzYWJsZV9pcnEoKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc19tYmVkb3NfZnZwX21wczJfbTQvc3BlL3BhbF9kcml2ZXJfaW50Zi5oIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9zcGUvcGFsX2RyaXZlcl9pbnRmLmgKaW5kZXggZGE4NWE2My4uY2VmMzRjYSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9zcGUvcGFsX2RyaXZlcl9pbnRmLmgKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX21iZWRvc19mdnBfbXBzMl9tNC9zcGUvcGFsX2RyaXZlcl9pbnRmLmgKQEAgLTIzLDExICsyMywxMyBAQAogI2luY2x1ZGUgInBhbF93ZF9jbXNkay5oIgogCiB2b2lkIHBhbF91YXJ0X2luaXQodWludDMyX3QgdWFydF9iYXNlX2FkZHIpOwotdm9pZCBwYWxfcHJpbnQoY2hhciAqc3RyLCB1aW50MzJfdCBkYXRhKTsKK3ZvaWQgcGFsX3ByaW50KGNoYXIgKnN0ciwgaW50MzJfdCBkYXRhKTsKIGludCBwYWxfbnZtZW1fd3JpdGUoYWRkcl90IGJhc2UsIHVpbnQzMl90IG9mZnNldCwgdm9pZCAqYnVmZmVyLCBpbnQgc2l6ZSk7CiBpbnQgcGFsX252bWVtX3JlYWQoYWRkcl90IGJhc2UsIHVpbnQzMl90IG9mZnNldCwgdm9pZCAqYnVmZmVyLCBpbnQgc2l6ZSk7CiBpbnQgcGFsX3dkX3RpbWVyX2luaXQoYWRkcl90IGJhc2VfYWRkciwgdWludDMyX3QgdGltZV91cywgdWludDMyX3QgdGltZXJfdGlja191cyk7CiBpbnQgcGFsX3dkX3RpbWVyX2VuYWJsZShhZGRyX3QgYmFzZV9hZGRyKTsKIGludCBwYWxfd2RfdGltZXJfZGlzYWJsZShhZGRyX3QgYmFzZV9hZGRyKTsKIGludCBwYWxfd2RfdGltZXJfaXNfZW5hYmxlZChhZGRyX3QgYmFzZV9hZGRyKTsKK3ZvaWQgcGFsX2dlbmVyYXRlX2ludGVycnVwdCh2b2lkKTsKK3ZvaWQgcGFsX2Rpc2FibGVfaW50ZXJydXB0KHZvaWQpOwogI2VuZGlmIC8qIF9QQUxfRFJJVkVSX0lOVEZfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fYW41MjEvTWFrZWZpbGUgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX2FuNTIxL01ha2VmaWxlCmluZGV4IDNiZDhjMjMuLjQ3Mzg3OWQgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fYW41MjEvTWFrZWZpbGUKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9hbjUyMS9NYWtlZmlsZQpAQCAtODMsNiArODMsNyBAQAogaWZlcSAoJHtQU0FfSU5JVElBTF9BVFRFU1RBVElPTl9JTVBMRU1FTlRFRH0sMSkKIFNSQ19DX05TUEUgKz0gcGFsX2F0dGVzdGF0aW9uX2ludGYuYwogU1JDX0NfTlNQRSArPSBwYWxfYXR0ZXN0YXRpb25fZWF0LmMKK1NSQ19DX05TUEUgKz0gcGFsX2F0dGVzdGF0aW9uX2NyeXB0by5jCiBlbHNlCiBTUkNfQ19OU1BFICs9IHBhbF9hdHRlc3RhdGlvbl9lbXB0eV9pbnRmLmMKIGVuZGlmCkBAIC05OCw3ICs5OSw3IEBACiAgICAgICAgICAtSSQoU09VUkNFKS9wbGF0Zm9ybS90YXJnZXRzLyQoVEFSR0VUKS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24gXAogICAgICAgICAgLUkkKFNPVVJDRSkvcGxhdGZvcm0vdGFyZ2V0cy8kKFRBUkdFVCkvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL2V4dC9pbmMgXAogICAgICAgICAgLUkkKFNPVVJDRSkvcGxhdGZvcm0vdGFyZ2V0cy8kKFRBUkdFVCkvbnNwZS9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UgXAotICAgICAgICAgLUkkKFNPVVJDRSkvcGxhdGZvcm0vdGFyZ2V0cy8kKFRBUkdFVCkvbnNwZS9wcm90ZWN0ZWRfc3RvcmFnZQorICAgICAgICAgLUkkKFNPVVJDRSkvcGxhdGZvcm0vdGFyZ2V0cy8kKFRBUkdFVCkvbnNwZS9wcm90ZWN0ZWRfc3RvcmFnZSBcCiAKIFZQQVRIPSQoU09VUkNFKS9wbGF0Zm9ybS90YXJnZXRzLyQoVEFSR0VUKS86IFwKICAgICAgICQoU09VUkNFKS9wbGF0Zm9ybS90YXJnZXRzLyQoVEFSR0VUKS9zcGU6IFwKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fYW41MjEvbWFuaWZlc3RzL2NvbW1vbi9kcml2ZXJfcGFydGl0aW9uX3BzYS5qc29uIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9hbjUyMS9tYW5pZmVzdHMvY29tbW9uL2RyaXZlcl9wYXJ0aXRpb25fcHNhLmpzb24KaW5kZXggNWQ1NzU3MS4uZTNjZWM5MiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9hbjUyMS9tYW5pZmVzdHMvY29tbW9uL2RyaXZlcl9wYXJ0aXRpb25fcHNhLmpzb24KKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9hbjUyMS9tYW5pZmVzdHMvY29tbW9uL2RyaXZlcl9wYXJ0aXRpb25fcHNhLmpzb24KQEAgLTMsMTEgKzMsOSBAQAogICAibmFtZSI6ICJEUklWRVJfUEFSVElUSU9OIiwKICAgInR5cGUiOiAiUFNBLVJPVCIsCiAgICJwcmlvcml0eSI6ICJOT1JNQUwiLAotICAiaWQiOiAiMHgwMDAwMDAwMyIsCiAgICJkZXNjcmlwdGlvbiI6ICJJbXBsZW1lbnRzIGRldmljZSBzZXJ2aWNlcyBzdWNoIHByaW50LCBmbGFzaCByZWFkL3dyaXRlLC4gZXRjLiIsCiAgICJlbnRyeV9wb2ludCI6ICJkcml2ZXJfbWFpbiIsCiAgICJzdGFja19zaXplIjogIjB4NDAwIiwKLSAgImhlYXBfc2l6ZSI6ICIweDEwMCIsCiAgICJzZXJ2aWNlcyI6IFt7CiAgICAgICAibmFtZSI6ICJEUklWRVJfVUFSVF9TSUQiLAogICAgICAgInNpZCI6ICIweDAwMDBGQzAxIiwKQEAgLTMzLDkgKzMxLDkgQEAKICAgICAgICJtaW5vcl9wb2xpY3kiOiAiUkVMQVhFRCIKICAgICB9LAogICAgIHsKLSAgICAgICJuYW1lIjogIlRFU1RfSU5UUl9TSUQiLAorICAgICAgIm5hbWUiOiAiRFJJVkVSX1RFU1RfU0lEIiwKICAgICAgICJzaWQiOiAiMHgwMDAwRkMwNCIsCi0gICAgICAic2lnbmFsIjogIlRFU1RfSU5UUl9TSUciLAorICAgICAgInNpZ25hbCI6ICJEUklWRVJfVEVTVF9TSUciLAogICAgICAgIm5vbl9zZWN1cmVfY2xpZW50cyI6IHRydWUsCiAgICAgICAibWlub3JfdmVyc2lvbiI6IDEsCiAgICAgICAibWlub3JfcG9saWN5IjogIlJFTEFYRUQiCkBAIC02OSwxMyArNjcsOSBAQAogICBdLAogICAiaXJxcyI6IFsKICAgICB7CisgICAgICAgImRlc2NyaXB0aW9uIjogIlVzaW5nIFVBUlQgVFggaW50ZXJydXB0IHRvIHRlc3QgcHNhX3dhaXQgYW5kIHBzYV9lb2kgZm9yIGlycV9zaWduYWwiLAogICAgICAgICJzaWduYWwiOiAiRFJJVkVSX1VBUlRfSU5UUl9TSUciLAotICAgICAgICJsaW5lX251bSI6IDE3CisgICAgICAgImxpbmVfbnVtIjogMzcKICAgICB9Ci0gIF0sCi0gICJsaW5rZXJfcGF0dGVybiI6IHsKLSAgICAib2JqZWN0X2xpc3QiOiBbCi0gICAgImRyaXZlcl9wYXJ0aXRpb24uYSIKLSAgICBdCi0gIH0KKyAgXQogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9hbjUyMS9tYW5pZmVzdHMvaXBjL2NsaWVudF9wYXJ0aXRpb25fcHNhLmpzb24gYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX2FuNTIxL21hbmlmZXN0cy9pcGMvY2xpZW50X3BhcnRpdGlvbl9wc2EuanNvbgppbmRleCAwODFkYzk1Li5iOTMzNzdiIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX2FuNTIxL21hbmlmZXN0cy9pcGMvY2xpZW50X3BhcnRpdGlvbl9wc2EuanNvbgorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX2FuNTIxL21hbmlmZXN0cy9pcGMvY2xpZW50X3BhcnRpdGlvbl9wc2EuanNvbgpAQCAtMywxMSArMyw5IEBACiAgICJuYW1lIjogIkNMSUVOVF9QQVJUSVRJT04iLAogICAidHlwZSI6ICJBUFBMSUNBVElPTi1ST1QiLAogICAicHJpb3JpdHkiOiAiTk9STUFMIiwKLSAgImlkIjogIjB4MDAwMDAwMDEiLAogICAiZGVzY3JpcHRpb24iOiAiQ2xpZW50IHBhcnRpdGlvbiBleGVjdXRpbmcgY2xpZW50IHRlc3QgZnVuYyBmcm9tIFNQRSIsCiAgICJlbnRyeV9wb2ludCI6ICJjbGllbnRfbWFpbiIsCiAgICJzdGFja19zaXplIjogIjB4NDAwIiwKLSAgImhlYXBfc2l6ZSI6ICIweDEwMCIsCiAgICJzZXJ2aWNlcyI6IFt7CiAgICAgICAibmFtZSI6ICJDTElFTlRfVEVTVF9ESVNQQVRDSEVSX1NJRCIsCiAgICAgICAic2lkIjogIjB4MDAwMEZBMDEiLApAQCAtMjAsNyArMTgsNyBAQAogICAiZGVwZW5kZW5jaWVzIjogWwogICAgICJEUklWRVJfVUFSVF9TSUQiLAogICAgICJEUklWRVJfTlZNRU1fU0lEIiwKLSAgICAiVEVTVF9JTlRSX1NJRCIsCisgICAgIkRSSVZFUl9URVNUX1NJRCIsCiAgICAgIlNFUlZFUl9URVNUX0RJU1BBVENIRVJfU0lEIiwKICAgICAiU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQiLAogICAgICJTRVJWRVJfU1RSSUNUX01JTk9SX1ZFUlNJT05fU0lEIiwKQEAgLTM1LDEwICszMyw1IEBACiAgICAgICAic2l6ZSI6ICIweDIwIiwKICAgICAgICJwZXJtaXNzaW9uIjogIlJFQUQtV1JJVEUiCiAgICAgfQotICAgXSwKLSAgImxpbmtlcl9wYXR0ZXJuIjogewotICAgICJvYmplY3RfbGlzdCI6IFsKLSAgICAiY2xpZW50X3BhcnRpdGlvbi5hIgotICAgIF0KLSAgfQorICAgXQogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9hbjUyMS9tYW5pZmVzdHMvaXBjL3NlcnZlcl9wYXJ0aXRpb25fcHNhLmpzb24gYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX2FuNTIxL21hbmlmZXN0cy9pcGMvc2VydmVyX3BhcnRpdGlvbl9wc2EuanNvbgppbmRleCAzNTQxMzg3Li4xNDZiOGZiIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX2FuNTIxL21hbmlmZXN0cy9pcGMvc2VydmVyX3BhcnRpdGlvbl9wc2EuanNvbgorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX2FuNTIxL21hbmlmZXN0cy9pcGMvc2VydmVyX3BhcnRpdGlvbl9wc2EuanNvbgpAQCAtMyw3ICszLDYgQEAKICAgIm5hbWUiOiAiU0VSVkVSX1BBUlRJVElPTiIsCiAgICJ0eXBlIjogIkFQUExJQ0FUSU9OLVJPVCIsCiAgICJwcmlvcml0eSI6ICJOT1JNQUwiLAotICAiaWQiOiAiMHgwMDAwMDAwMiIsCiAgICJkZXNjcmlwdGlvbiI6ICJTZXJ2ZXIgcGFydGl0aW9uIGV4ZWN1dGluZyBzZXJ2ZXIgdGVzdCBmdW5jIiwKICAgImVudHJ5X3BvaW50IjogInNlcnZlcl9tYWluIiwKICAgInN0YWNrX3NpemUiOiAiMHg0MDAiLApAQCAtNjYsMTAgKzY1LDUgQEAKICAgImRlcGVuZGVuY2llcyI6IFsKICAgICAiRFJJVkVSX1VBUlRfU0lEIiwKICAgICAiRFJJVkVSX05WTUVNX1NJRCIKLSAgXSwKLSAgImxpbmtlcl9wYXR0ZXJuIjogewotICAgICJvYmplY3RfbGlzdCI6IFsKLSAgICAic2VydmVyX3BhcnRpdGlvbi5hIgotICAgIF0KLSAgfQorICBdCiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX2FuNTIxL25zcGUvY29tbW9uL3BhbF9jb25maWcuaCBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fYW41MjEvbnNwZS9jb21tb24vcGFsX2NvbmZpZy5oCmluZGV4IGRhYTBlYzUuLmUzZjcwYWQgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fYW41MjEvbnNwZS9jb21tb24vcGFsX2NvbmZpZy5oCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fYW41MjEvbnNwZS9jb21tb24vcGFsX2NvbmZpZy5oCkBAIC01MCw3ICs1MCw3IEBACiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKFZFUkJPU0UpCi0jZGVmaW5lIFZFUkJPU0UgNCAvKiBQcmludCB2ZXJib3NpdHkgPSBFUlJPUiAqLworI2RlZmluZSBWRVJCT1NFIDMgLyogUHJpbnQgdmVyYm9zaXR5ID0gVEVTVCAqLwogI2VuZGlmCiAKICNpZiAoIWRlZmluZWQoVkFMX05TUEVfQlVJTEQpICYmICFkZWZpbmVkKFNQRV9CVUlMRCkpCkBAIC02Miw3ICs2MiwxNSBAQAogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChURVNUX0NPTUJJTkVfQVJDSElWRSkKLS8vI2RlZmluZSBURVNUX0NPTUJJTkVfQVJDSElWRSAvKiBUZXN0IGRpc3BhdGNoZXIgY29kZSBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgVEVTVF9DT01CSU5FX0FSQ0hJVkUgMCAvKiBDb21iaW5lIHRlc3QgYXJjaGl2ZSBvciBiaW5hcnk/ICovCisjZW5kaWYKKworI2lmICFkZWZpbmVkKFdBVENIRE9HX0FWQUlMQUJMRSkKKyNkZWZpbmUgV0FUQ0hET0dfQVZBSUxBQkxFIDAgLyogSWYgemVybywgc2tpcCB3YXRjaGRvZyBwcm9ncmFtbWluZyAqLworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChTUF9IRUFQX01FTV9TVVBQKQorI2RlZmluZSBTUF9IRUFQX01FTV9TVVBQIDAgLyogQXJlIER5bmFtaWMgZnVuY3MgYXZhaWxhYmxlIHRvIHNlY3VyZSBwYXJ0aXRpb24/ICovCiAjZW5kaWYKIAogLyoKQEAgLTc5LDYgKzg3LDEzIEBACiAgKiBvZiB0aGlzIGZpbGUuCiAqLwogI2luY2x1ZGUgInBzYV9tYW5pZmVzdC9zaWQuaCIKKworLyoKKyAqIHBzYV9tYW5pZmVzdC9waWQuaDogU2VjdXJlIFBhcnRpdGlvbiBJRHMKKyAqIE1hY3JvIGRlZmluaXRpb25zIHRoYXQgbWFwIGZyb20gU2VjdXJlIFBhcnRpdGlvbiBuYW1lcyB0byBTZWN1cmUgUGFydGl0aW9uIElEcy4KKyAqIFBhcnRpdGlvbiBtYW5pZmVzdCBwYXJzZSBidWlsZCB0b29sIG11c3QgcHJvdmlkZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmaWxlLgorKi8KKyNpbmNsdWRlICJwc2FfbWFuaWZlc3QvcGlkLmgiCiAjZW5kaWYKIAogI2lmIFBTQV9DUllQVE9fSU1QTEVNRU5URUQKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fYW41MjEvbnNwZS9jb21tb24vcGFsX2RyaXZlcl9pcGNfaW50Zi5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9hbjUyMS9uc3BlL2NvbW1vbi9wYWxfZHJpdmVyX2lwY19pbnRmLmMKaW5kZXggMzJhZWY5Yy4uZjhmNzczZiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9hbjUyMS9uc3BlL2NvbW1vbi9wYWxfZHJpdmVyX2lwY19pbnRmLmMKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9hbjUyMS9uc3BlL2NvbW1vbi9wYWxfZHJpdmVyX2lwY19pbnRmLmMKQEAgLTU2LDcgKzU2LDcgQEAKICAgICBAcmV0dXJuICAgLSBTVUNDRVNTL0ZBSUxVUkUKICoqLwogCi1pbnQgcGFsX3ByaW50X25zKGNoYXIgKnN0ciwgdWludDMyX3QgZGF0YSkKK2ludCBwYWxfcHJpbnRfbnMoY2hhciAqc3RyLCBpbnQzMl90IGRhdGEpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHN0cmluZ19sZW4gPSAwOwogICAgIGNoYXIgICAgICAgICAgICAqcCA9IHN0cjsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fYW41MjEvbnNwZS9jb21tb24vcGFsX2RyaXZlcl9uc19pbnRmLmMgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX2FuNTIxL25zcGUvY29tbW9uL3BhbF9kcml2ZXJfbnNfaW50Zi5jCmluZGV4IGRkNmIxNGMuLjJhZjZmY2MgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fYW41MjEvbnNwZS9jb21tb24vcGFsX2RyaXZlcl9uc19pbnRmLmMKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9hbjUyMS9uc3BlL2NvbW1vbi9wYWxfZHJpdmVyX25zX2ludGYuYwpAQCAtMzgsNyArMzgsNyBAQAogICAgIEByZXR1cm4gICAtIFNVQ0NFU1MvRkFJTFVSRQogKiovCiAKLWludCBwYWxfcHJpbnRfbnMoY2hhciAqc3RyLCB1aW50MzJfdCBkYXRhKQoraW50IHBhbF9wcmludF9ucyhjaGFyICpzdHIsIGludDMyX3QgZGF0YSkKIHsKICAgICBwYWxfY21zZGtfcHJpbnQoc3RyLCBkYXRhKTsKICAgICByZXR1cm4gUEFMX1NUQVRVU19TVUNDRVNTOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9hbjUyMS9uc3BlL2NyeXB0by9wYWxfY3J5cHRvX2NvbmZpZy5oIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9hbjUyMS9uc3BlL2NyeXB0by9wYWxfY3J5cHRvX2NvbmZpZy5oCmluZGV4IDZkNzFkMmUuLmFiMTFmZDEgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fYW41MjEvbnNwZS9jcnlwdG8vcGFsX2NyeXB0b19jb25maWcuaAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX2FuNTIxL25zcGUvY3J5cHRvL3BhbF9jcnlwdG9fY29uZmlnLmgKQEAgLTc4LDEwICs3OCwxMCBAQAogICoKICAqIENvbW1lbnQgbWFjcm9zIHRvIGRpc2FibGUgdGhlIHR5cGVzCiAgKi8KLSNkZWZpbmUgQVJDSF9URVNUX0RFUwotI2RlZmluZSBBUkNIX1RFU1RfREVTXzFLRVkKLSNkZWZpbmUgQVJDSF9URVNUX0RFU18yS0VZCi0jZGVmaW5lIEFSQ0hfVEVTVF9ERVNfM0tFWQorLy8jZGVmaW5lIEFSQ0hfVEVTVF9ERVMKKy8vI2RlZmluZSBBUkNIX1RFU1RfREVTXzFLRVkKKy8vI2RlZmluZSBBUkNIX1RFU1RfREVTXzJLRVkKKy8vI2RlZmluZSBBUkNIX1RFU1RfREVTXzNLRVkKIAogLyoqCiAgKiBcZGVmICBBUkNIX1RFU1RfUkFXCkBAIC0xMDQsNyArMTA0LDcgQEAKICAqCiAgKiBFbmFibGUgdGhlIEFSQzQga2V5IHR5cGUuCiAgKi8KLSNkZWZpbmUgQVJDSF9URVNUX0FSQzQKKy8vI2RlZmluZSBBUkNIX1RFU1RfQVJDNAogCiAvKioKICAqIFxkZWYgQVJDSF9URVNUX0NJUEVSX01PREVfQ1RSCkBAIC0yMjcsMjEgKzIyNywyMSBAQAogICoKICAqIENvbW1lbnQgbWFjcm9zIHRvIGRpc2FibGUgdGhlIHR5cGVzCiAgKi8KLSNkZWZpbmUgQVJDSF9URVNUX01EMgotI2RlZmluZSBBUkNIX1RFU1RfTUQ0Ci0jZGVmaW5lIEFSQ0hfVEVTVF9NRDUKLSNkZWZpbmUgQVJDSF9URVNUX1JJUEVNRDE2MAorLy8jZGVmaW5lIEFSQ0hfVEVTVF9NRDIKKy8vI2RlZmluZSBBUkNIX1RFU1RfTUQ0CisvLyNkZWZpbmUgQVJDSF9URVNUX01ENQorLy8jZGVmaW5lIEFSQ0hfVEVTVF9SSVBFTUQxNjAKICNkZWZpbmUgQVJDSF9URVNUX1NIQTEKICNkZWZpbmUgQVJDSF9URVNUX1NIQTIyNAogI2RlZmluZSBBUkNIX1RFU1RfU0hBMjU2CiAjZGVmaW5lIEFSQ0hfVEVTVF9TSEEzODQKICNkZWZpbmUgQVJDSF9URVNUX1NIQTUxMgotI2RlZmluZSBBUkNIX1RFU1RfU0hBNTEyXzIyNAotI2RlZmluZSBBUkNIX1RFU1RfU0hBNTEyXzI1NgotI2RlZmluZSBBUkNIX1RFU1RfU0hBM18yMjQKLSNkZWZpbmUgQVJDSF9URVNUX1NIQTNfMjU2Ci0jZGVmaW5lIEFSQ0hfVEVTVF9TSEEzXzM4NAotI2RlZmluZSBBUkNIX1RFU1RfU0hBM181MTIKKy8vI2RlZmluZSBBUkNIX1RFU1RfU0hBNTEyXzIyNAorLy8jZGVmaW5lIEFSQ0hfVEVTVF9TSEE1MTJfMjU2CisvLyNkZWZpbmUgQVJDSF9URVNUX1NIQTNfMjI0CisvLyNkZWZpbmUgQVJDSF9URVNUX1NIQTNfMjU2CisvLyNkZWZpbmUgQVJDSF9URVNUX1NIQTNfMzg0CisvLyNkZWZpbmUgQVJDSF9URVNUX1NIQTNfNTEyCiAKIC8qKgogICogXGRlZiBBUkNIX1RFU1RfSEtERgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9hbjUyMS9uc3BlL2NyeXB0by9wYWxfY3J5cHRvX2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fYW41MjEvbnNwZS9jcnlwdG8vcGFsX2NyeXB0b19pbnRmLmMKaW5kZXggYWQ4MzhmOS4uM2RmNmFhOCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9hbjUyMS9uc3BlL2NyeXB0by9wYWxfY3J5cHRvX2ludGYuYworKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX2FuNTIxL25zcGUvY3J5cHRvL3BhbF9jcnlwdG9faW50Zi5jCkBAIC0zNiw3ICszNiw3IEBACiAgICAgdWludDMyX3QgICAgICAgICAgICAgICAgc3RhdHVzOwogICAgIGNvbnN0IHZvaWQgICAgICAgICAgICAgICpleHRyYTsKICAgICBzaXplX3QgICAgICAgICAgICAgICAgICBleHRyYV9zaXplLCBjYXBhY2l0eSwgKmdlbl9jYXAsIG5vbmNlX2xlbmd0aCwgYWRkaXRpb25hbF9kYXRhX2xlbmd0aDsKLSAgICBwc2Ffa2V5X2hhbmRsZV90ICAgICAgICBoYW5kbGUsICprZXlfaGFuZGxlOworICAgIHBzYV9rZXlfaGFuZGxlX3QgICAgICAgIGhhbmRsZSwgKmtleV9oYW5kbGUsIHRhcmdldF9oYW5kbGU7CiAgICAgcHNhX2tleV90eXBlX3QgICAgICAgICAga2V5X3R5cGUsICprZXlfdHlwZV9vdXQ7CiAgICAgcHNhX2tleV9wb2xpY3lfdCAgICAgICAgKnBvbGljeTsKICAgICBwc2Ffa2V5X3VzYWdlX3QgICAgICAgICB1c2FnZSwgKnVzYWdlX291dDsKQEAgLTMyNSw2ICszMjUsMTEgQEAKICAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWToKICAgICAgICAgICAgIGtleV9oYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCAqKXZhX2FyZyh2YWxpc3QsIGludCopOwogICAgICAgICAgICAgcmV0dXJuIHBzYV9hbGxvY2F0ZV9rZXkoa2V5X2hhbmRsZSk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19DT1BZX0tFWToKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICB0YXJnZXRfaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIHBvbGljeSA9IHZhX2FyZyh2YWxpc3QsIHBzYV9rZXlfcG9saWN5X3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfY29weV9rZXkoaGFuZGxlLCB0YXJnZXRfaGFuZGxlLCBwb2xpY3kpOwogICAgICAgICBjYXNlIFBBTF9DUllQVE9fRlJFRToKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBQQUxfS0VZX1NMT1RfQ09VTlQ7IGkrKykKICAgICAgICAgICAgICAgICBwc2FfZGVzdHJveV9rZXkoaSk7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX2FuNTIxL25zcGUvY3J5cHRvL3BhbF9jcnlwdG9faW50Zi5oIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9hbjUyMS9uc3BlL2NyeXB0by9wYWxfY3J5cHRvX2ludGYuaAppbmRleCBkZmFiZWUxLi5kMWRhYmZhIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX2FuNTIxL25zcGUvY3J5cHRvL3BhbF9jcnlwdG9faW50Zi5oCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fYW41MjEvbnNwZS9jcnlwdG8vcGFsX2NyeXB0b19pbnRmLmgKQEAgLTY4LDYgKzY4LDcgQEAKICAgICBQQUxfQ1JZUFRPX0FTWU1NVEVSSUNfVkVSSUZZICAgICAgICA9IDB4MzEsCiAgICAgUEFMX0NSWVBUT19LRVlfQUdSRUVNRU5UICAgICAgICAgICAgPSAweDMyLAogICAgIFBBTF9DUllQVE9fQUxMT0NBVEVfS0VZICAgICAgICAgICAgID0gMHgzMywKKyAgICBQQUxfQ1JZUFRPX0NPUFlfS0VZICAgICAgICAgICAgICAgICA9IDB4MzQsCiAgICAgUEFMX0NSWVBUT19GUkVFICAgICAgICAgICAgICAgICAgICAgPSAweEZFLAogfTsKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9hbjUyMS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2NyeXB0by5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9hbjUyMS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2NyeXB0by5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMmJkYmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX2FuNTIxL25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fY3J5cHRvLmMKQEAgLTAsMCArMSwzNDYgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJwYWxfYXR0ZXN0YXRpb25fY3J5cHRvLmgiCisKK3N0YXRpYyB1aW50MzJfdCAgcHVibGljX2tleV9yZWdpc3RlcmVkID0gMDsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgdXNlZnVsX2J1Zl9oZWFkKHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhbW91bnQpCit7CisgICAgcmV0dXJuIFVzZWZ1bEJ1Zl9IZWFkKGJ1ZiwgYW1vdW50KTsKK30KKworc3RhdGljIHVpbnQzMl90IGNoZWNrX2hhc2hfc2l6ZXModm9pZCkKK3sKKyAgICBpZiAoVF9DT1NFX0NSWVBUT19TSEEyNTZfU0laRSAhPSBQU0FfSEFTSF9TSVpFKFBTQV9BTEdfU0hBXzI1NikpCisgICAgeworICAgICAgICByZXR1cm4gUEFMX0FUVEVTVF9IQVNIX0ZBSUw7CisgICAgfQorCisgICAgcmV0dXJuIFBBTF9BVFRFU1RfU1VDQ0VTUzsKK30KKworc3RhdGljIHBzYV9lY2NfY3VydmVfdCBhdHRlc3RfbWFwX2VsbGlwdGljX2N1cnZlX3R5cGUoaW50MzJfdCBjb3NlX2N1cnZlKQoreworICAgIHBzYV9lY2NfY3VydmVfdCBwc2FfY3VydmU7CisKKyAgICAvKkZpeE1lOiBNYXBwaW5nIGlzIG5vdCBjb21wbGV0ZSwgbWlzc2luZyBvbmVzOiBQMzg0LCBQNTIxLCBFRDI1NTE5LCBFRDQ0OCAqLworICAgIHN3aXRjaCAoY29zZV9jdXJ2ZSkKKyAgICB7CisgICAgY2FzZSBQXzI1NjoKKyAgICAgICAgcHNhX2N1cnZlID0gUFNBX0VDQ19DVVJWRV9TRUNQMjU2UjE7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHBzYV9jdXJ2ZSA9IFVTSFJUX01BWDsKKyAgICB9CisKKyAgICByZXR1cm4gcHNhX2N1cnZlOworfQorCitzdGF0aWMgcHNhX2FsZ29yaXRobV90IGNvc2VfaGFzaF9hbGdfaWRfdG9fcHNhKGludDMyX3QgY29zZV9oYXNoX2FsZ19pZCkKK3sKKyAgICBwc2FfYWxnb3JpdGhtX3Qgc3RhdHVzOworCisgICAgc3dpdGNoIChjb3NlX2hhc2hfYWxnX2lkKQorICAgIHsKKyAgICBjYXNlIENPU0VfQUxHX1NIQTI1Nl9QUk9QUklFVEFSWToKKyAgICAgICAgc3RhdHVzID0gUFNBX0FMR19TSEFfMjU2OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzdGF0dXMgPSBQU0FfQUxHX01ENDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludDMyX3QgaGFzaF9hbGdfaWRfZnJvbV9zaWdfYWxnX2lkKGludDMyX3QgY29zZV9zaWdfYWxnX2lkKQoreworICAgIHN3aXRjaCAoY29zZV9zaWdfYWxnX2lkKQorICAgIHsKKyAgICAgICAgY2FzZSBDT1NFX0FMR09SSVRITV9FUzI1NjoKKyAgICAgICAgICAgIHJldHVybiBDT1NFX0FMR19TSEEyNTZfUFJPUFJJRVRBUlk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gSU5UMzJfTUFYOworICAgIH0KK30KKworaW50MzJfdCBwYWxfY29zZV9jcnlwdG9faGFzaF9zdGFydChzdHJ1Y3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2ggKmhhc2hfY3R4LCBpbnQzMl90IGNvc2VfaGFzaF9hbGdfaWQpCit7CisgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgICAgY29zZV9yZXQgPSBQQUxfQVRURVNUX1NVQ0NFU1M7CisgICAgcHNhX3N0YXR1c190ICAgICAgICAgICAgICAgICAgICAgcHNhX3JldDsKKyAgICBzdHJ1Y3QgcGFsX2Nvc2VfcHNhX2NyeXB0b19oYXNoICpwc2FfaGFzaF9jdHg7CisKKyAgICBjb3NlX3JldCA9IGNoZWNrX2hhc2hfc2l6ZXMoKTsKKyAgICBpZiAoY29zZV9yZXQpCisgICAgeworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGlmIChzaXplb2Yoc3RydWN0IHBhbF9jb3NlX2NyeXB0b19oYXNoKSA8IHNpemVvZihzdHJ1Y3QgcGFsX2Nvc2VfcHNhX2NyeXB0b19oYXNoKSkKKyAgICB7CisgICAgICAgIGNvc2VfcmV0ID0gUEFMX0FUVEVTVF9IQVNIX0ZBSUw7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgcHNhX2hhc2hfY3R4ID0gKHN0cnVjdCBwYWxfY29zZV9wc2FfY3J5cHRvX2hhc2ggKiloYXNoX2N0eDsKKyAgICBwc2FfcmV0ID0gcHNhX2hhc2hfc2V0dXAoJnBzYV9oYXNoX2N0eC0+b3BlcmF0aW9uLCBjb3NlX2hhc2hfYWxnX2lkX3RvX3BzYShjb3NlX2hhc2hfYWxnX2lkKSk7CisKKyAgICBpZiAocHNhX3JldCA9PSBQQUxfQVRURVNUX1NVQ0NFU1MpCisgICAgeworICAgICAgICBwc2FfaGFzaF9jdHgtPnN0YXR1cyA9IFBBTF9BVFRFU1RfU1VDQ0VTUzsKKyAgICAgICAgY29zZV9yZXQgPSBQQUxfQVRURVNUX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UgaWYgKHBzYV9yZXQgPT0gUFNBX0VSUk9SX05PVF9TVVBQT1JURUQpCisgICAgeworICAgICAgICBjb3NlX3JldCA9IFBBTF9BVFRFU1RfSEFTSF9VTlNVUFBPUlRFRDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29zZV9yZXQgPSBQQUxfQVRURVNUX0hBU0hfRkFJTDsKKyAgICB9CisKK2Vycm9yOgorICAgIHJldHVybiBjb3NlX3JldDsKK30KKwordm9pZCBwYWxfY29zZV9jcnlwdG9faGFzaF91cGRhdGUoc3RydWN0IHBhbF9jb3NlX2NyeXB0b19oYXNoICpoYXNoX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBkYXRhX3RvX2hhc2gpCit7CisgICAgc3RydWN0IHBhbF9jb3NlX3BzYV9jcnlwdG9faGFzaCAqcHNhX2hhc2hfY3R4OworCisgICAgaWYgKHNpemVvZihzdHJ1Y3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2gpIDwgc2l6ZW9mKHN0cnVjdCBwYWxfY29zZV9wc2FfY3J5cHRvX2hhc2gpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHBzYV9oYXNoX2N0eCA9IChzdHJ1Y3QgcGFsX2Nvc2VfcHNhX2NyeXB0b19oYXNoICopaGFzaF9jdHg7CisKKyAgICBpZiAocHNhX2hhc2hfY3R4LT5zdGF0dXMgPT0gUEFMX0FUVEVTVF9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgaWYgKGRhdGFfdG9faGFzaC5wdHIgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgcHNhX2hhc2hfY3R4LT5zdGF0dXMgPSBwc2FfaGFzaF91cGRhdGUoJnBzYV9oYXNoX2N0eC0+b3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90b19oYXNoLnB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdG9faGFzaC5sZW4pOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogSW50ZW50aW9uYWxseSBkbyBub3RoaW5nLCBqdXN0IGNvbXB1dGluZyB0aGUgc2l6ZSBvZiB0aGUgdG9rZW4gKi8KKyAgICAgICAgfQorICAgIH0KK30KKworaW50MzJfdCBwYWxfY29zZV9jcnlwdG9faGFzaF9maW5pc2goc3RydWN0IHBhbF9jb3NlX2NyeXB0b19oYXNoICpoYXNoX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWYgYnVmZmVyX3RvX2hvbGRfcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jICpoYXNoX3Jlc3VsdCkKK3sKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgICBjb3NlX3JldCA9IFBBTF9BVFRFU1RfU1VDQ0VTUzsKKyAgICBwc2Ffc3RhdHVzX3QgICAgICAgICAgICAgICAgICAgICBwc2FfcmV0OworICAgIHN0cnVjdCBwYWxfY29zZV9wc2FfY3J5cHRvX2hhc2ggKnBzYV9oYXNoX2N0eDsKKworICAgIGlmIChzaXplb2Yoc3RydWN0IHBhbF9jb3NlX2NyeXB0b19oYXNoKSA8IHNpemVvZihzdHJ1Y3QgcGFsX2Nvc2VfcHNhX2NyeXB0b19oYXNoKSkKKyAgICB7CisgICAgICAgIGNvc2VfcmV0ID0gUEFMX0FUVEVTVF9IQVNIX0ZBSUw7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgcHNhX2hhc2hfY3R4ID0gKHN0cnVjdCBwYWxfY29zZV9wc2FfY3J5cHRvX2hhc2ggKiloYXNoX2N0eDsKKworICAgIGlmIChwc2FfaGFzaF9jdHgtPnN0YXR1cyA9PSBQQUxfQVRURVNUX1NVQ0NFU1MpCisgICAgeworICAgICAgICBwc2FfcmV0ID0gcHNhX2hhc2hfZmluaXNoKCZwc2FfaGFzaF9jdHgtPm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfdG9faG9sZF9yZXN1bHQucHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl90b19ob2xkX3Jlc3VsdC5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihoYXNoX3Jlc3VsdC0+bGVuKSk7CisKKyAgICAgICAgaWYgKHBzYV9yZXQgPT0gUEFMX0FUVEVTVF9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBoYXNoX3Jlc3VsdC0+cHRyID0gYnVmZmVyX3RvX2hvbGRfcmVzdWx0LnB0cjsKKyAgICAgICAgICAgIGNvc2VfcmV0ID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwc2FfcmV0ID09IFBTQV9FUlJPUl9CVUZGRVJfVE9PX1NNQUxMKQorICAgICAgICB7CisgICAgICAgICAgICBjb3NlX3JldCA9IFBBTF9BVFRFU1RfSEFTSF9CVUZGRVJfU0laRTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvc2VfcmV0ID0gUEFMX0FUVEVTVF9IQVNIX0ZBSUw7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29zZV9yZXQgPSBQQUxfQVRURVNUX0hBU0hfRkFJTDsKKyAgICB9CisKK2Vycm9yOgorICAgIHJldHVybiBjb3NlX3JldDsKK30KKworaW50IHBhbF9jcmVhdGVfc2hhMjU2KHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBieXRlc190b19oYXNoLCBzdHJ1Y3QgcV91c2VmdWxfYnVmIGJ1ZmZlcl9mb3JfaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgKmhhc2gpCit7CisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gUEFMX0FUVEVTVF9TVUNDRVNTOworICAgIHN0cnVjdCBwYWxfY29zZV9jcnlwdG9faGFzaCAgIGhhc2hfY3R4OworCisgICAgc3RhdHVzID0gcGFsX2Nvc2VfY3J5cHRvX2hhc2hfc3RhcnQoJmhhc2hfY3R4LCBDT1NFX0FMR19TSEEyNTZfUFJPUFJJRVRBUlkpOworICAgIGlmIChzdGF0dXMpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICBwYWxfY29zZV9jcnlwdG9faGFzaF91cGRhdGUoJmhhc2hfY3R4LCBieXRlc190b19oYXNoKTsKKyAgICBzdGF0dXMgPSBwYWxfY29zZV9jcnlwdG9faGFzaF9maW5pc2goJmhhc2hfY3R4LCBidWZmZXJfZm9yX2hhc2gsIGhhc2gpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKwordWludDMyX3QgcGFsX2NvbXB1dGVfaGFzaChpbnQzMl90IGNvc2VfYWxnX2lkLCBzdHJ1Y3QgcV91c2VmdWxfYnVmIGJ1ZmZlcl9mb3JfaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jICpoYXNoLCBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgcHJvdGVjdGVkX2hlYWRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBwYXlsb2FkKQoreworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICBzdGF0dXM7CisgICAgUUNCT1JFbmNvZGVDb250ZXh0ICAgICAgICAgIGNib3JfZW5jb2RlX2N0eDsKKyAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgICAgICAgdGJzX2ZpcnN0X3BhcnQ7CisgICAgUUNCT1JFcnJvciAgICAgICAgICAgICAgICAgIHFjYm9yX3Jlc3VsdDsKKyAgICBzdHJ1Y3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2ggaGFzaF9jdHggPSB7ezB9fTsKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgaGFzaF9hbGdfaWQ7CisgICAgVXNlZnVsQnVmX01BS0VfU1RBQ0tfVUIgICAgKGJ1ZmZlcl9mb3JfVEJTX2ZpcnN0X3BhcnQsIFRfQ09TRV9TSVpFX09GX1RCUyk7CisKKyAgICAvKiBUaGlzIGJ1aWxkcyB0aGUgQ0JPUi1mb3JtYXQgdG8tYmUtc2lnbmVkIGJ5dGVzICovCisgICAgUUNCT1JFbmNvZGVfSW5pdCgmY2Jvcl9lbmNvZGVfY3R4LCBidWZmZXJfZm9yX1RCU19maXJzdF9wYXJ0KTsKKyAgICBRQ0JPUkVuY29kZV9PcGVuQXJyYXkoJmNib3JfZW5jb2RlX2N0eCk7CisgICAgLyogY29udGV4dCAqLworICAgIFFDQk9SRW5jb2RlX0FkZFNaU3RyaW5nKCZjYm9yX2VuY29kZV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09TRV9TSUdfQ09OVEVYVF9TVFJJTkdfU0lHTkFUVVJFMSk7CisgICAgLyogYm9keV9wcm90ZWN0ZWQgKi8KKyAgICBRQ0JPUkVuY29kZV9BZGRCeXRlcygmY2Jvcl9lbmNvZGVfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZF9oZWFkZXJzKTsKKyAgICAvKiBzaWduX3Byb3RlY3RlZCAqLworICAgIFFDQk9SRW5jb2RlX0FkZEJ5dGVzKCZjYm9yX2VuY29kZV9jdHgsIE5VTExfVVNFRlVMX0JVRl9DKTsKKyAgICAvKiBleHRlcm5hbF9hYWQgKi8KKyAgICBRQ0JPUkVuY29kZV9BZGRCeXRlcygmY2Jvcl9lbmNvZGVfY3R4LCBOVUxMX1VTRUZVTF9CVUZfQyk7CisgICAgLyogZmFrZSBwYXlsb2FkICovCisgICAgUUNCT1JFbmNvZGVfQWRkQnl0ZXMoJmNib3JfZW5jb2RlX2N0eCwgTlVMTF9VU0VGVUxfQlVGX0MpOworICAgIFFDQk9SRW5jb2RlX0Nsb3NlQXJyYXkoJmNib3JfZW5jb2RlX2N0eCk7CisKKyAgICAvKiBHZXQgdGhlIHJlc3VsdCBhbmQgY29udmVydCBpdCB0byBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgcmVwcmVzZW50YXRpb24gKi8KKyAgICBxY2Jvcl9yZXN1bHQgPSBRQ0JPUkVuY29kZV9GaW5pc2goJmNib3JfZW5jb2RlX2N0eCwgJnRic19maXJzdF9wYXJ0KTsKKyAgICBpZiAocWNib3JfcmVzdWx0KQorICAgIHsKKyAgICAgICAgLyogTWFpbmx5IG1lYW5zIHRoYXQgdGhlIHByb3RlY3RlZF9oZWFkZXJzIHdlcmUgdG9vIGJpZworICAgICAgICAgKHdoaWNoIHNob3VsZCBuZXZlciBoYXBwZW4pICovCisgICAgICAgIHN0YXR1cyA9IFBBTF9BVFRFU1RfRVJSX1NJR05fU1RSVUNUOworICAgICAgICBnb3RvIERvbmU7CisgICAgfQorCisgICAgLyogU3RhcnQgdGhlIGhhc2hpbmcgKi8KKyAgICBoYXNoX2FsZ19pZCA9IGhhc2hfYWxnX2lkX2Zyb21fc2lnX2FsZ19pZChjb3NlX2FsZ19pZCk7CisKKyAgICAvKiBEb24ndCBjaGVjayBoYXNoX2FsZ19pZCBmb3IgZmFpbHVyZS4gcGFsX2Nvc2VfY3J5cHRvX2hhc2hfc3RhcnQoKQorICAgICAqIHdpbGwgaGFuZGxlIGl0IHByb3Blcmx5CisgICAgICovCisgICAgc3RhdHVzID0gcGFsX2Nvc2VfY3J5cHRvX2hhc2hfc3RhcnQoJmhhc2hfY3R4LCBoYXNoX2FsZ19pZCk7CisgICAgaWYgKHN0YXR1cykKKyAgICAgICAgZ290byBEb25lOworCisgICAgLyogSGFzaCB0aGUgZmlyc3QgcGFydCBvZiB0aGUgVEJTLiBUYWtlIGFsbCBidXQgdGhlIGxhc3QgdHdvCisgICAgICogYnl0ZXMuIFRoZSBsYXN0IHR3byBieXRlcyBhcmUgdGhlIGZha2UgcGF5bG9hZCBmcm9tIGFib3ZlLiBJdAorICAgICAqIGlzIHJlcGxhY2VkIGJ5IHRoZSByZWFsIHBheWxvYWQgd2hpY2ggaXMgaGFzaGVkIG5leHQuIFRoZSBmYWtlCisgICAgICogcGF5bG9hZCBpcyBuZWVkZWQgc28gdGhlIGFycmF5IGNvdW50IGlzIHJpZ2h0LiBUaGlzIGlzIG9uZSBvZgorICAgICAqIHRoZSBtYWluIHRoaW5ncyB0aGF0IG1ha2UgaXQgcG9zc2libGUgdG8gaW1wbGVtZW50IHdpdGggb25lCisgICAgICogYnVmZmVyIGZvciB0aGUgd2hvbGUgY29zZSBzaWduMS4KKyAgICAgKi8KKyAgICBwYWxfY29zZV9jcnlwdG9faGFzaF91cGRhdGUoJmhhc2hfY3R4LCB1c2VmdWxfYnVmX2hlYWQodGJzX2ZpcnN0X3BhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJzX2ZpcnN0X3BhcnQubGVuIC0gMikpOworCisgICAgLyogSGFzaCB0aGUgcGF5bG9hZCAqLworICAgIHBhbF9jb3NlX2NyeXB0b19oYXNoX3VwZGF0ZSgmaGFzaF9jdHgsIHBheWxvYWQpOworCisgICAgLyogRmluaXNoIHRoZSBoYXNoIGFuZCBzZXQgdXAgdG8gcmV0dXJuIGl0ICovCisgICAgc3RhdHVzID0gcGFsX2Nvc2VfY3J5cHRvX2hhc2hfZmluaXNoKCZoYXNoX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9mb3JfaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2gpOworCitEb25lOgorICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3VpbnQzMl90IHBhbF9pbXBvcnRfYXR0ZXN0X2tleShpbnQzMl90IGFsZykKK3sKKyAgICBwc2Ffa2V5X3R5cGVfdCAgIGF0dGVzdF9rZXlfdHlwZTsKKyAgICBzaXplX3QgICAgICAgICAgIHB1YmxpY19rZXlfc2l6ZTsKKyAgICBwc2Ffc3RhdHVzX3QgICAgIHN0YXR1cyA9IFBTQV9TVUNDRVNTOworICAgIHBzYV9rZXlfcG9saWN5X3QgcG9saWN5OworICAgIHBzYV9lY2NfY3VydmVfdCAgcHNhX2N1cnZlOworICAgIHBzYV9rZXlfaGFuZGxlX3QgcHVibGljX2tleV9oYW5kbGU7CisKKyAgICAvKiBNYXBwaW5nIG9mIENPU0UgY3VydmUgdHlwZSB0byBQU0EgY3VydmUgdHlwZXMgKi8KKyAgICBwc2FfY3VydmUgPSBhdHRlc3RfbWFwX2VsbGlwdGljX2N1cnZlX3R5cGUoUF8yNTYpOworICAgIGlmIChwc2FfY3VydmUgPT0gVVNIUlRfTUFYKQorICAgICAgICByZXR1cm4gUEFMX0FUVEVTVF9FUlJPUjsKKworICAgIC8qIFNldHVwIHRoZSBrZXkgcG9saWN5IGZvciBwdWJsaWMga2V5ICovCisgICAgcG9saWN5ID0gcHNhX2tleV9wb2xpY3lfaW5pdCgpOworICAgIHBzYV9rZXlfcG9saWN5X3NldF91c2FnZSgmcG9saWN5LCBQU0FfS0VZX1VTQUdFX1ZFUklGWSwgYWxnKTsKKworICAgIHN0YXR1cyA9IHBzYV9hbGxvY2F0ZV9rZXkoJnB1YmxpY19rZXlfaGFuZGxlKTsKKyAgICBpZiAoc3RhdHVzICE9IFBTQV9TVUNDRVNTKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgc3RhdHVzID0gcHNhX3NldF9rZXlfcG9saWN5KHB1YmxpY19rZXlfaGFuZGxlLCAmcG9saWN5KTsKKyAgICBpZiAoc3RhdHVzICE9IFBTQV9TVUNDRVNTKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgYXR0ZXN0X2tleV90eXBlID0gUFNBX0tFWV9UWVBFX0VDQ19QVUJMSUNfS0VZKHBzYV9jdXJ2ZSk7CisKKyAgICAvKiBSZWdpc3RlciBwdWJsaWMga2V5IHRvIGNyeXB0byBzZXJ2aWNlICovCisgICAgcHVibGljX2tleV9zaXplID0gYXR0ZXN0X2tleS5wdWJ4X2tleV9zaXplICsgYXR0ZXN0X2tleS5wdWJ5X2tleV9zaXplOworCisgICAgc3RhdHVzID0gcHNhX2ltcG9ydF9rZXkocHVibGljX2tleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGVzdF9rZXlfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVpbnQ4X3QgKikmYXR0ZXN0X3B1YmxpY19rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpY19rZXlfc2l6ZSArIDEpOworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworCit1aW50MzJfdCBwYWxfY3J5cHRvX3B1Yl9rZXlfdmVyaWZ5KGludDMyX3QgY29zZV9hbGdvcml0aG1faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyB0b2tlbl9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2Mgc2lnbmF0dXJlKQoreworICAgIHVpbnQzMl90IHN0YXR1cyA9IFBBTF9BVFRFU1RfU1VDQ0VTUzsKKworICAgIGlmICghcHVibGljX2tleV9yZWdpc3RlcmVkKQorICAgIHsKKyAgICAgICAgc3RhdHVzID0gcGFsX2ltcG9ydF9hdHRlc3Rfa2V5KGNvc2VfYWxnb3JpdGhtX2lkKTsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBQQUxfQVRURVNUX1NVQ0NFU1MpCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgICAgIHB1YmxpY19rZXlfcmVnaXN0ZXJlZCA9IDE7CisgICAgfQorCisvKgorICogRW5hYmxlIHRoZSB2ZXJpZnkgZnVuY3Rpb24gd2hlbiBUcnVzdGVkIEZpcm1hcmUgLSBNIFN1cHBvcnRzCisKKyAqICBWZXJpZnkgdGhlIHNpZ25hdHVyZSBhIGhhc2ggb3Igc2hvcnQgbWVzc2FnZSB1c2luZyBhIHB1YmxpYyBrZXkuCisgICAgc3RhdHVzID0gcHNhX2FzeW1tZXRyaWNfdmVyaWZ5KHB1YmxpY19rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29zZV9hbGdvcml0aG1faWQsIHRva2VuX2hhc2gucHRyLCB0b2tlbl9oYXNoLmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZS5wdHIsIHNpZ25hdHVyZS5sZW4pOworKi8KKyAgICByZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9hbjUyMS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2NyeXB0by5oIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9hbjUyMS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2NyeXB0by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNjNhZDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX2FuNTIxL25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fY3J5cHRvLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJwYWxfY29tbW9uLmgiCisjaW5jbHVkZSAicGFsX2F0dGVzdGF0aW9uX2VhdC5oIgorCisjZGVmaW5lIEFUVEVTVF9QVUJMSUNfS0VZX1NMT1QgICAgICAgICAgICA0CisKK3R5cGVkZWYgc3RydWN0eworICAgIHVpbnQ4X3QgICpwdWJ4X2tleTsKKyAgICB1aW50MzJfdCAgcHVieF9rZXlfc2l6ZTsKKyAgICB1aW50OF90ICAqcHVieV9rZXk7CisgICAgdWludDMyX3QgIHB1Ynlfa2V5X3NpemU7Cit9IGVjY19rZXlfdDsKKworc3RydWN0IGVjY19wdWJsaWNfa2V5X3QgeworICAgIGNvbnN0IHVpbnQ4X3QgYTsKKyAgICB1aW50OF90IHB1YmxpY19rZXlbXTsgLyogWC1jb29yZGluYXRlIHx8IFktY29vcmRpbmF0ZSAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBlY2NfcHVibGljX2tleV90IGF0dGVzdF9wdWJsaWNfa2V5ID0geworICAgICAvKiBDb25zdGFudCBieXRlICovCisgICAgIDB4MDQsCisgICAgIC8qIFgtY29vcmRpbmF0ZSAqLworICAgICB7MHg3OSwgMHhFQiwgMHhBOSwgMHgwRSwgMHg4QiwgMHhGNCwgMHg1MCwgMHhBNiwKKyAgICAgIDB4NzUsIDB4MTUsIDB4NzYsIDB4QUQsIDB4NDUsIDB4OTksIDB4QjAsIDB4N0EsCisgICAgICAweERGLCAweDkzLCAweDhELCAweEEzLCAweEJCLCAweDBCLCAweEQxLCAweDdELAorICAgICAgMHgwMCwgMHgzNiwgMHhFRCwgMHg0OSwgMHhBMiwgMHhEMCwgMHhGQywgMHgzRiwKKyAgICAgLyogWS1jb29yZGluYXRlICovCisgICAgICAweEJGLCAweENELCAweEZBLCAweDg5LCAweDU2LCAweEI1LCAweDY4LCAweEJGLAorICAgICAgMHhEQiwgMHg4NiwgMHg3MywgMHhFNiwgMHg0OCwgMHhEOCwgMHhCNSwgMHg4RCwKKyAgICAgIDB4OTIsIDB4OTksIDB4NTUsIDB4QjEsIDB4NEEsIDB4MjYsIDB4QzMsIDB4MDgsCisgICAgICAweDBGLCAweDM0LCAweDExLCAweDdELCAweDk3LCAweDFELCAweDY4LCAweDY0fSwKK307CisKK3N0cnVjdCBwYWxfY29zZV9jcnlwdG9faGFzaCB7CisgICAgLyogQ2FuJ3QgcHV0IHRoZSBhY3R1YWwgc2l6ZSBoZXJlIHdpdGhvdXQgY3JlYXRpbmcgZGVwZW5kZWN5IG9uCisgICAgICogYWN0dWFsIGhhc2ggaW1wbGVtZW50YXRpb24sIHNvIHRoaXMgaXMgYSBmYWlybHkgbGFyZ2UgYW5kCisgICAgICogYWNjb21tb2RhdGluZyBzaXplLgorICAgICAqLworICAgIHVpbnQ4X3QgYnl0ZXNbMTI4XTsKK307CisKK3N0cnVjdCBwYWxfY29zZV9wc2FfY3J5cHRvX2hhc2ggeworICAgIHBzYV9zdGF0dXNfdCAgICAgICAgIHN0YXR1czsKKyAgICBwc2FfaGFzaF9vcGVyYXRpb25fdCBvcGVyYXRpb247Cit9OworCitzdGF0aWMgY29uc3QgdWludDhfdCBpbml0aWFsX2F0dGVzdGF0aW9uX3B1YmxpY194X2tleVtdID0KK3sKKyAgICAweDc5LCAweEVCLCAweEE5LCAweDBFLCAweDhCLCAweEY0LCAweDUwLCAweEE2LAorICAgIDB4NzUsIDB4MTUsIDB4NzYsIDB4QUQsIDB4NDUsIDB4OTksIDB4QjAsIDB4N0EsCisgICAgMHhERiwgMHg5MywgMHg4RCwgMHhBMywgMHhCQiwgMHgwQiwgMHhEMSwgMHg3RCwKKyAgICAweDAwLCAweDM2LCAweEVELCAweDQ5LCAweEEyLCAweEQwLCAweEZDLCAweDNGCit9OworCitzdGF0aWMgY29uc3QgdWludDhfdCBpbml0aWFsX2F0dGVzdGF0aW9uX3B1YmxpY195X2tleVtdID0KK3sKKyAgICAweEJGLCAweENELCAweEZBLCAweDg5LCAweDU2LCAweEI1LCAweDY4LCAweEJGLAorICAgIDB4REIsIDB4ODYsIDB4NzMsIDB4RTYsIDB4NDgsIDB4RDgsIDB4QjUsIDB4OEQsCisgICAgMHg5MiwgMHg5OSwgMHg1NSwgMHhCMSwgMHg0QSwgMHgyNiwgMHhDMywgMHgwOCwKKyAgICAweDBGLCAweDM0LCAweDExLCAweDdELCAweDk3LCAweDFELCAweDY4LCAweDY0Cit9OworCisvKiBJbml0aWFsaXplIHRoZSBzdHJ1Y3R1cmUgd2l0aCBnaXZlbiBwdWJsaWMga2V5ICovCitzdGF0aWMgY29uc3QgZWNjX2tleV90IGF0dGVzdF9rZXkgPSB7CisgICAgICAgICh1aW50OF90ICopaW5pdGlhbF9hdHRlc3RhdGlvbl9wdWJsaWNfeF9rZXksCisgICAgICAgIHNpemVvZihpbml0aWFsX2F0dGVzdGF0aW9uX3B1YmxpY194X2tleSksCisgICAgICAgICh1aW50OF90ICopaW5pdGlhbF9hdHRlc3RhdGlvbl9wdWJsaWNfeV9rZXksCisgICAgICAgIHNpemVvZihpbml0aWFsX2F0dGVzdGF0aW9uX3B1YmxpY195X2tleSkKK307CisKK2ludDMyX3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2hfc3RhcnQoc3RydWN0IHBhbF9jb3NlX2NyeXB0b19oYXNoICpoYXNoX2N0eCwgaW50MzJfdCBjb3NlX2hhc2hfYWxnX2lkKTsKK3ZvaWQgcGFsX2Nvc2VfY3J5cHRvX2hhc2hfdXBkYXRlKHN0cnVjdCBwYWxfY29zZV9jcnlwdG9faGFzaCAqaGFzaF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgZGF0YV90b19oYXNoKTsKK2ludDMyX3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2hfZmluaXNoKHN0cnVjdCBwYWxfY29zZV9jcnlwdG9faGFzaCAqaGFzaF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmIGJ1ZmZlcl90b19ob2xkX3Jlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyAqaGFzaF9yZXN1bHQpOworaW50IHBhbF9jcmVhdGVfc2hhMjU2KHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBieXRlc190b19oYXNoLCBzdHJ1Y3QgcV91c2VmdWxfYnVmIGJ1ZmZlcl9mb3JfaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgKmhhc2gpOwordWludDMyX3QgcGFsX2NvbXB1dGVfaGFzaChpbnQzMl90IGNvc2VfYWxnX2lkLCBzdHJ1Y3QgcV91c2VmdWxfYnVmIGJ1ZmZlcl9mb3JfaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jICpoYXNoLCBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgcHJvdGVjdGVkX2hlYWRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBwYXlsb2FkKTsKK3VpbnQzMl90IHBhbF9pbXBvcnRfYXR0ZXN0X2tleShpbnQzMl90IGFsZyk7Cit1aW50MzJfdCBwYWxfY3J5cHRvX3B1Yl9rZXlfdmVyaWZ5KGludDMyX3QgY29zZV9hbGdvcml0aG1faWQsIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyB0b2tlbl9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2Mgc2lnbmF0dXJlKTsKKworCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX2FuNTIxL25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fZWF0LmMgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX2FuNTIxL25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fZWF0LmMKaW5kZXggMjYyZGM1ZC4uMTc4ZmRjOSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9hbjUyMS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2VhdC5jCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fYW41MjEvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9lYXQuYwpAQCAtMTUsMTAgKzE1LDU2IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoqLwogCi0jaW5jbHVkZSAicGFsX2F0dGVzdGF0aW9uX2VhdC5oIgorI2luY2x1ZGUgInBhbF9hdHRlc3RhdGlvbl9jcnlwdG8uaCIKIAotdWludDMyX3QgIG1hbmRhdG9yeV9jbGFpbXMgPSAwLCBtYW5kYXJvdHlfc3dfY29tcG9uZW50cyA9IDA7Ci1ib29sX3QgICAgc3dfY29tcG9uZW50X3ByZXNlbnQgPSAwOwordWludDMyX3QgICAgbWFuZGF0b3J5X2NsYWltcyA9IDA7Cit1aW50MzJfdCAgICBtYW5kYXJvdHlfc3dfY29tcG9uZW50cyA9IDA7Citib29sX3QgICAgICBzd19jb21wb25lbnRfcHJlc2VudCA9IDA7CisKK3N0YXRpYyBpbnQgcGFsX2VuY29kZV9jb3NlX2tleShzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgKmNvc2Vfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWYgYnVmZmVyX2Zvcl9jb3NlX2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgeF9jb3JkLCBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgeV9jb3JkKQoreworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlOworICAgIFFDQk9SRXJyb3IgICAgICAgICAgICAgICAgcWNib3JfcmVzdWx0OworICAgIFFDQk9SRW5jb2RlQ29udGV4dCAgICAgICAgY2Jvcl9lbmNvZGVfY3R4OworICAgIGludDMyX3QgICAgICAgICAgICAgICAgICAgY29zZV9jdXJ2ZV9pZCA9IFBfMjU2OworICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyAgICAgICBlbmNvZGVkX2tleV9pZDsKKworICAgIC8qIEdldCB0aGUgcHVibGljIGtleSB4IGFuZCB5ICovCisgICAgLyogRW5jb2RlIGl0IGludG8gYSBDT1NFX0tleSBzdHJ1Y3R1cmUgKi8KKyAgICBRQ0JPUkVuY29kZV9Jbml0KCZjYm9yX2VuY29kZV9jdHgsIGJ1ZmZlcl9mb3JfY29zZV9rZXkpOworICAgIFFDQk9SRW5jb2RlX09wZW5NYXAoJmNib3JfZW5jb2RlX2N0eCk7CisgICAgUUNCT1JFbmNvZGVfQWRkSW50NjRUb01hcE4oJmNib3JfZW5jb2RlX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1NFX0tFWV9DT01NT05fS1RZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPU0VfS0VZX1RZUEVfRUMyKTsKKyAgICBRQ0JPUkVuY29kZV9BZGRJbnQ2NFRvTWFwTigmY2Jvcl9lbmNvZGVfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPU0VfS0VZX1BBUkFNX0NSViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3NlX2N1cnZlX2lkKTsKKyAgICBRQ0JPUkVuY29kZV9BZGRCeXRlc1RvTWFwTigmY2Jvcl9lbmNvZGVfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPU0VfS0VZX1BBUkFNX1hfQ09PUkRJTkFURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4X2NvcmQpOworICAgIFFDQk9SRW5jb2RlX0FkZEJ5dGVzVG9NYXBOKCZjYm9yX2VuY29kZV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09TRV9LRVlfUEFSQU1fWV9DT09SRElOQVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlfY29yZCk7CisgICAgUUNCT1JFbmNvZGVfQ2xvc2VNYXAoJmNib3JfZW5jb2RlX2N0eCk7CisKKyAgICBxY2Jvcl9yZXN1bHQgPSBRQ0JPUkVuY29kZV9GaW5pc2goJmNib3JfZW5jb2RlX2N0eCwgJmVuY29kZWRfa2V5X2lkKTsKKyAgICBpZiAocWNib3JfcmVzdWx0ICE9IFFDQk9SX1NVQ0NFU1MpCisgICAgeworICAgICAgICAvKiBNYWlubHkgbWVhbnMgdGhhdCB0aGUgQ09TRV9LZXkgd2FzIHRvbyBiaWcgZm9yIGJ1ZmZlcl9mb3JfY29zZV9rZXkgKi8KKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gUEFMX0FUVEVTVF9FUlJfUFJPVEVDVEVEX0hFQURFUlM7CisgICAgICAgIGdvdG8gRG9uZTsKKyAgICB9CisKKyAgICAvKiBGaW5pc2ggdXAgYW5kIHJldHVybiAqLworICAgICpjb3NlX2tleSA9IGVuY29kZWRfa2V5X2lkOworICAgIHJldHVybl92YWx1ZSA9IFBBTF9BVFRFU1RfU1VDQ0VTUzsKKworRG9uZToKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCiAKIHN0YXRpYyBpbnQgZ2V0X2l0ZW1zX2luX21hcChRQ0JPUkRlY29kZUNvbnRleHQgKmRlY29kZV9jb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpdGVtc190b19nZXRfdCAqaXRlbV9saXN0KQpAQCAtOTAsNyArMTM2LDcgQEAKIH0KIAogc3RhdGljIGludCBwYXJzZV91bnByb3RlY3RlZF9oZWFkZXJzKFFDQk9SRGVjb2RlQ29udGV4dCAqZGVjb2RlX2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVzZWZ1bF9idWZfYyAqY2hpbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jICpjaGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpsb29wX2JhY2spCiB7CiAgICAgc3RydWN0IGl0ZW1zX3RvX2dldF90ICAgaXRlbV9saXN0WzNdOwpAQCAtMTIwLDcgKzE2Niw3IEBACiAgICAgcmV0dXJuIFBBTF9BVFRFU1RfU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBwYXJzZV9wcm90ZWN0ZWRfaGVhZGVycyhzdHJ1Y3QgdXNlZnVsX2J1Zl9jIHByb3RlY3RlZF9oZWFkZXJzLAorc3RhdGljIGludCBwYXJzZV9wcm90ZWN0ZWRfaGVhZGVycyhzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgcHJvdGVjdGVkX2hlYWRlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKmFsZ19pZCkKIHsKICAgICBRQ0JPUkRlY29kZUNvbnRleHQgIGRlY29kZV9jb250ZXh0OwpAQCAtMTU2LDcgKzIwMiw3IEBACiAgICAgQHJldHVybiAgIC0gZXJyb3Igc3RhdHVzCiAqKi8KIHN0YXRpYyBpbnQgcGFyc2VfY2xhaW1zKFFDQk9SRGVjb2RlQ29udGV4dCAqZGVjb2RlX2NvbnRleHQsIFFDQk9SSXRlbSBpdGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXNlZnVsX2J1Zl9jIGNvbXBsZXRlZF9jaGFsbGVuZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBjb21wbGV0ZWRfY2hhbGxlbmdlKQogewogICAgIGludCBpLCBjb3VudCA9IDA7CiAgICAgaW50IHN0YXR1cyA9IFBBTF9BVFRFU1RfU1VDQ0VTUzsKQEAgLTI4MSwxNiArMzI3LDQyIEBACiBpbnQzMl90IHBhbF9pbml0aWFsX2F0dGVzdF92ZXJpZnlfdG9rZW4odWludDhfdCAqY2hhbGxlbmdlLCB1aW50MzJfdCBjaGFsbGVuZ2Vfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICp0b2tlbiwgdWludDMyX3QgdG9rZW5fc2l6ZSkKIHsKLSAgICBpbnQgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFBBTF9BVFRFU1RfU1VDQ0VTUzsKKyAgICBpbnQzMl90ICAgICAgICAgICAgIHN0YXR1cyA9IFBBTF9BVFRFU1RfU1VDQ0VTUzsKICAgICBib29sICAgICAgICAgICAgICAgIHNob3J0X2NpcmN1aXQ7CiAgICAgaW50MzJfdCAgICAgICAgICAgICBjb3NlX2FsZ29yaXRobV9pZDsKICAgICBRQ0JPUkl0ZW0gICAgICAgICAgIGl0ZW07CiAgICAgUUNCT1JEZWNvZGVDb250ZXh0ICBkZWNvZGVfY29udGV4dDsKLSAgICBzdHJ1Y3QgdXNlZnVsX2J1Zl9jIGNvbXBsZXRlZF9jaGFsbGVuZ2U7Ci0gICAgc3RydWN0IHVzZWZ1bF9idWZfYyBjb21wbGV0ZWRfdG9rZW47Ci0gICAgc3RydWN0IHVzZWZ1bF9idWZfYyBwYXlsb2FkOwotICAgIHN0cnVjdCB1c2VmdWxfYnVmX2MgcHJvdGVjdGVkX2hlYWRlcnM7Ci0gICAgc3RydWN0IHVzZWZ1bF9idWZfYyBraWQ7CisgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGNvbXBsZXRlZF9jaGFsbGVuZ2U7CisgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGNvbXBsZXRlZF90b2tlbjsKKyAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgcGF5bG9hZDsKKyAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2Mgc2lnbmF0dXJlOworICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBwcm90ZWN0ZWRfaGVhZGVyczsKKyAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2Mga2lkOworICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyB4X2NvcmQ7CisgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHlfY29yZDsKKyAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgY29zZV9rZXlfdG9faGFzaDsKKyAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2Mga2V5X2hhc2g7CisgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHRva2VuX2hhc2g7CisgICAgVVNFRlVMX0JVRl9NQUtFX1NUQUNLX1VCKGJ1Zl90b19ob2xkX3hfY29vcmQsIFRfQ09TRV9DUllQVE9fRUNfUDI1Nl9DT09SRF9TSVpFKTsKKyAgICBVU0VGVUxfQlVGX01BS0VfU1RBQ0tfVUIoYnVmX3RvX2hvbGRfeV9jb29yZCwgVF9DT1NFX0NSWVBUT19FQ19QMjU2X0NPT1JEX1NJWkUpOworICAgIFVTRUZVTF9CVUZfTUFLRV9TVEFDS19VQihidWZmZXJfZm9yX2tpZCwgVF9DT1NFX0NSWVBUT19TSEEyNTZfU0laRSk7CisgICAgVVNFRlVMX0JVRl9NQUtFX1NUQUNLX1VCKGJ1ZmZlcl9mb3JfY29zZV9rZXksIE1BWF9FTkNPREVEX0NPU0VfS0VZX1NJWkUpOworICAgIFVTRUZVTF9CVUZfTUFLRV9TVEFDS19VQihidWZmZXJfZm9yX2VuY29kZWRfa2V5LCBNQVhfRU5DT0RFRF9DT1NFX0tFWV9TSVpFKTsKKyAgICBVU0VGVUxfQlVGX01BS0VfU1RBQ0tfVUIoYnVmZmVyX2Zvcl90b2tlbl9oYXNoLCBUX0NPU0VfQ1JZUFRPX1NIQTI1Nl9TSVpFKTsKKworICAgIGtpZC5wdHIgPSBidWZmZXJfZm9yX2VuY29kZWRfa2V5LnB0cjsKKworICAgIG1lbWNweShidWZfdG9faG9sZF94X2Nvb3JkLnB0ciwgKGNvbnN0IHZvaWQgKilhdHRlc3Rfa2V5LnB1Ynhfa2V5LCBhdHRlc3Rfa2V5LnB1Ynhfa2V5X3NpemUpOworICAgIG1lbWNweShidWZfdG9faG9sZF95X2Nvb3JkLnB0ciwgKGNvbnN0IHZvaWQgKilhdHRlc3Rfa2V5LnB1Ynlfa2V5LCBhdHRlc3Rfa2V5LnB1Ynlfa2V5X3NpemUpOworCisgICAgLyogVXBkYXRlIHNpemUgKi8KKyAgICBidWZfdG9faG9sZF94X2Nvb3JkLmxlbiA9IGF0dGVzdF9rZXkucHVieF9rZXlfc2l6ZTsKKyAgICBidWZfdG9faG9sZF95X2Nvb3JkLmxlbiA9IGF0dGVzdF9rZXkucHVieV9rZXlfc2l6ZTsKKworICAgIHhfY29yZC5wdHIgPSBidWZfdG9faG9sZF94X2Nvb3JkLnB0cjsKKyAgICB4X2NvcmQubGVuID0gYnVmX3RvX2hvbGRfeF9jb29yZC5sZW47CisgICAgeV9jb3JkLnB0ciA9IGJ1Zl90b19ob2xkX3lfY29vcmQucHRyOworICAgIHlfY29yZC5sZW4gPSBidWZfdG9faG9sZF95X2Nvb3JkLmxlbjsKIAogICAgIC8qIENvbnN0cnVjdCB0aGUgdG9rZW4gYnVmZmVyIGZvciB2YWxpZGF0aW9uICovCiAgICAgY29tcGxldGVkX3Rva2VuLnB0ciA9IHRva2VuOwpAQCAtMzQ1LDYgKzQxNywyNyBAQAogICAgIGlmIChzdGF0dXMgIT0gUEFMX0FUVEVTVF9TVUNDRVNTKQogICAgICAgICByZXR1cm4gc3RhdHVzOwogCisgICAgLyogRW5jb2RlIHRoZSBnaXZlbiBwdWJsaWMga2V5ICovCisgICAgc3RhdHVzID0gcGFsX2VuY29kZV9jb3NlX2tleSgmY29zZV9rZXlfdG9faGFzaCwgYnVmZmVyX2Zvcl9jb3NlX2tleSwgeF9jb3JkLCB5X2NvcmQpOworICAgIGlmIChzdGF0dXMgIT0gUEFMX0FUVEVTVF9TVUNDRVNTKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgLyogQ3JlYXRlIGhhc2ggb2YgdGhlIGdpdmVuIHB1YmxpYyBrZXkgKi8KKyAgICBzdGF0dXMgPSBwYWxfY3JlYXRlX3NoYTI1Nihjb3NlX2tleV90b19oYXNoLCBidWZmZXJfZm9yX2tpZCwgJmtleV9oYXNoKTsKKyAgICBpZiAoc3RhdHVzICE9IFBTQV9TVUNDRVNTKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgLyogQ29tcGFyZSB0aGUgaGFzaCBvZiB0aGUgcHVibGljIGtleSBpbiB0b2tlbiBhbmQgaGFzaCBvZiB0aGUgZ2l2ZW4gcHVibGljIGtleSAqLworICAgIGlmIChraWQubGVuICE9IGtleV9oYXNoLmxlbikKKyAgICB7CisgICAgICAgIHJldHVybiBQQUxfQVRURVNUX0hBU0hfTEVOR1RIX01JU01BVENIOworICAgIH0KKworICAgIGlmIChtZW1jbXAoa2lkLnB0ciwga2V5X2hhc2gucHRyLCBraWQubGVuKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFBBTF9BVFRFU1RfSEFTSF9NSVNNQVRDSDsKKyAgICB9CisKICAgICAvKiBHZXQgdGhlIHBheWxvYWQgKi8KICAgICBRQ0JPUkRlY29kZV9HZXROZXh0KCZkZWNvZGVfY29udGV4dCwgJml0ZW0pOwogICAgIGlmIChpdGVtLnVEYXRhVHlwZSAhPSBRQ0JPUl9UWVBFX0JZVEVfU1RSSU5HKQpAQCAtMzU3LDYgKzQ1MCwxOSBAQAogICAgIGlmIChpdGVtLnVEYXRhVHlwZSAhPSBRQ0JPUl9UWVBFX0JZVEVfU1RSSU5HKQogICAgICAgICByZXR1cm4gUEFMX0FUVEVTVF9UT0tFTl9FUlJfQ0JPUl9GT1JNQVRUSU5HOwogCisgICAgc2lnbmF0dXJlID0gaXRlbS52YWwuc3RyaW5nOworCisgICAgLyogQ29tcHV0ZSB0aGUgaGFzaCBmcm9tIHRoZSB0b2tlbiAqLworICAgIHN0YXR1cyA9IHBhbF9jb21wdXRlX2hhc2goY29zZV9hbGdvcml0aG1faWQsIGJ1ZmZlcl9mb3JfdG9rZW5faGFzaCwgJnRva2VuX2hhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWRfaGVhZGVycywgcGF5bG9hZCk7CisgICAgaWYgKHN0YXR1cyAhPSBQQUxfQVRURVNUX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICAvKiBWZXJpZnkgdGhlIHNpZ25hdHVyZSAqLworICAgIHN0YXR1cyA9IHBhbF9jcnlwdG9fcHViX2tleV92ZXJpZnkoY29zZV9hbGdvcml0aG1faWQsIHRva2VuX2hhc2gsIHNpZ25hdHVyZSk7CisgICAgaWYgKHN0YXR1cyAhPSBQQUxfQVRURVNUX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKICAgICAvKiBJbml0aWFsaXplIHRoZSBEZWNvZGVyIGFuZCB2YWxpZGF0ZSB0aGUgcGF5bG9hZCBmb3JtYXQgKi8KICAgICBRQ0JPUkRlY29kZV9Jbml0KCZkZWNvZGVfY29udGV4dCwgcGF5bG9hZCwgUUNCT1JfREVDT0RFX01PREVfTk9STUFMKTsKICAgICBzdGF0dXMgPSBRQ0JPUkRlY29kZV9HZXROZXh0KCZkZWNvZGVfY29udGV4dCwgJml0ZW0pOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9hbjUyMS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2VhdC5oIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9hbjUyMS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2VhdC5oCmluZGV4IDlmNDM1ZmIuLjhhMGM1NDUgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fYW41MjEvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9lYXQuaAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX2FuNTIxL25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fZWF0LmgKQEAgLTE3LDE2ICsxNyw3MCBAQAogCiAjaW5jbHVkZSAicWNib3IuaCIKICNpbmNsdWRlICJwYWxfY29tbW9uLmgiCisjaW5jbHVkZSAicHNhL2NyeXB0by5oIgogCiAjZGVmaW5lIFBBTF9BVFRFU1RfTUlOX0VSUk9SICAgICAgICAgICAgICAzMAogCisvKiBOSVNUIFAtMjU2IGFsc28ga25vd24gYXMgc2VjcDI1NnIxICovCisjZGVmaW5lIFBfMjU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKICNkZWZpbmUgQ09TRV9IRUFERVJfUEFSQU1fQUxHICAgICAgICAgICAgIDEKICNkZWZpbmUgQ09TRV9IRUFERVJfUEFSQU1fS0lEICAgICAgICAgICAgIDQKIAotI2RlZmluZSBNQU5EQVRPUllfQ0xBSU1fV0lUSF9TV19DT01QICAgICAgODYyCi0jZGVmaW5lIE1BTkRBVE9SWV9DTEFJTV9OT19TV19DT01QICAgICAgICA5MjYKLSNkZWZpbmUgTUFOREFUT1JZX1NXX0NPTVAgICAgICAgICAgICAgICAgIDM2Ci0jZGVmaW5lIENCT1JfQVJNX1RPVEFMX0NMQUlNX0lOU1RBTkNFICAgICAxMAorI2RlZmluZSBDT1NFX0tFWV9DT01NT05fS1RZICAgICAgICAgICAgICAgMQorI2RlZmluZSBDT1NFX0tFWV9UWVBFX0VDMiAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDT1NFX0tFWV9QQVJBTV9DUlYgICAgICAgICAgICAgICAtMQorI2RlZmluZSBDT1NFX0tFWV9QQVJBTV9YX0NPT1JESU5BVEUgICAgICAtMgorI2RlZmluZSBDT1NFX0tFWV9QQVJBTV9ZX0NPT1JESU5BVEUgICAgICAtMworI2RlZmluZSBDT1NFX0FMR09SSVRITV9FUzI1NiAgICAgICAgICAgICAtNworI2RlZmluZSBDT1NFX0FMR19TSEEyNTZfUFJPUFJJRVRBUlkgICAgICAtNzIwMDAKKworLyoqCisgKiBUaGUgc2l6ZSBvZiBYIGFuZCBZIGNvb3JkaW5hdGUgaW4gMiBwYXJhbWV0ZXIgc3R5bGUgRUMgcHVibGljCisgKiBrZXkuIEZvcm1hdCBpcyBhcyBkZWZpbmVkIGluIFtDT1NFIChSRkMgODE1MildCisgKiAoaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzgxNTIpIGFuZCBbU0VDIDE6IEVsbGlwdGljIEN1cnZlCisgKiBDcnlwdG9ncmFwaHldKGh0dHA6Ly93d3cuc2VjZy5vcmcvc2VjMS12Mi5wZGYpLgorICoKKyAqIFRoaXMgc2l6ZSBpcyB3ZWxsLWtub3duIGFuZCBkb2N1bWVudGVkIGluIHB1YmxpYyBzdGFuZGFyZHMuCisgKi8KKyNkZWZpbmUgVF9DT1NFX0NSWVBUT19FQ19QMjU2X0NPT1JEX1NJWkUgIDMyCisjZGVmaW5lIFRfQ09TRV9DUllQVE9fU0hBMjU2X1NJWkUgICAgICAgICAzMgorCisjZGVmaW5lIE1BWF9FTkNPREVEX0NPU0VfS0VZX1NJWkUgXAorICAgIDEgKyAvKiAxIGJ5dGUgdG8gZW5jb2RlIG1hcCAqLyBcCisgICAgMiArIC8qIDIgYnl0ZXMgdG8gZW5jb2RlIGtleSB0eXBlICovIFwKKyAgICAyICsgLyogMiBieXRlcyB0byBlbmNvZGUgY3VydmUgKi8gXAorICAgIDIgKiAvKiB0aGUgWCBhbmQgWSBjb29yZGluYXRlcyBhdCAzMiBieXRlcyBlYWNoICovIFwKKyAgICAgICAgKFRfQ09TRV9DUllQVE9fRUNfUDI1Nl9DT09SRF9TSVpFICsgMSArIDIpCisjZGVmaW5lIFVTRUZVTF9CVUZfTUFLRV9TVEFDS19VQiBVc2VmdWxCdWZfTUFLRV9TVEFDS19VQgorCisjZGVmaW5lIENPU0VfU0lHX0NPTlRFWFRfU1RSSU5HX1NJR05BVFVSRTEgIlNpZ25hdHVyZTEiCisKKy8qIFByaXZhdGUgdmFsdWUuIEludGVudGlvbmFsbHkgbm90IGRvY3VtZW50ZWQgZm9yIERveHlnZW4uCisgKiBUaGlzIGlzIHRoZSBzaXplIGFsbG9jYXRlZCBmb3IgdGhlIGVuY29kZWQgcHJvdGVjdGVkIGhlYWRlcnMuICBJdAorICogbmVlZHMgdG8gYmUgYmlnIGVub3VnaCBmb3IgbWFrZV9wcm90ZWN0ZWRfaGVhZGVyKCkgdG8gc3VjY2VlZC4gSXQKKyAqIGN1cnJlbnRseSBzaXplZCBmb3Igb25lIGhlYWRlciB3aXRoIGFuIGFsZ29yaXRobSBJRCB1cCB0byAzMiBiaXRzCisgKiBsb25nIC0tIG9uZSBieXRlIGZvciB0aGUgd3JhcHBpbmcgbWFwLCBvbmUgYnl0ZSBmb3IgdGhlIGxhYmVsLCA1CisgKiBieXRlcyBmb3IgdGhlIElELiBJZiB0aGlzIGlzIG1hZGUgYWNjaWRlbnRpYWxseSB0b28gc21hbGwsIFFDQk9SIHdpbGwKKyAqIG9ubHkgcmV0dXJuIGFuIGVycm9yLCBhbmQgbm90IG92ZXJydW4gYW55IGJ1ZmZlcnMuCisgKgorICogOSBleHRyYSBieXRlcyBhcmUgYWRkZWQsIHJvdW5kaW5nIGl0IHVwIHRvIDE2IHRvdGFsLCBpbiBjYXNlIHNvbWUKKyAqIG90aGVyIHByb3RlY3RlZCBoZWFkZXIgaXMgdG8gYmUgYWRkZWQuCisgKi8KKyNkZWZpbmUgVF9DT1NFX1NJR04xX01BWF9QUk9UX0hFQURFUiAoMSsxKzUrOSkKKworLyoqCisgKiBUaGlzIGlzIHRoZSBzaXplIG9mIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBDQk9SIGVuY29kZWQgVEJTCisgKiBieXRlcy4gSXQgaXMgYXJvdW5kIDIwIGJ5dGVzLiBTZWUgY3JlYXRlX3Ric19oYXNoKCkuCisgKi8KKyNkZWZpbmUgVF9DT1NFX1NJWkVfT0ZfVEJTIFwKKyAgICAxICsgLyogRm9yIG9wZW5pbmcgdGhlIGFycmF5ICovIFwKKyAgICBzaXplb2YoQ09TRV9TSUdfQ09OVEVYVF9TVFJJTkdfU0lHTkFUVVJFMSkgKyAvKiAiU2lnbmF0dXJlMSIgKi8gXAorICAgIDIgKyAvKiBPdmVyaGVhZCBmb3IgZW5jb2Rpbmcgc3RyaW5nICovIFwKKyAgICBUX0NPU0VfU0lHTjFfTUFYX1BST1RfSEVBREVSICsgLyogZW50aXJlIHByb3RlY3RlZCBoZWFkZXJzICovIFwKKyAgICAzICogKCAvKiAzIE5VTEwgYnN0cnMgZm9yIGZpZWxkcyBub3QgdXNlZCAqLyBcCisgICAgICAgIDEgLyogc2l6ZSBvZiBhIE5VTEwgYnN0ciAqLyAgXAorICAgICkKIAogLyoKICBDQk9SIExhYmVsIGZvciBwcm9wcmlldGFyeSBoZWFkZXIgaW5kaWNhdGluZyBzaG9ydC1jaXJjdWl0CkBAIC00Nyw2ICsxMDEsOCBAQAogI2RlZmluZSBFQVRfQ0JPUl9BUk1fTEFCRUxfVUVJRCAgICAgICAgICAgICAgICAgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFIC0gOSkKICNkZWZpbmUgRUFUX0NCT1JfQVJNX0xBQkVMX09SSUdJTkFUSU9OICAgICAgICAgIChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAtIDEwKQogCisjZGVmaW5lIENCT1JfQVJNX1RPVEFMX0NMQUlNX0lOU1RBTkNFICAgICAgICAgICAxMAorCiAjZGVmaW5lIEVBVF9DQk9SX1NXX0NPTVBPTkVOVF9UWVBFICAgICAgICAgICAgICAoMXUpCiAjZGVmaW5lIEVBVF9DQk9SX1NXX0NPTVBPTkVOVF9NRUFTVVJFTUVOVCAgICAgICAoMnUpCiAjZGVmaW5lIEVBVF9DQk9SX1NXX0NPTVBPTkVOVF9FUE9DSCAgICAgICAgICAgICAoM3UpCkBAIC01NCw2ICsxMTAsNDAgQEAKICNkZWZpbmUgRUFUX0NCT1JfU1dfQ09NUE9ORU5UX1NJR05FUl9JRCAgICAgICAgICg1dSkKICNkZWZpbmUgRUFUX0NCT1JfU1dfQ09NUE9ORU5UX01FQVNVUkVNRU5UX0RFU0MgICg2dSkKIAorI2RlZmluZSBNQU5EQVRPUllfQ0xBSU1fV0lUSF9TV19DT01QICAgICAgICAgICAoMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX05PTkNFKSAgICAgICAgICAgICAgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX1VFSUQpICAgICAgICAgICAgICAgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX0lNUExFTUVOVEFUSU9OX0lEKSAgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX0NMSUVOVF9JRCkgICAgICAgICAgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX1NFQ1VSSVRZX0xJRkVDWUNMRSkgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX0JPT1RfU0VFRCkgICAgICAgICAgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX1NXX0NPTVBPTkVOVFMpKQorCisjZGVmaW5lIE1BTkRBVE9SWV9DTEFJTV9OT19TV19DT01QICAgICAgICAgICAgICgxIDw8IChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBFQVRfQ0JPUl9BUk1fTEFCRUxfTk9OQ0UpICAgICAgICAgICAgICB8ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDw8IChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBFQVRfQ0JPUl9BUk1fTEFCRUxfVUVJRCkgICAgICAgICAgICAgICB8ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDw8IChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBFQVRfQ0JPUl9BUk1fTEFCRUxfSU1QTEVNRU5UQVRJT05fSUQpICB8ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDw8IChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBFQVRfQ0JPUl9BUk1fTEFCRUxfQ0xJRU5UX0lEKSAgICAgICAgICB8ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDw8IChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBFQVRfQ0JPUl9BUk1fTEFCRUxfU0VDVVJJVFlfTElGRUNZQ0xFKSB8ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDw8IChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBFQVRfQ0JPUl9BUk1fTEFCRUxfQk9PVF9TRUVEKSAgICAgICAgICB8ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDw8IChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBFQVRfQ0JPUl9BUk1fTEFCRUxfTk9fU1dfQ09NUE9ORU5UUykpCisKKyNkZWZpbmUgTUFOREFUT1JZX1NXX0NPTVAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgRUFUX0NCT1JfU1dfQ09NUE9ORU5UX01FQVNVUkVNRU5UICAgICAgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCBFQVRfQ0JPUl9TV19DT01QT05FTlRfU0lHTkVSX0lEKQorCisjZGVmaW5lIE5VTExfVVNFRlVMX0JVRl9DICBOVUxMVXNlZnVsQnVmQwogCiBlbnVtIGF0dGVzdGF0aW9uX2Vycm9yX2NvZGUgewogICAgIFBBTF9BVFRFU1RfU1VDQ0VTUyA9IDAsCkBAIC02MSw2ICsxNTEsMTMgQEAKICAgICBQQUxfQVRURVNUX1RPS0VOX0NIQUxMRU5HRV9NSVNNQVRDSCwKICAgICBQQUxfQVRURVNUX1RPS0VOX05PVF9TVVBQT1JURUQsCiAgICAgUEFMX0FUVEVTVF9UT0tFTl9OT1RfQUxMX01BTkRBVE9SWV9DTEFJTVMsCisgICAgUEFMX0FUVEVTVF9IQVNIX0xFTkdUSF9NSVNNQVRDSCwKKyAgICBQQUxfQVRURVNUX0hBU0hfTUlTTUFUQ0gsCisgICAgUEFMX0FUVEVTVF9IQVNIX0ZBSUwsCisgICAgUEFMX0FUVEVTVF9IQVNIX1VOU1VQUE9SVEVELAorICAgIFBBTF9BVFRFU1RfSEFTSF9CVUZGRVJfU0laRSwKKyAgICBQQUxfQVRURVNUX0VSUl9QUk9URUNURURfSEVBREVSUywKKyAgICBQQUxfQVRURVNUX0VSUl9TSUdOX1NUUlVDVCwKICAgICBQQUxfQVRURVNUX0VSUk9SLAogfTsKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9hbjUyMS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2ludGYuaCBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fYW41MjEvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9pbnRmLmgKaW5kZXggZWYxMzJiNS4uMTJmNmVlOSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9hbjUyMS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2ludGYuaAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX2FuNTIxL25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25faW50Zi5oCkBAIC0xOCw3ICsxOCw3IEBACiAjaWZuZGVmIF9QQUxfSU5JVElBTF9BVFRFU1RBVElPTl9IXwogI2RlZmluZSBfUEFMX0lOSVRJQUxfQVRURVNUQVRJT05fSF8KIAotI2luY2x1ZGUgInBhbF9hdHRlc3RhdGlvbl9lYXQuaCIKKyNpbmNsdWRlICJwYWxfYXR0ZXN0YXRpb25fY3J5cHRvLmgiCiAKIGVudW0gYXR0ZXN0YXRpb25fZnVuY3Rpb25fY29kZSB7CiAgICAgUEFMX0lOSVRJQUxfQVRURVNUX0dFVF9UT0tFTiAgICAgICAgPSAweDEsCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX2FuNTIxL3NwZS9wYWxfZHJpdmVyX2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fYW41MjEvc3BlL3BhbF9kcml2ZXJfaW50Zi5jCmluZGV4IGNjOGI1MzcuLmZkMzA3ODMgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fYW41MjEvc3BlL3BhbF9kcml2ZXJfaW50Zi5jCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fYW41MjEvc3BlL3BhbF9kcml2ZXJfaW50Zi5jCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgICAgICAgIC0gZGF0YSAgICAgOiBWYWx1ZSBmb3IgZm9ybWF0IHNwZWNpZmllcgogKiovCiAKLXZvaWQgcGFsX3ByaW50KGNoYXIgKnN0ciwgdWludDMyX3QgZGF0YSkKK3ZvaWQgcGFsX3ByaW50KGNoYXIgKnN0ciwgaW50MzJfdCBkYXRhKQogewogICBwYWxfY21zZGtfcHJpbnQoc3RyLGRhdGEpOwogCkBAIC0xMTAsMyArMTEwLDIzIEBACiAgICAgcmV0dXJuIChwYWxfd2RfY21zZGtfaXNfZW5hYmxlZChiYXNlX2FkZHIpKTsKIH0KIAorLyoqCisgICAgQGJyaWVmICAgLSBUcmlnZ2VyIGludGVycnVwdCBmb3IgaXJxIHNpZ25hbCBhc3NpZ25lZCB0byBkcml2ZXIgcGFydGl0aW9uCisgICAgICAgICAgICAgICBiZWZvcmUgcmV0dXJuIHRvIGNhbGxlci4KKyAgICBAcGFyYW0gICAtIHZvaWQKKyAgICBAcmV0dXJuICAtIHZvaWQKKyoqLwordm9pZCBwYWxfZ2VuZXJhdGVfaW50ZXJydXB0KHZvaWQpCit7CisgICAgcGFsX3VhcnRfY21zZGtfZ2VuZXJhdGVfaXJxKCk7Cit9CisKKy8qKgorICAgIEBicmllZiAgIC0gRGlzYWJsZSBpbnRlcnJ1cHQgdGhhdCB3YXMgZ2VuZXJhdGVkIHVzaW5nIHBhbF9nZW5lcmF0ZV9pbnRlcnJ1cHQgQVBJLgorICAgIEBwYXJhbSAgIC0gdm9pZAorICAgIEByZXR1cm4gIC0gdm9pZAorKiovCit2b2lkIHBhbF9kaXNhYmxlX2ludGVycnVwdCh2b2lkKQoreworICAgIHBhbF91YXJ0X2Ntc2RrX2Rpc2FibGVfaXJxKCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX2FuNTIxL3NwZS9wYWxfZHJpdmVyX2ludGYuaCBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fYW41MjEvc3BlL3BhbF9kcml2ZXJfaW50Zi5oCmluZGV4IGRhODVhNjMuLmNlZjM0Y2EgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fYW41MjEvc3BlL3BhbF9kcml2ZXJfaW50Zi5oCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fYW41MjEvc3BlL3BhbF9kcml2ZXJfaW50Zi5oCkBAIC0yMywxMSArMjMsMTMgQEAKICNpbmNsdWRlICJwYWxfd2RfY21zZGsuaCIKIAogdm9pZCBwYWxfdWFydF9pbml0KHVpbnQzMl90IHVhcnRfYmFzZV9hZGRyKTsKLXZvaWQgcGFsX3ByaW50KGNoYXIgKnN0ciwgdWludDMyX3QgZGF0YSk7Cit2b2lkIHBhbF9wcmludChjaGFyICpzdHIsIGludDMyX3QgZGF0YSk7CiBpbnQgcGFsX252bWVtX3dyaXRlKGFkZHJfdCBiYXNlLCB1aW50MzJfdCBvZmZzZXQsIHZvaWQgKmJ1ZmZlciwgaW50IHNpemUpOwogaW50IHBhbF9udm1lbV9yZWFkKGFkZHJfdCBiYXNlLCB1aW50MzJfdCBvZmZzZXQsIHZvaWQgKmJ1ZmZlciwgaW50IHNpemUpOwogaW50IHBhbF93ZF90aW1lcl9pbml0KGFkZHJfdCBiYXNlX2FkZHIsIHVpbnQzMl90IHRpbWVfdXMsIHVpbnQzMl90IHRpbWVyX3RpY2tfdXMpOwogaW50IHBhbF93ZF90aW1lcl9lbmFibGUoYWRkcl90IGJhc2VfYWRkcik7CiBpbnQgcGFsX3dkX3RpbWVyX2Rpc2FibGUoYWRkcl90IGJhc2VfYWRkcik7CiBpbnQgcGFsX3dkX3RpbWVyX2lzX2VuYWJsZWQoYWRkcl90IGJhc2VfYWRkcik7Cit2b2lkIHBhbF9nZW5lcmF0ZV9pbnRlcnJ1cHQodm9pZCk7Cit2b2lkIHBhbF9kaXNhYmxlX2ludGVycnVwdCh2b2lkKTsKICNlbmRpZiAvKiBfUEFMX0RSSVZFUl9JTlRGX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvTWFrZWZpbGUgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvTWFrZWZpbGUKaW5kZXggMDA4MjlhZS4uYWE3ZTEwYiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL01ha2VmaWxlCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9NYWtlZmlsZQpAQCAtODMsNiArODMsNyBAQAogaWZlcSAoJHtQU0FfSU5JVElBTF9BVFRFU1RBVElPTl9JTVBMRU1FTlRFRH0sMSkKIFNSQ19DX05TUEUgKz0gcGFsX2F0dGVzdGF0aW9uX2ludGYuYwogU1JDX0NfTlNQRSArPSBwYWxfYXR0ZXN0YXRpb25fZWF0LmMKK1NSQ19DX05TUEUgKz0gcGFsX2F0dGVzdGF0aW9uX2NyeXB0by5jCiBlbHNlCiBTUkNfQ19OU1BFICs9IHBhbF9hdHRlc3RhdGlvbl9lbXB0eV9pbnRmLmMKIGVuZGlmCkBAIC05OCw3ICs5OSw3IEBACiAgICAgICAgICAtSSQoU09VUkNFKS9wbGF0Zm9ybS90YXJnZXRzLyQoVEFSR0VUKS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24gXAogICAgICAgICAgLUkkKFNPVVJDRSkvcGxhdGZvcm0vdGFyZ2V0cy8kKFRBUkdFVCkvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL2V4dC9pbmMgXAogICAgICAgICAgLUkkKFNPVVJDRSkvcGxhdGZvcm0vdGFyZ2V0cy8kKFRBUkdFVCkvbnNwZS9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UgXAotICAgICAgICAgLUkkKFNPVVJDRSkvcGxhdGZvcm0vdGFyZ2V0cy8kKFRBUkdFVCkvbnNwZS9wcm90ZWN0ZWRfc3RvcmFnZQorICAgICAgICAgLUkkKFNPVVJDRSkvcGxhdGZvcm0vdGFyZ2V0cy8kKFRBUkdFVCkvbnNwZS9wcm90ZWN0ZWRfc3RvcmFnZSBcCiAKIFZQQVRIPSQoU09VUkNFKS9wbGF0Zm9ybS90YXJnZXRzLyQoVEFSR0VUKS86IFwKICAgICAgICQoU09VUkNFKS9wbGF0Zm9ybS90YXJnZXRzLyQoVEFSR0VUKS9zcGU6IFwKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9tYW5pZmVzdHMvY29tbW9uL2RyaXZlcl9wYXJ0aXRpb25fcHNhLmpzb24gYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbWFuaWZlc3RzL2NvbW1vbi9kcml2ZXJfcGFydGl0aW9uX3BzYS5qc29uCmluZGV4IDVkNTc1NzEuLjcwMTBjOWIgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9tYW5pZmVzdHMvY29tbW9uL2RyaXZlcl9wYXJ0aXRpb25fcHNhLmpzb24KKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL21hbmlmZXN0cy9jb21tb24vZHJpdmVyX3BhcnRpdGlvbl9wc2EuanNvbgpAQCAtMywxMSArMyw5IEBACiAgICJuYW1lIjogIkRSSVZFUl9QQVJUSVRJT04iLAogICAidHlwZSI6ICJQU0EtUk9UIiwKICAgInByaW9yaXR5IjogIk5PUk1BTCIsCi0gICJpZCI6ICIweDAwMDAwMDAzIiwKICAgImRlc2NyaXB0aW9uIjogIkltcGxlbWVudHMgZGV2aWNlIHNlcnZpY2VzIHN1Y2ggcHJpbnQsIGZsYXNoIHJlYWQvd3JpdGUsLiBldGMuIiwKICAgImVudHJ5X3BvaW50IjogImRyaXZlcl9tYWluIiwKICAgInN0YWNrX3NpemUiOiAiMHg0MDAiLAotICAiaGVhcF9zaXplIjogIjB4MTAwIiwKICAgInNlcnZpY2VzIjogW3sKICAgICAgICJuYW1lIjogIkRSSVZFUl9VQVJUX1NJRCIsCiAgICAgICAic2lkIjogIjB4MDAwMEZDMDEiLApAQCAtMzMsOSArMzEsOSBAQAogICAgICAgIm1pbm9yX3BvbGljeSI6ICJSRUxBWEVEIgogICAgIH0sCiAgICAgewotICAgICAgIm5hbWUiOiAiVEVTVF9JTlRSX1NJRCIsCisgICAgICAibmFtZSI6ICJEUklWRVJfVEVTVF9TSUQiLAogICAgICAgInNpZCI6ICIweDAwMDBGQzA0IiwKLSAgICAgICJzaWduYWwiOiAiVEVTVF9JTlRSX1NJRyIsCisgICAgICAic2lnbmFsIjogIkRSSVZFUl9URVNUX1NJRyIsCiAgICAgICAibm9uX3NlY3VyZV9jbGllbnRzIjogdHJ1ZSwKICAgICAgICJtaW5vcl92ZXJzaW9uIjogMSwKICAgICAgICJtaW5vcl9wb2xpY3kiOiAiUkVMQVhFRCIKQEAgLTY5LDEzICs2Nyw5IEBACiAgIF0sCiAgICJpcnFzIjogWwogICAgIHsKKyAgICAgICAiZGVzY3JpcHRpb24iOiAiVXNpbmcgVUFSVCBUWCBpbnRlcnJ1cHQgdG8gdGVzdCBwc2Ffd2FpdCBhbmQgcHNhX2VvaSBmb3IgaXJxX3NpZ25hbCIsCiAgICAgICAgInNpZ25hbCI6ICJEUklWRVJfVUFSVF9JTlRSX1NJRyIsCi0gICAgICAgImxpbmVfbnVtIjogMTcKKyAgICAgICAibGluZV9udW0iOiA0NgogICAgIH0KLSAgXSwKLSAgImxpbmtlcl9wYXR0ZXJuIjogewotICAgICJvYmplY3RfbGlzdCI6IFsKLSAgICAiZHJpdmVyX3BhcnRpdGlvbi5hIgotICAgIF0KLSAgfQorICBdCiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbWFuaWZlc3RzL2lwYy9jbGllbnRfcGFydGl0aW9uX3BzYS5qc29uIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL21hbmlmZXN0cy9pcGMvY2xpZW50X3BhcnRpdGlvbl9wc2EuanNvbgppbmRleCAwODFkYzk1Li5iOTMzNzdiIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbWFuaWZlc3RzL2lwYy9jbGllbnRfcGFydGl0aW9uX3BzYS5qc29uCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9tYW5pZmVzdHMvaXBjL2NsaWVudF9wYXJ0aXRpb25fcHNhLmpzb24KQEAgLTMsMTEgKzMsOSBAQAogICAibmFtZSI6ICJDTElFTlRfUEFSVElUSU9OIiwKICAgInR5cGUiOiAiQVBQTElDQVRJT04tUk9UIiwKICAgInByaW9yaXR5IjogIk5PUk1BTCIsCi0gICJpZCI6ICIweDAwMDAwMDAxIiwKICAgImRlc2NyaXB0aW9uIjogIkNsaWVudCBwYXJ0aXRpb24gZXhlY3V0aW5nIGNsaWVudCB0ZXN0IGZ1bmMgZnJvbSBTUEUiLAogICAiZW50cnlfcG9pbnQiOiAiY2xpZW50X21haW4iLAogICAic3RhY2tfc2l6ZSI6ICIweDQwMCIsCi0gICJoZWFwX3NpemUiOiAiMHgxMDAiLAogICAic2VydmljZXMiOiBbewogICAgICAgIm5hbWUiOiAiQ0xJRU5UX1RFU1RfRElTUEFUQ0hFUl9TSUQiLAogICAgICAgInNpZCI6ICIweDAwMDBGQTAxIiwKQEAgLTIwLDcgKzE4LDcgQEAKICAgImRlcGVuZGVuY2llcyI6IFsKICAgICAiRFJJVkVSX1VBUlRfU0lEIiwKICAgICAiRFJJVkVSX05WTUVNX1NJRCIsCi0gICAgIlRFU1RfSU5UUl9TSUQiLAorICAgICJEUklWRVJfVEVTVF9TSUQiLAogICAgICJTRVJWRVJfVEVTVF9ESVNQQVRDSEVSX1NJRCIsCiAgICAgIlNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lEIiwKICAgICAiU0VSVkVSX1NUUklDVF9NSU5PUl9WRVJTSU9OX1NJRCIsCkBAIC0zNSwxMCArMzMsNSBAQAogICAgICAgInNpemUiOiAiMHgyMCIsCiAgICAgICAicGVybWlzc2lvbiI6ICJSRUFELVdSSVRFIgogICAgIH0KLSAgIF0sCi0gICJsaW5rZXJfcGF0dGVybiI6IHsKLSAgICAib2JqZWN0X2xpc3QiOiBbCi0gICAgImNsaWVudF9wYXJ0aXRpb24uYSIKLSAgICBdCi0gIH0KKyAgIF0KIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9tYW5pZmVzdHMvaXBjL3NlcnZlcl9wYXJ0aXRpb25fcHNhLmpzb24gYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbWFuaWZlc3RzL2lwYy9zZXJ2ZXJfcGFydGl0aW9uX3BzYS5qc29uCmluZGV4IDM1NDEzODcuLjE0NmI4ZmIgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9tYW5pZmVzdHMvaXBjL3NlcnZlcl9wYXJ0aXRpb25fcHNhLmpzb24KKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL21hbmlmZXN0cy9pcGMvc2VydmVyX3BhcnRpdGlvbl9wc2EuanNvbgpAQCAtMyw3ICszLDYgQEAKICAgIm5hbWUiOiAiU0VSVkVSX1BBUlRJVElPTiIsCiAgICJ0eXBlIjogIkFQUExJQ0FUSU9OLVJPVCIsCiAgICJwcmlvcml0eSI6ICJOT1JNQUwiLAotICAiaWQiOiAiMHgwMDAwMDAwMiIsCiAgICJkZXNjcmlwdGlvbiI6ICJTZXJ2ZXIgcGFydGl0aW9uIGV4ZWN1dGluZyBzZXJ2ZXIgdGVzdCBmdW5jIiwKICAgImVudHJ5X3BvaW50IjogInNlcnZlcl9tYWluIiwKICAgInN0YWNrX3NpemUiOiAiMHg0MDAiLApAQCAtNjYsMTAgKzY1LDUgQEAKICAgImRlcGVuZGVuY2llcyI6IFsKICAgICAiRFJJVkVSX1VBUlRfU0lEIiwKICAgICAiRFJJVkVSX05WTUVNX1NJRCIKLSAgXSwKLSAgImxpbmtlcl9wYXR0ZXJuIjogewotICAgICJvYmplY3RfbGlzdCI6IFsKLSAgICAic2VydmVyX3BhcnRpdGlvbi5hIgotICAgIF0KLSAgfQorICBdCiB9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9jb21tb24vcGFsX2NvbmZpZy5oIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvY29tbW9uL3BhbF9jb25maWcuaAppbmRleCBkYWEwZWM1Li5lM2Y3MGFkIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9jb21tb24vcGFsX2NvbmZpZy5oCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL2NvbW1vbi9wYWxfY29uZmlnLmgKQEAgLTUwLDcgKzUwLDcgQEAKICNlbmRpZgogCiAjaWYgIWRlZmluZWQoVkVSQk9TRSkKLSNkZWZpbmUgVkVSQk9TRSA0IC8qIFByaW50IHZlcmJvc2l0eSA9IEVSUk9SICovCisjZGVmaW5lIFZFUkJPU0UgMyAvKiBQcmludCB2ZXJib3NpdHkgPSBURVNUICovCiAjZW5kaWYKIAogI2lmICghZGVmaW5lZChWQUxfTlNQRV9CVUlMRCkgJiYgIWRlZmluZWQoU1BFX0JVSUxEKSkKQEAgLTYyLDcgKzYyLDE1IEBACiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKFRFU1RfQ09NQklORV9BUkNISVZFKQotLy8jZGVmaW5lIFRFU1RfQ09NQklORV9BUkNISVZFIC8qIFRlc3QgZGlzcGF0Y2hlciBjb2RlIHNlbGVjdGlvbiAqLworI2RlZmluZSBURVNUX0NPTUJJTkVfQVJDSElWRSAwIC8qIENvbWJpbmUgdGVzdCBhcmNoaXZlIG9yIGJpbmFyeT8gKi8KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoV0FUQ0hET0dfQVZBSUxBQkxFKQorI2RlZmluZSBXQVRDSERPR19BVkFJTEFCTEUgMCAvKiBJZiB6ZXJvLCBza2lwIHdhdGNoZG9nIHByb2dyYW1taW5nICovCisjZW5kaWYKKworI2lmICFkZWZpbmVkKFNQX0hFQVBfTUVNX1NVUFApCisjZGVmaW5lIFNQX0hFQVBfTUVNX1NVUFAgMCAvKiBBcmUgRHluYW1pYyBmdW5jcyBhdmFpbGFibGUgdG8gc2VjdXJlIHBhcnRpdGlvbj8gKi8KICNlbmRpZgogCiAvKgpAQCAtNzksNiArODcsMTMgQEAKICAqIG9mIHRoaXMgZmlsZS4KICovCiAjaW5jbHVkZSAicHNhX21hbmlmZXN0L3NpZC5oIgorCisvKgorICogcHNhX21hbmlmZXN0L3BpZC5oOiBTZWN1cmUgUGFydGl0aW9uIElEcworICogTWFjcm8gZGVmaW5pdGlvbnMgdGhhdCBtYXAgZnJvbSBTZWN1cmUgUGFydGl0aW9uIG5hbWVzIHRvIFNlY3VyZSBQYXJ0aXRpb24gSURzLgorICogUGFydGl0aW9uIG1hbmlmZXN0IHBhcnNlIGJ1aWxkIHRvb2wgbXVzdCBwcm92aWRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZpbGUuCisqLworI2luY2x1ZGUgInBzYV9tYW5pZmVzdC9waWQuaCIKICNlbmRpZgogCiAjaWYgUFNBX0NSWVBUT19JTVBMRU1FTlRFRApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvY29tbW9uL3BhbF9kcml2ZXJfaXBjX2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL2NvbW1vbi9wYWxfZHJpdmVyX2lwY19pbnRmLmMKaW5kZXggMzJhZWY5Yy4uZjhmNzczZiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvY29tbW9uL3BhbF9kcml2ZXJfaXBjX2ludGYuYworKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9jb21tb24vcGFsX2RyaXZlcl9pcGNfaW50Zi5jCkBAIC01Niw3ICs1Niw3IEBACiAgICAgQHJldHVybiAgIC0gU1VDQ0VTUy9GQUlMVVJFCiAqKi8KIAotaW50IHBhbF9wcmludF9ucyhjaGFyICpzdHIsIHVpbnQzMl90IGRhdGEpCitpbnQgcGFsX3ByaW50X25zKGNoYXIgKnN0ciwgaW50MzJfdCBkYXRhKQogewogICAgIGludCAgICAgICAgICAgICBzdHJpbmdfbGVuID0gMDsKICAgICBjaGFyICAgICAgICAgICAgKnAgPSBzdHI7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9jb21tb24vcGFsX2RyaXZlcl9uc19pbnRmLmMgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9jb21tb24vcGFsX2RyaXZlcl9uc19pbnRmLmMKaW5kZXggNTk4NWYwMC4uMzM4ZGY2YyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvY29tbW9uL3BhbF9kcml2ZXJfbnNfaW50Zi5jCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL2NvbW1vbi9wYWxfZHJpdmVyX25zX2ludGYuYwpAQCAtMzgsNyArMzgsNyBAQAogICAgIEByZXR1cm4gICAtIFNVQ0NFU1MvRkFJTFVSRQogKiovCiAKLWludCBwYWxfcHJpbnRfbnMoY2hhciAqc3RyLCB1aW50MzJfdCBkYXRhKQoraW50IHBhbF9wcmludF9ucyhjaGFyICpzdHIsIGludDMyX3QgZGF0YSkKIHsKICAgICBwYWxfdWFydF9wbDAxMV9wcmludChzdHIsIGRhdGEpOwogICAgIHJldHVybiBQQUxfU1RBVFVTX1NVQ0NFU1M7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9jcnlwdG8vcGFsX2NyeXB0b19jb25maWcuaCBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL2NyeXB0by9wYWxfY3J5cHRvX2NvbmZpZy5oCmluZGV4IDZkNzFkMmUuLmFiMTFmZDEgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL2NyeXB0by9wYWxfY3J5cHRvX2NvbmZpZy5oCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL2NyeXB0by9wYWxfY3J5cHRvX2NvbmZpZy5oCkBAIC03OCwxMCArNzgsMTAgQEAKICAqCiAgKiBDb21tZW50IG1hY3JvcyB0byBkaXNhYmxlIHRoZSB0eXBlcwogICovCi0jZGVmaW5lIEFSQ0hfVEVTVF9ERVMKLSNkZWZpbmUgQVJDSF9URVNUX0RFU18xS0VZCi0jZGVmaW5lIEFSQ0hfVEVTVF9ERVNfMktFWQotI2RlZmluZSBBUkNIX1RFU1RfREVTXzNLRVkKKy8vI2RlZmluZSBBUkNIX1RFU1RfREVTCisvLyNkZWZpbmUgQVJDSF9URVNUX0RFU18xS0VZCisvLyNkZWZpbmUgQVJDSF9URVNUX0RFU18yS0VZCisvLyNkZWZpbmUgQVJDSF9URVNUX0RFU18zS0VZCiAKIC8qKgogICogXGRlZiAgQVJDSF9URVNUX1JBVwpAQCAtMTA0LDcgKzEwNCw3IEBACiAgKgogICogRW5hYmxlIHRoZSBBUkM0IGtleSB0eXBlLgogICovCi0jZGVmaW5lIEFSQ0hfVEVTVF9BUkM0CisvLyNkZWZpbmUgQVJDSF9URVNUX0FSQzQKIAogLyoqCiAgKiBcZGVmIEFSQ0hfVEVTVF9DSVBFUl9NT0RFX0NUUgpAQCAtMjI3LDIxICsyMjcsMjEgQEAKICAqCiAgKiBDb21tZW50IG1hY3JvcyB0byBkaXNhYmxlIHRoZSB0eXBlcwogICovCi0jZGVmaW5lIEFSQ0hfVEVTVF9NRDIKLSNkZWZpbmUgQVJDSF9URVNUX01ENAotI2RlZmluZSBBUkNIX1RFU1RfTUQ1Ci0jZGVmaW5lIEFSQ0hfVEVTVF9SSVBFTUQxNjAKKy8vI2RlZmluZSBBUkNIX1RFU1RfTUQyCisvLyNkZWZpbmUgQVJDSF9URVNUX01ENAorLy8jZGVmaW5lIEFSQ0hfVEVTVF9NRDUKKy8vI2RlZmluZSBBUkNIX1RFU1RfUklQRU1EMTYwCiAjZGVmaW5lIEFSQ0hfVEVTVF9TSEExCiAjZGVmaW5lIEFSQ0hfVEVTVF9TSEEyMjQKICNkZWZpbmUgQVJDSF9URVNUX1NIQTI1NgogI2RlZmluZSBBUkNIX1RFU1RfU0hBMzg0CiAjZGVmaW5lIEFSQ0hfVEVTVF9TSEE1MTIKLSNkZWZpbmUgQVJDSF9URVNUX1NIQTUxMl8yMjQKLSNkZWZpbmUgQVJDSF9URVNUX1NIQTUxMl8yNTYKLSNkZWZpbmUgQVJDSF9URVNUX1NIQTNfMjI0Ci0jZGVmaW5lIEFSQ0hfVEVTVF9TSEEzXzI1NgotI2RlZmluZSBBUkNIX1RFU1RfU0hBM18zODQKLSNkZWZpbmUgQVJDSF9URVNUX1NIQTNfNTEyCisvLyNkZWZpbmUgQVJDSF9URVNUX1NIQTUxMl8yMjQKKy8vI2RlZmluZSBBUkNIX1RFU1RfU0hBNTEyXzI1NgorLy8jZGVmaW5lIEFSQ0hfVEVTVF9TSEEzXzIyNAorLy8jZGVmaW5lIEFSQ0hfVEVTVF9TSEEzXzI1NgorLy8jZGVmaW5lIEFSQ0hfVEVTVF9TSEEzXzM4NAorLy8jZGVmaW5lIEFSQ0hfVEVTVF9TSEEzXzUxMgogCiAvKioKICAqIFxkZWYgQVJDSF9URVNUX0hLREYKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL2NyeXB0by9wYWxfY3J5cHRvX2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL2NyeXB0by9wYWxfY3J5cHRvX2ludGYuYwppbmRleCBhZDgzOGY5Li4zZGY2YWE4IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9jcnlwdG8vcGFsX2NyeXB0b19pbnRmLmMKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvY3J5cHRvL3BhbF9jcnlwdG9faW50Zi5jCkBAIC0zNiw3ICszNiw3IEBACiAgICAgdWludDMyX3QgICAgICAgICAgICAgICAgc3RhdHVzOwogICAgIGNvbnN0IHZvaWQgICAgICAgICAgICAgICpleHRyYTsKICAgICBzaXplX3QgICAgICAgICAgICAgICAgICBleHRyYV9zaXplLCBjYXBhY2l0eSwgKmdlbl9jYXAsIG5vbmNlX2xlbmd0aCwgYWRkaXRpb25hbF9kYXRhX2xlbmd0aDsKLSAgICBwc2Ffa2V5X2hhbmRsZV90ICAgICAgICBoYW5kbGUsICprZXlfaGFuZGxlOworICAgIHBzYV9rZXlfaGFuZGxlX3QgICAgICAgIGhhbmRsZSwgKmtleV9oYW5kbGUsIHRhcmdldF9oYW5kbGU7CiAgICAgcHNhX2tleV90eXBlX3QgICAgICAgICAga2V5X3R5cGUsICprZXlfdHlwZV9vdXQ7CiAgICAgcHNhX2tleV9wb2xpY3lfdCAgICAgICAgKnBvbGljeTsKICAgICBwc2Ffa2V5X3VzYWdlX3QgICAgICAgICB1c2FnZSwgKnVzYWdlX291dDsKQEAgLTMyNSw2ICszMjUsMTEgQEAKICAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWToKICAgICAgICAgICAgIGtleV9oYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCAqKXZhX2FyZyh2YWxpc3QsIGludCopOwogICAgICAgICAgICAgcmV0dXJuIHBzYV9hbGxvY2F0ZV9rZXkoa2V5X2hhbmRsZSk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19DT1BZX0tFWToKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICB0YXJnZXRfaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIHBvbGljeSA9IHZhX2FyZyh2YWxpc3QsIHBzYV9rZXlfcG9saWN5X3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfY29weV9rZXkoaGFuZGxlLCB0YXJnZXRfaGFuZGxlLCBwb2xpY3kpOwogICAgICAgICBjYXNlIFBBTF9DUllQVE9fRlJFRToKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBQQUxfS0VZX1NMT1RfQ09VTlQ7IGkrKykKICAgICAgICAgICAgICAgICBwc2FfZGVzdHJveV9rZXkoaSk7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9jcnlwdG8vcGFsX2NyeXB0b19pbnRmLmggYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9jcnlwdG8vcGFsX2NyeXB0b19pbnRmLmgKaW5kZXggZGZhYmVlMS4uZDFkYWJmYSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvY3J5cHRvL3BhbF9jcnlwdG9faW50Zi5oCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL2NyeXB0by9wYWxfY3J5cHRvX2ludGYuaApAQCAtNjgsNiArNjgsNyBAQAogICAgIFBBTF9DUllQVE9fQVNZTU1URVJJQ19WRVJJRlkgICAgICAgID0gMHgzMSwKICAgICBQQUxfQ1JZUFRPX0tFWV9BR1JFRU1FTlQgICAgICAgICAgICA9IDB4MzIsCiAgICAgUEFMX0NSWVBUT19BTExPQ0FURV9LRVkgICAgICAgICAgICAgPSAweDMzLAorICAgIFBBTF9DUllQVE9fQ09QWV9LRVkgICAgICAgICAgICAgICAgID0gMHgzNCwKICAgICBQQUxfQ1JZUFRPX0ZSRUUgICAgICAgICAgICAgICAgICAgICA9IDB4RkUsCiB9OwogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9jcnlwdG8uYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2NyeXB0by5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMmJkYmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9jcnlwdG8uYwpAQCAtMCwwICsxLDM0NiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInBhbF9hdHRlc3RhdGlvbl9jcnlwdG8uaCIKKworc3RhdGljIHVpbnQzMl90ICBwdWJsaWNfa2V5X3JlZ2lzdGVyZWQgPSAwOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyB1c2VmdWxfYnVmX2hlYWQoc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFtb3VudCkKK3sKKyAgICByZXR1cm4gVXNlZnVsQnVmX0hlYWQoYnVmLCBhbW91bnQpOworfQorCitzdGF0aWMgdWludDMyX3QgY2hlY2tfaGFzaF9zaXplcyh2b2lkKQoreworICAgIGlmIChUX0NPU0VfQ1JZUFRPX1NIQTI1Nl9TSVpFICE9IFBTQV9IQVNIX1NJWkUoUFNBX0FMR19TSEFfMjU2KSkKKyAgICB7CisgICAgICAgIHJldHVybiBQQUxfQVRURVNUX0hBU0hfRkFJTDsKKyAgICB9CisKKyAgICByZXR1cm4gUEFMX0FUVEVTVF9TVUNDRVNTOworfQorCitzdGF0aWMgcHNhX2VjY19jdXJ2ZV90IGF0dGVzdF9tYXBfZWxsaXB0aWNfY3VydmVfdHlwZShpbnQzMl90IGNvc2VfY3VydmUpCit7CisgICAgcHNhX2VjY19jdXJ2ZV90IHBzYV9jdXJ2ZTsKKworICAgIC8qRml4TWU6IE1hcHBpbmcgaXMgbm90IGNvbXBsZXRlLCBtaXNzaW5nIG9uZXM6IFAzODQsIFA1MjEsIEVEMjU1MTksIEVENDQ4ICovCisgICAgc3dpdGNoIChjb3NlX2N1cnZlKQorICAgIHsKKyAgICBjYXNlIFBfMjU2OgorICAgICAgICBwc2FfY3VydmUgPSBQU0FfRUNDX0NVUlZFX1NFQ1AyNTZSMTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcHNhX2N1cnZlID0gVVNIUlRfTUFYOworICAgIH0KKworICAgIHJldHVybiBwc2FfY3VydmU7Cit9CisKK3N0YXRpYyBwc2FfYWxnb3JpdGhtX3QgY29zZV9oYXNoX2FsZ19pZF90b19wc2EoaW50MzJfdCBjb3NlX2hhc2hfYWxnX2lkKQoreworICAgIHBzYV9hbGdvcml0aG1fdCBzdGF0dXM7CisKKyAgICBzd2l0Y2ggKGNvc2VfaGFzaF9hbGdfaWQpCisgICAgeworICAgIGNhc2UgQ09TRV9BTEdfU0hBMjU2X1BST1BSSUVUQVJZOgorICAgICAgICBzdGF0dXMgPSBQU0FfQUxHX1NIQV8yNTY7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN0YXR1cyA9IFBTQV9BTEdfTUQ0OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50MzJfdCBoYXNoX2FsZ19pZF9mcm9tX3NpZ19hbGdfaWQoaW50MzJfdCBjb3NlX3NpZ19hbGdfaWQpCit7CisgICAgc3dpdGNoIChjb3NlX3NpZ19hbGdfaWQpCisgICAgeworICAgICAgICBjYXNlIENPU0VfQUxHT1JJVEhNX0VTMjU2OgorICAgICAgICAgICAgcmV0dXJuIENPU0VfQUxHX1NIQTI1Nl9QUk9QUklFVEFSWTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBJTlQzMl9NQVg7CisgICAgfQorfQorCitpbnQzMl90IHBhbF9jb3NlX2NyeXB0b19oYXNoX3N0YXJ0KHN0cnVjdCBwYWxfY29zZV9jcnlwdG9faGFzaCAqaGFzaF9jdHgsIGludDMyX3QgY29zZV9oYXNoX2FsZ19pZCkKK3sKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgICBjb3NlX3JldCA9IFBBTF9BVFRFU1RfU1VDQ0VTUzsKKyAgICBwc2Ffc3RhdHVzX3QgICAgICAgICAgICAgICAgICAgICBwc2FfcmV0OworICAgIHN0cnVjdCBwYWxfY29zZV9wc2FfY3J5cHRvX2hhc2ggKnBzYV9oYXNoX2N0eDsKKworICAgIGNvc2VfcmV0ID0gY2hlY2tfaGFzaF9zaXplcygpOworICAgIGlmIChjb3NlX3JldCkKKyAgICB7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgaWYgKHNpemVvZihzdHJ1Y3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2gpIDwgc2l6ZW9mKHN0cnVjdCBwYWxfY29zZV9wc2FfY3J5cHRvX2hhc2gpKQorICAgIHsKKyAgICAgICAgY29zZV9yZXQgPSBQQUxfQVRURVNUX0hBU0hfRkFJTDsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBwc2FfaGFzaF9jdHggPSAoc3RydWN0IHBhbF9jb3NlX3BzYV9jcnlwdG9faGFzaCAqKWhhc2hfY3R4OworICAgIHBzYV9yZXQgPSBwc2FfaGFzaF9zZXR1cCgmcHNhX2hhc2hfY3R4LT5vcGVyYXRpb24sIGNvc2VfaGFzaF9hbGdfaWRfdG9fcHNhKGNvc2VfaGFzaF9hbGdfaWQpKTsKKworICAgIGlmIChwc2FfcmV0ID09IFBBTF9BVFRFU1RfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIHBzYV9oYXNoX2N0eC0+c3RhdHVzID0gUEFMX0FUVEVTVF9TVUNDRVNTOworICAgICAgICBjb3NlX3JldCA9IFBBTF9BVFRFU1RfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZSBpZiAocHNhX3JldCA9PSBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCkKKyAgICB7CisgICAgICAgIGNvc2VfcmV0ID0gUEFMX0FUVEVTVF9IQVNIX1VOU1VQUE9SVEVEOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb3NlX3JldCA9IFBBTF9BVFRFU1RfSEFTSF9GQUlMOworICAgIH0KKworZXJyb3I6CisgICAgcmV0dXJuIGNvc2VfcmV0OworfQorCit2b2lkIHBhbF9jb3NlX2NyeXB0b19oYXNoX3VwZGF0ZShzdHJ1Y3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2ggKmhhc2hfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGRhdGFfdG9faGFzaCkKK3sKKyAgICBzdHJ1Y3QgcGFsX2Nvc2VfcHNhX2NyeXB0b19oYXNoICpwc2FfaGFzaF9jdHg7CisKKyAgICBpZiAoc2l6ZW9mKHN0cnVjdCBwYWxfY29zZV9jcnlwdG9faGFzaCkgPCBzaXplb2Yoc3RydWN0IHBhbF9jb3NlX3BzYV9jcnlwdG9faGFzaCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcHNhX2hhc2hfY3R4ID0gKHN0cnVjdCBwYWxfY29zZV9wc2FfY3J5cHRvX2hhc2ggKiloYXNoX2N0eDsKKworICAgIGlmIChwc2FfaGFzaF9jdHgtPnN0YXR1cyA9PSBQQUxfQVRURVNUX1NVQ0NFU1MpCisgICAgeworICAgICAgICBpZiAoZGF0YV90b19oYXNoLnB0ciAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBwc2FfaGFzaF9jdHgtPnN0YXR1cyA9IHBzYV9oYXNoX3VwZGF0ZSgmcHNhX2hhc2hfY3R4LT5vcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3RvX2hhc2gucHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90b19oYXNoLmxlbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBJbnRlbnRpb25hbGx5IGRvIG5vdGhpbmcsIGp1c3QgY29tcHV0aW5nIHRoZSBzaXplIG9mIHRoZSB0b2tlbiAqLworICAgICAgICB9CisgICAgfQorfQorCitpbnQzMl90IHBhbF9jb3NlX2NyeXB0b19oYXNoX2ZpbmlzaChzdHJ1Y3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2ggKmhhc2hfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1ZiBidWZmZXJfdG9faG9sZF9yZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgKmhhc2hfcmVzdWx0KQoreworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgIGNvc2VfcmV0ID0gUEFMX0FUVEVTVF9TVUNDRVNTOworICAgIHBzYV9zdGF0dXNfdCAgICAgICAgICAgICAgICAgICAgIHBzYV9yZXQ7CisgICAgc3RydWN0IHBhbF9jb3NlX3BzYV9jcnlwdG9faGFzaCAqcHNhX2hhc2hfY3R4OworCisgICAgaWYgKHNpemVvZihzdHJ1Y3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2gpIDwgc2l6ZW9mKHN0cnVjdCBwYWxfY29zZV9wc2FfY3J5cHRvX2hhc2gpKQorICAgIHsKKyAgICAgICAgY29zZV9yZXQgPSBQQUxfQVRURVNUX0hBU0hfRkFJTDsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBwc2FfaGFzaF9jdHggPSAoc3RydWN0IHBhbF9jb3NlX3BzYV9jcnlwdG9faGFzaCAqKWhhc2hfY3R4OworCisgICAgaWYgKHBzYV9oYXNoX2N0eC0+c3RhdHVzID09IFBBTF9BVFRFU1RfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIHBzYV9yZXQgPSBwc2FfaGFzaF9maW5pc2goJnBzYV9oYXNoX2N0eC0+b3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl90b19ob2xkX3Jlc3VsdC5wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX3RvX2hvbGRfcmVzdWx0LmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKGhhc2hfcmVzdWx0LT5sZW4pKTsKKworICAgICAgICBpZiAocHNhX3JldCA9PSBQQUxfQVRURVNUX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGhhc2hfcmVzdWx0LT5wdHIgPSBidWZmZXJfdG9faG9sZF9yZXN1bHQucHRyOworICAgICAgICAgICAgY29zZV9yZXQgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBzYV9yZXQgPT0gUFNBX0VSUk9SX0JVRkZFUl9UT09fU01BTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvc2VfcmV0ID0gUEFMX0FUVEVTVF9IQVNIX0JVRkZFUl9TSVpFOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgY29zZV9yZXQgPSBQQUxfQVRURVNUX0hBU0hfRkFJTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb3NlX3JldCA9IFBBTF9BVFRFU1RfSEFTSF9GQUlMOworICAgIH0KKworZXJyb3I6CisgICAgcmV0dXJuIGNvc2VfcmV0OworfQorCitpbnQgcGFsX2NyZWF0ZV9zaGEyNTYoc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGJ5dGVzX3RvX2hhc2gsIHN0cnVjdCBxX3VzZWZ1bF9idWYgYnVmZmVyX2Zvcl9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyAqaGFzaCkKK3sKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBQQUxfQVRURVNUX1NVQ0NFU1M7CisgICAgc3RydWN0IHBhbF9jb3NlX2NyeXB0b19oYXNoICAgaGFzaF9jdHg7CisKKyAgICBzdGF0dXMgPSBwYWxfY29zZV9jcnlwdG9faGFzaF9zdGFydCgmaGFzaF9jdHgsIENPU0VfQUxHX1NIQTI1Nl9QUk9QUklFVEFSWSk7CisgICAgaWYgKHN0YXR1cykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIHBhbF9jb3NlX2NyeXB0b19oYXNoX3VwZGF0ZSgmaGFzaF9jdHgsIGJ5dGVzX3RvX2hhc2gpOworICAgIHN0YXR1cyA9IHBhbF9jb3NlX2NyeXB0b19oYXNoX2ZpbmlzaCgmaGFzaF9jdHgsIGJ1ZmZlcl9mb3JfaGFzaCwgaGFzaCk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCit1aW50MzJfdCBwYWxfY29tcHV0ZV9oYXNoKGludDMyX3QgY29zZV9hbGdfaWQsIHN0cnVjdCBxX3VzZWZ1bF9idWYgYnVmZmVyX2Zvcl9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgKmhhc2gsIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBwcm90ZWN0ZWRfaGVhZGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHBheWxvYWQpCit7CisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgIHN0YXR1czsKKyAgICBRQ0JPUkVuY29kZUNvbnRleHQgICAgICAgICAgY2Jvcl9lbmNvZGVfY3R4OworICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyAgICAgICB0YnNfZmlyc3RfcGFydDsKKyAgICBRQ0JPUkVycm9yICAgICAgICAgICAgICAgICAgcWNib3JfcmVzdWx0OworICAgIHN0cnVjdCBwYWxfY29zZV9jcnlwdG9faGFzaCBoYXNoX2N0eCA9IHt7MH19OworICAgIGludDMyX3QgICAgICAgICAgICAgICAgICAgICBoYXNoX2FsZ19pZDsKKyAgICBVc2VmdWxCdWZfTUFLRV9TVEFDS19VQiAgICAoYnVmZmVyX2Zvcl9UQlNfZmlyc3RfcGFydCwgVF9DT1NFX1NJWkVfT0ZfVEJTKTsKKworICAgIC8qIFRoaXMgYnVpbGRzIHRoZSBDQk9SLWZvcm1hdCB0by1iZS1zaWduZWQgYnl0ZXMgKi8KKyAgICBRQ0JPUkVuY29kZV9Jbml0KCZjYm9yX2VuY29kZV9jdHgsIGJ1ZmZlcl9mb3JfVEJTX2ZpcnN0X3BhcnQpOworICAgIFFDQk9SRW5jb2RlX09wZW5BcnJheSgmY2Jvcl9lbmNvZGVfY3R4KTsKKyAgICAvKiBjb250ZXh0ICovCisgICAgUUNCT1JFbmNvZGVfQWRkU1pTdHJpbmcoJmNib3JfZW5jb2RlX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1NFX1NJR19DT05URVhUX1NUUklOR19TSUdOQVRVUkUxKTsKKyAgICAvKiBib2R5X3Byb3RlY3RlZCAqLworICAgIFFDQk9SRW5jb2RlX0FkZEJ5dGVzKCZjYm9yX2VuY29kZV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkX2hlYWRlcnMpOworICAgIC8qIHNpZ25fcHJvdGVjdGVkICovCisgICAgUUNCT1JFbmNvZGVfQWRkQnl0ZXMoJmNib3JfZW5jb2RlX2N0eCwgTlVMTF9VU0VGVUxfQlVGX0MpOworICAgIC8qIGV4dGVybmFsX2FhZCAqLworICAgIFFDQk9SRW5jb2RlX0FkZEJ5dGVzKCZjYm9yX2VuY29kZV9jdHgsIE5VTExfVVNFRlVMX0JVRl9DKTsKKyAgICAvKiBmYWtlIHBheWxvYWQgKi8KKyAgICBRQ0JPUkVuY29kZV9BZGRCeXRlcygmY2Jvcl9lbmNvZGVfY3R4LCBOVUxMX1VTRUZVTF9CVUZfQyk7CisgICAgUUNCT1JFbmNvZGVfQ2xvc2VBcnJheSgmY2Jvcl9lbmNvZGVfY3R4KTsKKworICAgIC8qIEdldCB0aGUgcmVzdWx0IGFuZCBjb252ZXJ0IGl0IHRvIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyByZXByZXNlbnRhdGlvbiAqLworICAgIHFjYm9yX3Jlc3VsdCA9IFFDQk9SRW5jb2RlX0ZpbmlzaCgmY2Jvcl9lbmNvZGVfY3R4LCAmdGJzX2ZpcnN0X3BhcnQpOworICAgIGlmIChxY2Jvcl9yZXN1bHQpCisgICAgeworICAgICAgICAvKiBNYWlubHkgbWVhbnMgdGhhdCB0aGUgcHJvdGVjdGVkX2hlYWRlcnMgd2VyZSB0b28gYmlnCisgICAgICAgICAod2hpY2ggc2hvdWxkIG5ldmVyIGhhcHBlbikgKi8KKyAgICAgICAgc3RhdHVzID0gUEFMX0FUVEVTVF9FUlJfU0lHTl9TVFJVQ1Q7CisgICAgICAgIGdvdG8gRG9uZTsKKyAgICB9CisKKyAgICAvKiBTdGFydCB0aGUgaGFzaGluZyAqLworICAgIGhhc2hfYWxnX2lkID0gaGFzaF9hbGdfaWRfZnJvbV9zaWdfYWxnX2lkKGNvc2VfYWxnX2lkKTsKKworICAgIC8qIERvbid0IGNoZWNrIGhhc2hfYWxnX2lkIGZvciBmYWlsdXJlLiBwYWxfY29zZV9jcnlwdG9faGFzaF9zdGFydCgpCisgICAgICogd2lsbCBoYW5kbGUgaXQgcHJvcGVybHkKKyAgICAgKi8KKyAgICBzdGF0dXMgPSBwYWxfY29zZV9jcnlwdG9faGFzaF9zdGFydCgmaGFzaF9jdHgsIGhhc2hfYWxnX2lkKTsKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICBnb3RvIERvbmU7CisKKyAgICAvKiBIYXNoIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBUQlMuIFRha2UgYWxsIGJ1dCB0aGUgbGFzdCB0d28KKyAgICAgKiBieXRlcy4gVGhlIGxhc3QgdHdvIGJ5dGVzIGFyZSB0aGUgZmFrZSBwYXlsb2FkIGZyb20gYWJvdmUuIEl0CisgICAgICogaXMgcmVwbGFjZWQgYnkgdGhlIHJlYWwgcGF5bG9hZCB3aGljaCBpcyBoYXNoZWQgbmV4dC4gVGhlIGZha2UKKyAgICAgKiBwYXlsb2FkIGlzIG5lZWRlZCBzbyB0aGUgYXJyYXkgY291bnQgaXMgcmlnaHQuIFRoaXMgaXMgb25lIG9mCisgICAgICogdGhlIG1haW4gdGhpbmdzIHRoYXQgbWFrZSBpdCBwb3NzaWJsZSB0byBpbXBsZW1lbnQgd2l0aCBvbmUKKyAgICAgKiBidWZmZXIgZm9yIHRoZSB3aG9sZSBjb3NlIHNpZ24xLgorICAgICAqLworICAgIHBhbF9jb3NlX2NyeXB0b19oYXNoX3VwZGF0ZSgmaGFzaF9jdHgsIHVzZWZ1bF9idWZfaGVhZCh0YnNfZmlyc3RfcGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YnNfZmlyc3RfcGFydC5sZW4gLSAyKSk7CisKKyAgICAvKiBIYXNoIHRoZSBwYXlsb2FkICovCisgICAgcGFsX2Nvc2VfY3J5cHRvX2hhc2hfdXBkYXRlKCZoYXNoX2N0eCwgcGF5bG9hZCk7CisKKyAgICAvKiBGaW5pc2ggdGhlIGhhc2ggYW5kIHNldCB1cCB0byByZXR1cm4gaXQgKi8KKyAgICBzdGF0dXMgPSBwYWxfY29zZV9jcnlwdG9faGFzaF9maW5pc2goJmhhc2hfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX2Zvcl9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCk7CisKK0RvbmU6CisgICAgcmV0dXJuIHN0YXR1czsKK30KKwordWludDMyX3QgcGFsX2ltcG9ydF9hdHRlc3Rfa2V5KGludDMyX3QgYWxnKQoreworICAgIHBzYV9rZXlfdHlwZV90ICAgYXR0ZXN0X2tleV90eXBlOworICAgIHNpemVfdCAgICAgICAgICAgcHVibGljX2tleV9zaXplOworICAgIHBzYV9zdGF0dXNfdCAgICAgc3RhdHVzID0gUFNBX1NVQ0NFU1M7CisgICAgcHNhX2tleV9wb2xpY3lfdCBwb2xpY3k7CisgICAgcHNhX2VjY19jdXJ2ZV90ICBwc2FfY3VydmU7CisgICAgcHNhX2tleV9oYW5kbGVfdCBwdWJsaWNfa2V5X2hhbmRsZTsKKworICAgIC8qIE1hcHBpbmcgb2YgQ09TRSBjdXJ2ZSB0eXBlIHRvIFBTQSBjdXJ2ZSB0eXBlcyAqLworICAgIHBzYV9jdXJ2ZSA9IGF0dGVzdF9tYXBfZWxsaXB0aWNfY3VydmVfdHlwZShQXzI1Nik7CisgICAgaWYgKHBzYV9jdXJ2ZSA9PSBVU0hSVF9NQVgpCisgICAgICAgIHJldHVybiBQQUxfQVRURVNUX0VSUk9SOworCisgICAgLyogU2V0dXAgdGhlIGtleSBwb2xpY3kgZm9yIHB1YmxpYyBrZXkgKi8KKyAgICBwb2xpY3kgPSBwc2Ffa2V5X3BvbGljeV9pbml0KCk7CisgICAgcHNhX2tleV9wb2xpY3lfc2V0X3VzYWdlKCZwb2xpY3ksIFBTQV9LRVlfVVNBR0VfVkVSSUZZLCBhbGcpOworCisgICAgc3RhdHVzID0gcHNhX2FsbG9jYXRlX2tleSgmcHVibGljX2tleV9oYW5kbGUpOworICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICBzdGF0dXMgPSBwc2Ffc2V0X2tleV9wb2xpY3kocHVibGljX2tleV9oYW5kbGUsICZwb2xpY3kpOworICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICBhdHRlc3Rfa2V5X3R5cGUgPSBQU0FfS0VZX1RZUEVfRUNDX1BVQkxJQ19LRVkocHNhX2N1cnZlKTsKKworICAgIC8qIFJlZ2lzdGVyIHB1YmxpYyBrZXkgdG8gY3J5cHRvIHNlcnZpY2UgKi8KKyAgICBwdWJsaWNfa2V5X3NpemUgPSBhdHRlc3Rfa2V5LnB1Ynhfa2V5X3NpemUgKyBhdHRlc3Rfa2V5LnB1Ynlfa2V5X3NpemU7CisKKyAgICBzdGF0dXMgPSBwc2FfaW1wb3J0X2tleShwdWJsaWNfa2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ZXN0X2tleV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdWludDhfdCAqKSZhdHRlc3RfcHVibGljX2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljX2tleV9zaXplICsgMSk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisKK3VpbnQzMl90IHBhbF9jcnlwdG9fcHViX2tleV92ZXJpZnkoaW50MzJfdCBjb3NlX2FsZ29yaXRobV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHRva2VuX2hhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBzaWduYXR1cmUpCit7CisgICAgdWludDMyX3Qgc3RhdHVzID0gUEFMX0FUVEVTVF9TVUNDRVNTOworCisgICAgaWYgKCFwdWJsaWNfa2V5X3JlZ2lzdGVyZWQpCisgICAgeworICAgICAgICBzdGF0dXMgPSBwYWxfaW1wb3J0X2F0dGVzdF9rZXkoY29zZV9hbGdvcml0aG1faWQpOworICAgICAgICBpZiAoc3RhdHVzICE9IFBBTF9BVFRFU1RfU1VDQ0VTUykKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICAgICAgcHVibGljX2tleV9yZWdpc3RlcmVkID0gMTsKKyAgICB9CisKKy8qCisgKiBFbmFibGUgdGhlIHZlcmlmeSBmdW5jdGlvbiB3aGVuIFRydXN0ZWQgRmlybWFyZSAtIE0gU3VwcG9ydHMKKworICogIFZlcmlmeSB0aGUgc2lnbmF0dXJlIGEgaGFzaCBvciBzaG9ydCBtZXNzYWdlIHVzaW5nIGEgcHVibGljIGtleS4KKyAgICBzdGF0dXMgPSBwc2FfYXN5bW1ldHJpY192ZXJpZnkocHVibGljX2tleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3NlX2FsZ29yaXRobV9pZCwgdG9rZW5faGFzaC5wdHIsIHRva2VuX2hhc2gubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlLnB0ciwgc2lnbmF0dXJlLmxlbik7CisqLworICAgIHJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9jcnlwdG8uaCBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2NyeXB0by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNjNhZDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9jcnlwdG8uaApAQCAtMCwwICsxLDEwMiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInBhbF9jb21tb24uaCIKKyNpbmNsdWRlICJwYWxfYXR0ZXN0YXRpb25fZWF0LmgiCisKKyNkZWZpbmUgQVRURVNUX1BVQkxJQ19LRVlfU0xPVCAgICAgICAgICAgIDQKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgdWludDhfdCAgKnB1Ynhfa2V5OworICAgIHVpbnQzMl90ICBwdWJ4X2tleV9zaXplOworICAgIHVpbnQ4X3QgICpwdWJ5X2tleTsKKyAgICB1aW50MzJfdCAgcHVieV9rZXlfc2l6ZTsKK30gZWNjX2tleV90OworCitzdHJ1Y3QgZWNjX3B1YmxpY19rZXlfdCB7CisgICAgY29uc3QgdWludDhfdCBhOworICAgIHVpbnQ4X3QgcHVibGljX2tleVtdOyAvKiBYLWNvb3JkaW5hdGUgfHwgWS1jb29yZGluYXRlICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGVjY19wdWJsaWNfa2V5X3QgYXR0ZXN0X3B1YmxpY19rZXkgPSB7CisgICAgIC8qIENvbnN0YW50IGJ5dGUgKi8KKyAgICAgMHgwNCwKKyAgICAgLyogWC1jb29yZGluYXRlICovCisgICAgIHsweDc5LCAweEVCLCAweEE5LCAweDBFLCAweDhCLCAweEY0LCAweDUwLCAweEE2LAorICAgICAgMHg3NSwgMHgxNSwgMHg3NiwgMHhBRCwgMHg0NSwgMHg5OSwgMHhCMCwgMHg3QSwKKyAgICAgIDB4REYsIDB4OTMsIDB4OEQsIDB4QTMsIDB4QkIsIDB4MEIsIDB4RDEsIDB4N0QsCisgICAgICAweDAwLCAweDM2LCAweEVELCAweDQ5LCAweEEyLCAweEQwLCAweEZDLCAweDNGLAorICAgICAvKiBZLWNvb3JkaW5hdGUgKi8KKyAgICAgIDB4QkYsIDB4Q0QsIDB4RkEsIDB4ODksIDB4NTYsIDB4QjUsIDB4NjgsIDB4QkYsCisgICAgICAweERCLCAweDg2LCAweDczLCAweEU2LCAweDQ4LCAweEQ4LCAweEI1LCAweDhELAorICAgICAgMHg5MiwgMHg5OSwgMHg1NSwgMHhCMSwgMHg0QSwgMHgyNiwgMHhDMywgMHgwOCwKKyAgICAgIDB4MEYsIDB4MzQsIDB4MTEsIDB4N0QsIDB4OTcsIDB4MUQsIDB4NjgsIDB4NjR9LAorfTsKKworc3RydWN0IHBhbF9jb3NlX2NyeXB0b19oYXNoIHsKKyAgICAvKiBDYW4ndCBwdXQgdGhlIGFjdHVhbCBzaXplIGhlcmUgd2l0aG91dCBjcmVhdGluZyBkZXBlbmRlY3kgb24KKyAgICAgKiBhY3R1YWwgaGFzaCBpbXBsZW1lbnRhdGlvbiwgc28gdGhpcyBpcyBhIGZhaXJseSBsYXJnZSBhbmQKKyAgICAgKiBhY2NvbW1vZGF0aW5nIHNpemUuCisgICAgICovCisgICAgdWludDhfdCBieXRlc1sxMjhdOworfTsKKworc3RydWN0IHBhbF9jb3NlX3BzYV9jcnlwdG9faGFzaCB7CisgICAgcHNhX3N0YXR1c190ICAgICAgICAgc3RhdHVzOworICAgIHBzYV9oYXNoX29wZXJhdGlvbl90IG9wZXJhdGlvbjsKK307CisKK3N0YXRpYyBjb25zdCB1aW50OF90IGluaXRpYWxfYXR0ZXN0YXRpb25fcHVibGljX3hfa2V5W10gPQoreworICAgIDB4NzksIDB4RUIsIDB4QTksIDB4MEUsIDB4OEIsIDB4RjQsIDB4NTAsIDB4QTYsCisgICAgMHg3NSwgMHgxNSwgMHg3NiwgMHhBRCwgMHg0NSwgMHg5OSwgMHhCMCwgMHg3QSwKKyAgICAweERGLCAweDkzLCAweDhELCAweEEzLCAweEJCLCAweDBCLCAweEQxLCAweDdELAorICAgIDB4MDAsIDB4MzYsIDB4RUQsIDB4NDksIDB4QTIsIDB4RDAsIDB4RkMsIDB4M0YKK307CisKK3N0YXRpYyBjb25zdCB1aW50OF90IGluaXRpYWxfYXR0ZXN0YXRpb25fcHVibGljX3lfa2V5W10gPQoreworICAgIDB4QkYsIDB4Q0QsIDB4RkEsIDB4ODksIDB4NTYsIDB4QjUsIDB4NjgsIDB4QkYsCisgICAgMHhEQiwgMHg4NiwgMHg3MywgMHhFNiwgMHg0OCwgMHhEOCwgMHhCNSwgMHg4RCwKKyAgICAweDkyLCAweDk5LCAweDU1LCAweEIxLCAweDRBLCAweDI2LCAweEMzLCAweDA4LAorICAgIDB4MEYsIDB4MzQsIDB4MTEsIDB4N0QsIDB4OTcsIDB4MUQsIDB4NjgsIDB4NjQKK307CisKKy8qIEluaXRpYWxpemUgdGhlIHN0cnVjdHVyZSB3aXRoIGdpdmVuIHB1YmxpYyBrZXkgKi8KK3N0YXRpYyBjb25zdCBlY2Nfa2V5X3QgYXR0ZXN0X2tleSA9IHsKKyAgICAgICAgKHVpbnQ4X3QgKilpbml0aWFsX2F0dGVzdGF0aW9uX3B1YmxpY194X2tleSwKKyAgICAgICAgc2l6ZW9mKGluaXRpYWxfYXR0ZXN0YXRpb25fcHVibGljX3hfa2V5KSwKKyAgICAgICAgKHVpbnQ4X3QgKilpbml0aWFsX2F0dGVzdGF0aW9uX3B1YmxpY195X2tleSwKKyAgICAgICAgc2l6ZW9mKGluaXRpYWxfYXR0ZXN0YXRpb25fcHVibGljX3lfa2V5KQorfTsKKworaW50MzJfdCBwYWxfY29zZV9jcnlwdG9faGFzaF9zdGFydChzdHJ1Y3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2ggKmhhc2hfY3R4LCBpbnQzMl90IGNvc2VfaGFzaF9hbGdfaWQpOwordm9pZCBwYWxfY29zZV9jcnlwdG9faGFzaF91cGRhdGUoc3RydWN0IHBhbF9jb3NlX2NyeXB0b19oYXNoICpoYXNoX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBkYXRhX3RvX2hhc2gpOworaW50MzJfdCBwYWxfY29zZV9jcnlwdG9faGFzaF9maW5pc2goc3RydWN0IHBhbF9jb3NlX2NyeXB0b19oYXNoICpoYXNoX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWYgYnVmZmVyX3RvX2hvbGRfcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jICpoYXNoX3Jlc3VsdCk7CitpbnQgcGFsX2NyZWF0ZV9zaGEyNTYoc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGJ5dGVzX3RvX2hhc2gsIHN0cnVjdCBxX3VzZWZ1bF9idWYgYnVmZmVyX2Zvcl9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyAqaGFzaCk7Cit1aW50MzJfdCBwYWxfY29tcHV0ZV9oYXNoKGludDMyX3QgY29zZV9hbGdfaWQsIHN0cnVjdCBxX3VzZWZ1bF9idWYgYnVmZmVyX2Zvcl9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgKmhhc2gsIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBwcm90ZWN0ZWRfaGVhZGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHBheWxvYWQpOwordWludDMyX3QgcGFsX2ltcG9ydF9hdHRlc3Rfa2V5KGludDMyX3QgYWxnKTsKK3VpbnQzMl90IHBhbF9jcnlwdG9fcHViX2tleV92ZXJpZnkoaW50MzJfdCBjb3NlX2FsZ29yaXRobV9pZCwgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHRva2VuX2hhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBzaWduYXR1cmUpOworCisKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2VhdC5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fZWF0LmMKaW5kZXggMjYyZGM1ZC4uMTc4ZmRjOSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fZWF0LmMKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fZWF0LmMKQEAgLTE1LDEwICsxNSw1NiBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KIAotI2luY2x1ZGUgInBhbF9hdHRlc3RhdGlvbl9lYXQuaCIKKyNpbmNsdWRlICJwYWxfYXR0ZXN0YXRpb25fY3J5cHRvLmgiCiAKLXVpbnQzMl90ICBtYW5kYXRvcnlfY2xhaW1zID0gMCwgbWFuZGFyb3R5X3N3X2NvbXBvbmVudHMgPSAwOwotYm9vbF90ICAgIHN3X2NvbXBvbmVudF9wcmVzZW50ID0gMDsKK3VpbnQzMl90ICAgIG1hbmRhdG9yeV9jbGFpbXMgPSAwOwordWludDMyX3QgICAgbWFuZGFyb3R5X3N3X2NvbXBvbmVudHMgPSAwOworYm9vbF90ICAgICAgc3dfY29tcG9uZW50X3ByZXNlbnQgPSAwOworCitzdGF0aWMgaW50IHBhbF9lbmNvZGVfY29zZV9rZXkoc3RydWN0IHFfdXNlZnVsX2J1Zl9jICpjb3NlX2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmIGJ1ZmZlcl9mb3JfY29zZV9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHhfY29yZCwgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHlfY29yZCkKK3sKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZTsKKyAgICBRQ0JPUkVycm9yICAgICAgICAgICAgICAgIHFjYm9yX3Jlc3VsdDsKKyAgICBRQ0JPUkVuY29kZUNvbnRleHQgICAgICAgIGNib3JfZW5jb2RlX2N0eDsKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgICAgIGNvc2VfY3VydmVfaWQgPSBQXzI1NjsKKyAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgICAgICAgZW5jb2RlZF9rZXlfaWQ7CisKKyAgICAvKiBHZXQgdGhlIHB1YmxpYyBrZXkgeCBhbmQgeSAqLworICAgIC8qIEVuY29kZSBpdCBpbnRvIGEgQ09TRV9LZXkgc3RydWN0dXJlICovCisgICAgUUNCT1JFbmNvZGVfSW5pdCgmY2Jvcl9lbmNvZGVfY3R4LCBidWZmZXJfZm9yX2Nvc2Vfa2V5KTsKKyAgICBRQ0JPUkVuY29kZV9PcGVuTWFwKCZjYm9yX2VuY29kZV9jdHgpOworICAgIFFDQk9SRW5jb2RlX0FkZEludDY0VG9NYXBOKCZjYm9yX2VuY29kZV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09TRV9LRVlfQ09NTU9OX0tUWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1NFX0tFWV9UWVBFX0VDMik7CisgICAgUUNCT1JFbmNvZGVfQWRkSW50NjRUb01hcE4oJmNib3JfZW5jb2RlX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1NFX0tFWV9QQVJBTV9DUlYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29zZV9jdXJ2ZV9pZCk7CisgICAgUUNCT1JFbmNvZGVfQWRkQnl0ZXNUb01hcE4oJmNib3JfZW5jb2RlX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1NFX0tFWV9QQVJBTV9YX0NPT1JESU5BVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeF9jb3JkKTsKKyAgICBRQ0JPUkVuY29kZV9BZGRCeXRlc1RvTWFwTigmY2Jvcl9lbmNvZGVfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPU0VfS0VZX1BBUkFNX1lfQ09PUkRJTkFURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5X2NvcmQpOworICAgIFFDQk9SRW5jb2RlX0Nsb3NlTWFwKCZjYm9yX2VuY29kZV9jdHgpOworCisgICAgcWNib3JfcmVzdWx0ID0gUUNCT1JFbmNvZGVfRmluaXNoKCZjYm9yX2VuY29kZV9jdHgsICZlbmNvZGVkX2tleV9pZCk7CisgICAgaWYgKHFjYm9yX3Jlc3VsdCAhPSBRQ0JPUl9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgLyogTWFpbmx5IG1lYW5zIHRoYXQgdGhlIENPU0VfS2V5IHdhcyB0b28gYmlnIGZvciBidWZmZXJfZm9yX2Nvc2Vfa2V5ICovCisgICAgICAgIHJldHVybl92YWx1ZSA9IFBBTF9BVFRFU1RfRVJSX1BST1RFQ1RFRF9IRUFERVJTOworICAgICAgICBnb3RvIERvbmU7CisgICAgfQorCisgICAgLyogRmluaXNoIHVwIGFuZCByZXR1cm4gKi8KKyAgICAqY29zZV9rZXkgPSBlbmNvZGVkX2tleV9pZDsKKyAgICByZXR1cm5fdmFsdWUgPSBQQUxfQVRURVNUX1NVQ0NFU1M7CisKK0RvbmU6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKwogCiBzdGF0aWMgaW50IGdldF9pdGVtc19pbl9tYXAoUUNCT1JEZWNvZGVDb250ZXh0ICpkZWNvZGVfY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRlbXNfdG9fZ2V0X3QgKml0ZW1fbGlzdCkKQEAgLTkwLDcgKzEzNiw3IEBACiB9CiAKIHN0YXRpYyBpbnQgcGFyc2VfdW5wcm90ZWN0ZWRfaGVhZGVycyhRQ0JPUkRlY29kZUNvbnRleHQgKmRlY29kZV9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1c2VmdWxfYnVmX2MgKmNoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyAqY2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbG9vcF9iYWNrKQogewogICAgIHN0cnVjdCBpdGVtc190b19nZXRfdCAgIGl0ZW1fbGlzdFszXTsKQEAgLTEyMCw3ICsxNjYsNyBAQAogICAgIHJldHVybiBQQUxfQVRURVNUX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgcGFyc2VfcHJvdGVjdGVkX2hlYWRlcnMoc3RydWN0IHVzZWZ1bF9idWZfYyBwcm90ZWN0ZWRfaGVhZGVycywKK3N0YXRpYyBpbnQgcGFyc2VfcHJvdGVjdGVkX2hlYWRlcnMoc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHByb3RlY3RlZF9oZWFkZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICphbGdfaWQpCiB7CiAgICAgUUNCT1JEZWNvZGVDb250ZXh0ICBkZWNvZGVfY29udGV4dDsKQEAgLTE1Niw3ICsyMDIsNyBAQAogICAgIEByZXR1cm4gICAtIGVycm9yIHN0YXR1cwogKiovCiBzdGF0aWMgaW50IHBhcnNlX2NsYWltcyhRQ0JPUkRlY29kZUNvbnRleHQgKmRlY29kZV9jb250ZXh0LCBRQ0JPUkl0ZW0gaXRlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVzZWZ1bF9idWZfYyBjb21wbGV0ZWRfY2hhbGxlbmdlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgY29tcGxldGVkX2NoYWxsZW5nZSkKIHsKICAgICBpbnQgaSwgY291bnQgPSAwOwogICAgIGludCBzdGF0dXMgPSBQQUxfQVRURVNUX1NVQ0NFU1M7CkBAIC0yODEsMTYgKzMyNyw0MiBAQAogaW50MzJfdCBwYWxfaW5pdGlhbF9hdHRlc3RfdmVyaWZ5X3Rva2VuKHVpbnQ4X3QgKmNoYWxsZW5nZSwgdWludDMyX3QgY2hhbGxlbmdlX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqdG9rZW4sIHVpbnQzMl90IHRva2VuX3NpemUpCiB7Ci0gICAgaW50ICAgICAgICAgICAgICAgICBzdGF0dXMgPSBQQUxfQVRURVNUX1NVQ0NFU1M7CisgICAgaW50MzJfdCAgICAgICAgICAgICBzdGF0dXMgPSBQQUxfQVRURVNUX1NVQ0NFU1M7CiAgICAgYm9vbCAgICAgICAgICAgICAgICBzaG9ydF9jaXJjdWl0OwogICAgIGludDMyX3QgICAgICAgICAgICAgY29zZV9hbGdvcml0aG1faWQ7CiAgICAgUUNCT1JJdGVtICAgICAgICAgICBpdGVtOwogICAgIFFDQk9SRGVjb2RlQ29udGV4dCAgZGVjb2RlX2NvbnRleHQ7Ci0gICAgc3RydWN0IHVzZWZ1bF9idWZfYyBjb21wbGV0ZWRfY2hhbGxlbmdlOwotICAgIHN0cnVjdCB1c2VmdWxfYnVmX2MgY29tcGxldGVkX3Rva2VuOwotICAgIHN0cnVjdCB1c2VmdWxfYnVmX2MgcGF5bG9hZDsKLSAgICBzdHJ1Y3QgdXNlZnVsX2J1Zl9jIHByb3RlY3RlZF9oZWFkZXJzOwotICAgIHN0cnVjdCB1c2VmdWxfYnVmX2Mga2lkOworICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBjb21wbGV0ZWRfY2hhbGxlbmdlOworICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBjb21wbGV0ZWRfdG9rZW47CisgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHBheWxvYWQ7CisgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHNpZ25hdHVyZTsKKyAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgcHJvdGVjdGVkX2hlYWRlcnM7CisgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGtpZDsKKyAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgeF9jb3JkOworICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyB5X2NvcmQ7CisgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGNvc2Vfa2V5X3RvX2hhc2g7CisgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGtleV9oYXNoOworICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyB0b2tlbl9oYXNoOworICAgIFVTRUZVTF9CVUZfTUFLRV9TVEFDS19VQihidWZfdG9faG9sZF94X2Nvb3JkLCBUX0NPU0VfQ1JZUFRPX0VDX1AyNTZfQ09PUkRfU0laRSk7CisgICAgVVNFRlVMX0JVRl9NQUtFX1NUQUNLX1VCKGJ1Zl90b19ob2xkX3lfY29vcmQsIFRfQ09TRV9DUllQVE9fRUNfUDI1Nl9DT09SRF9TSVpFKTsKKyAgICBVU0VGVUxfQlVGX01BS0VfU1RBQ0tfVUIoYnVmZmVyX2Zvcl9raWQsIFRfQ09TRV9DUllQVE9fU0hBMjU2X1NJWkUpOworICAgIFVTRUZVTF9CVUZfTUFLRV9TVEFDS19VQihidWZmZXJfZm9yX2Nvc2Vfa2V5LCBNQVhfRU5DT0RFRF9DT1NFX0tFWV9TSVpFKTsKKyAgICBVU0VGVUxfQlVGX01BS0VfU1RBQ0tfVUIoYnVmZmVyX2Zvcl9lbmNvZGVkX2tleSwgTUFYX0VOQ09ERURfQ09TRV9LRVlfU0laRSk7CisgICAgVVNFRlVMX0JVRl9NQUtFX1NUQUNLX1VCKGJ1ZmZlcl9mb3JfdG9rZW5faGFzaCwgVF9DT1NFX0NSWVBUT19TSEEyNTZfU0laRSk7CisKKyAgICBraWQucHRyID0gYnVmZmVyX2Zvcl9lbmNvZGVkX2tleS5wdHI7CisKKyAgICBtZW1jcHkoYnVmX3RvX2hvbGRfeF9jb29yZC5wdHIsIChjb25zdCB2b2lkICopYXR0ZXN0X2tleS5wdWJ4X2tleSwgYXR0ZXN0X2tleS5wdWJ4X2tleV9zaXplKTsKKyAgICBtZW1jcHkoYnVmX3RvX2hvbGRfeV9jb29yZC5wdHIsIChjb25zdCB2b2lkICopYXR0ZXN0X2tleS5wdWJ5X2tleSwgYXR0ZXN0X2tleS5wdWJ5X2tleV9zaXplKTsKKworICAgIC8qIFVwZGF0ZSBzaXplICovCisgICAgYnVmX3RvX2hvbGRfeF9jb29yZC5sZW4gPSBhdHRlc3Rfa2V5LnB1Ynhfa2V5X3NpemU7CisgICAgYnVmX3RvX2hvbGRfeV9jb29yZC5sZW4gPSBhdHRlc3Rfa2V5LnB1Ynlfa2V5X3NpemU7CisKKyAgICB4X2NvcmQucHRyID0gYnVmX3RvX2hvbGRfeF9jb29yZC5wdHI7CisgICAgeF9jb3JkLmxlbiA9IGJ1Zl90b19ob2xkX3hfY29vcmQubGVuOworICAgIHlfY29yZC5wdHIgPSBidWZfdG9faG9sZF95X2Nvb3JkLnB0cjsKKyAgICB5X2NvcmQubGVuID0gYnVmX3RvX2hvbGRfeV9jb29yZC5sZW47CiAKICAgICAvKiBDb25zdHJ1Y3QgdGhlIHRva2VuIGJ1ZmZlciBmb3IgdmFsaWRhdGlvbiAqLwogICAgIGNvbXBsZXRlZF90b2tlbi5wdHIgPSB0b2tlbjsKQEAgLTM0NSw2ICs0MTcsMjcgQEAKICAgICBpZiAoc3RhdHVzICE9IFBBTF9BVFRFU1RfU1VDQ0VTUykKICAgICAgICAgcmV0dXJuIHN0YXR1czsKIAorICAgIC8qIEVuY29kZSB0aGUgZ2l2ZW4gcHVibGljIGtleSAqLworICAgIHN0YXR1cyA9IHBhbF9lbmNvZGVfY29zZV9rZXkoJmNvc2Vfa2V5X3RvX2hhc2gsIGJ1ZmZlcl9mb3JfY29zZV9rZXksIHhfY29yZCwgeV9jb3JkKTsKKyAgICBpZiAoc3RhdHVzICE9IFBBTF9BVFRFU1RfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIC8qIENyZWF0ZSBoYXNoIG9mIHRoZSBnaXZlbiBwdWJsaWMga2V5ICovCisgICAgc3RhdHVzID0gcGFsX2NyZWF0ZV9zaGEyNTYoY29zZV9rZXlfdG9faGFzaCwgYnVmZmVyX2Zvcl9raWQsICZrZXlfaGFzaCk7CisgICAgaWYgKHN0YXR1cyAhPSBQU0FfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIC8qIENvbXBhcmUgdGhlIGhhc2ggb2YgdGhlIHB1YmxpYyBrZXkgaW4gdG9rZW4gYW5kIGhhc2ggb2YgdGhlIGdpdmVuIHB1YmxpYyBrZXkgKi8KKyAgICBpZiAoa2lkLmxlbiAhPSBrZXlfaGFzaC5sZW4pCisgICAgeworICAgICAgICByZXR1cm4gUEFMX0FUVEVTVF9IQVNIX0xFTkdUSF9NSVNNQVRDSDsKKyAgICB9CisKKyAgICBpZiAobWVtY21wKGtpZC5wdHIsIGtleV9oYXNoLnB0ciwga2lkLmxlbikgIT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBQQUxfQVRURVNUX0hBU0hfTUlTTUFUQ0g7CisgICAgfQorCiAgICAgLyogR2V0IHRoZSBwYXlsb2FkICovCiAgICAgUUNCT1JEZWNvZGVfR2V0TmV4dCgmZGVjb2RlX2NvbnRleHQsICZpdGVtKTsKICAgICBpZiAoaXRlbS51RGF0YVR5cGUgIT0gUUNCT1JfVFlQRV9CWVRFX1NUUklORykKQEAgLTM1Nyw2ICs0NTAsMTkgQEAKICAgICBpZiAoaXRlbS51RGF0YVR5cGUgIT0gUUNCT1JfVFlQRV9CWVRFX1NUUklORykKICAgICAgICAgcmV0dXJuIFBBTF9BVFRFU1RfVE9LRU5fRVJSX0NCT1JfRk9STUFUVElORzsKIAorICAgIHNpZ25hdHVyZSA9IGl0ZW0udmFsLnN0cmluZzsKKworICAgIC8qIENvbXB1dGUgdGhlIGhhc2ggZnJvbSB0aGUgdG9rZW4gKi8KKyAgICBzdGF0dXMgPSBwYWxfY29tcHV0ZV9oYXNoKGNvc2VfYWxnb3JpdGhtX2lkLCBidWZmZXJfZm9yX3Rva2VuX2hhc2gsICZ0b2tlbl9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkX2hlYWRlcnMsIHBheWxvYWQpOworICAgIGlmIChzdGF0dXMgIT0gUEFMX0FUVEVTVF9TVUNDRVNTKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgLyogVmVyaWZ5IHRoZSBzaWduYXR1cmUgKi8KKyAgICBzdGF0dXMgPSBwYWxfY3J5cHRvX3B1Yl9rZXlfdmVyaWZ5KGNvc2VfYWxnb3JpdGhtX2lkLCB0b2tlbl9oYXNoLCBzaWduYXR1cmUpOworICAgIGlmIChzdGF0dXMgIT0gUEFMX0FUVEVTVF9TVUNDRVNTKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgRGVjb2RlciBhbmQgdmFsaWRhdGUgdGhlIHBheWxvYWQgZm9ybWF0ICovCiAgICAgUUNCT1JEZWNvZGVfSW5pdCgmZGVjb2RlX2NvbnRleHQsIHBheWxvYWQsIFFDQk9SX0RFQ09ERV9NT0RFX05PUk1BTCk7CiAgICAgc3RhdHVzID0gUUNCT1JEZWNvZGVfR2V0TmV4dCgmZGVjb2RlX2NvbnRleHQsICZpdGVtKTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2VhdC5oIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fZWF0LmgKaW5kZXggOWY0MzVmYi4uOGEwYzU0NSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fZWF0LmgKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fZWF0LmgKQEAgLTE3LDE2ICsxNyw3MCBAQAogCiAjaW5jbHVkZSAicWNib3IuaCIKICNpbmNsdWRlICJwYWxfY29tbW9uLmgiCisjaW5jbHVkZSAicHNhL2NyeXB0by5oIgogCiAjZGVmaW5lIFBBTF9BVFRFU1RfTUlOX0VSUk9SICAgICAgICAgICAgICAzMAogCisvKiBOSVNUIFAtMjU2IGFsc28ga25vd24gYXMgc2VjcDI1NnIxICovCisjZGVmaW5lIFBfMjU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKICNkZWZpbmUgQ09TRV9IRUFERVJfUEFSQU1fQUxHICAgICAgICAgICAgIDEKICNkZWZpbmUgQ09TRV9IRUFERVJfUEFSQU1fS0lEICAgICAgICAgICAgIDQKIAotI2RlZmluZSBNQU5EQVRPUllfQ0xBSU1fV0lUSF9TV19DT01QICAgICAgODYyCi0jZGVmaW5lIE1BTkRBVE9SWV9DTEFJTV9OT19TV19DT01QICAgICAgICA5MjYKLSNkZWZpbmUgTUFOREFUT1JZX1NXX0NPTVAgICAgICAgICAgICAgICAgIDM2Ci0jZGVmaW5lIENCT1JfQVJNX1RPVEFMX0NMQUlNX0lOU1RBTkNFICAgICAxMAorI2RlZmluZSBDT1NFX0tFWV9DT01NT05fS1RZICAgICAgICAgICAgICAgMQorI2RlZmluZSBDT1NFX0tFWV9UWVBFX0VDMiAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBDT1NFX0tFWV9QQVJBTV9DUlYgICAgICAgICAgICAgICAtMQorI2RlZmluZSBDT1NFX0tFWV9QQVJBTV9YX0NPT1JESU5BVEUgICAgICAtMgorI2RlZmluZSBDT1NFX0tFWV9QQVJBTV9ZX0NPT1JESU5BVEUgICAgICAtMworI2RlZmluZSBDT1NFX0FMR09SSVRITV9FUzI1NiAgICAgICAgICAgICAtNworI2RlZmluZSBDT1NFX0FMR19TSEEyNTZfUFJPUFJJRVRBUlkgICAgICAtNzIwMDAKKworLyoqCisgKiBUaGUgc2l6ZSBvZiBYIGFuZCBZIGNvb3JkaW5hdGUgaW4gMiBwYXJhbWV0ZXIgc3R5bGUgRUMgcHVibGljCisgKiBrZXkuIEZvcm1hdCBpcyBhcyBkZWZpbmVkIGluIFtDT1NFIChSRkMgODE1MildCisgKiAoaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzgxNTIpIGFuZCBbU0VDIDE6IEVsbGlwdGljIEN1cnZlCisgKiBDcnlwdG9ncmFwaHldKGh0dHA6Ly93d3cuc2VjZy5vcmcvc2VjMS12Mi5wZGYpLgorICoKKyAqIFRoaXMgc2l6ZSBpcyB3ZWxsLWtub3duIGFuZCBkb2N1bWVudGVkIGluIHB1YmxpYyBzdGFuZGFyZHMuCisgKi8KKyNkZWZpbmUgVF9DT1NFX0NSWVBUT19FQ19QMjU2X0NPT1JEX1NJWkUgIDMyCisjZGVmaW5lIFRfQ09TRV9DUllQVE9fU0hBMjU2X1NJWkUgICAgICAgICAzMgorCisjZGVmaW5lIE1BWF9FTkNPREVEX0NPU0VfS0VZX1NJWkUgXAorICAgIDEgKyAvKiAxIGJ5dGUgdG8gZW5jb2RlIG1hcCAqLyBcCisgICAgMiArIC8qIDIgYnl0ZXMgdG8gZW5jb2RlIGtleSB0eXBlICovIFwKKyAgICAyICsgLyogMiBieXRlcyB0byBlbmNvZGUgY3VydmUgKi8gXAorICAgIDIgKiAvKiB0aGUgWCBhbmQgWSBjb29yZGluYXRlcyBhdCAzMiBieXRlcyBlYWNoICovIFwKKyAgICAgICAgKFRfQ09TRV9DUllQVE9fRUNfUDI1Nl9DT09SRF9TSVpFICsgMSArIDIpCisjZGVmaW5lIFVTRUZVTF9CVUZfTUFLRV9TVEFDS19VQiBVc2VmdWxCdWZfTUFLRV9TVEFDS19VQgorCisjZGVmaW5lIENPU0VfU0lHX0NPTlRFWFRfU1RSSU5HX1NJR05BVFVSRTEgIlNpZ25hdHVyZTEiCisKKy8qIFByaXZhdGUgdmFsdWUuIEludGVudGlvbmFsbHkgbm90IGRvY3VtZW50ZWQgZm9yIERveHlnZW4uCisgKiBUaGlzIGlzIHRoZSBzaXplIGFsbG9jYXRlZCBmb3IgdGhlIGVuY29kZWQgcHJvdGVjdGVkIGhlYWRlcnMuICBJdAorICogbmVlZHMgdG8gYmUgYmlnIGVub3VnaCBmb3IgbWFrZV9wcm90ZWN0ZWRfaGVhZGVyKCkgdG8gc3VjY2VlZC4gSXQKKyAqIGN1cnJlbnRseSBzaXplZCBmb3Igb25lIGhlYWRlciB3aXRoIGFuIGFsZ29yaXRobSBJRCB1cCB0byAzMiBiaXRzCisgKiBsb25nIC0tIG9uZSBieXRlIGZvciB0aGUgd3JhcHBpbmcgbWFwLCBvbmUgYnl0ZSBmb3IgdGhlIGxhYmVsLCA1CisgKiBieXRlcyBmb3IgdGhlIElELiBJZiB0aGlzIGlzIG1hZGUgYWNjaWRlbnRpYWxseSB0b28gc21hbGwsIFFDQk9SIHdpbGwKKyAqIG9ubHkgcmV0dXJuIGFuIGVycm9yLCBhbmQgbm90IG92ZXJydW4gYW55IGJ1ZmZlcnMuCisgKgorICogOSBleHRyYSBieXRlcyBhcmUgYWRkZWQsIHJvdW5kaW5nIGl0IHVwIHRvIDE2IHRvdGFsLCBpbiBjYXNlIHNvbWUKKyAqIG90aGVyIHByb3RlY3RlZCBoZWFkZXIgaXMgdG8gYmUgYWRkZWQuCisgKi8KKyNkZWZpbmUgVF9DT1NFX1NJR04xX01BWF9QUk9UX0hFQURFUiAoMSsxKzUrOSkKKworLyoqCisgKiBUaGlzIGlzIHRoZSBzaXplIG9mIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBDQk9SIGVuY29kZWQgVEJTCisgKiBieXRlcy4gSXQgaXMgYXJvdW5kIDIwIGJ5dGVzLiBTZWUgY3JlYXRlX3Ric19oYXNoKCkuCisgKi8KKyNkZWZpbmUgVF9DT1NFX1NJWkVfT0ZfVEJTIFwKKyAgICAxICsgLyogRm9yIG9wZW5pbmcgdGhlIGFycmF5ICovIFwKKyAgICBzaXplb2YoQ09TRV9TSUdfQ09OVEVYVF9TVFJJTkdfU0lHTkFUVVJFMSkgKyAvKiAiU2lnbmF0dXJlMSIgKi8gXAorICAgIDIgKyAvKiBPdmVyaGVhZCBmb3IgZW5jb2Rpbmcgc3RyaW5nICovIFwKKyAgICBUX0NPU0VfU0lHTjFfTUFYX1BST1RfSEVBREVSICsgLyogZW50aXJlIHByb3RlY3RlZCBoZWFkZXJzICovIFwKKyAgICAzICogKCAvKiAzIE5VTEwgYnN0cnMgZm9yIGZpZWxkcyBub3QgdXNlZCAqLyBcCisgICAgICAgIDEgLyogc2l6ZSBvZiBhIE5VTEwgYnN0ciAqLyAgXAorICAgICkKIAogLyoKICBDQk9SIExhYmVsIGZvciBwcm9wcmlldGFyeSBoZWFkZXIgaW5kaWNhdGluZyBzaG9ydC1jaXJjdWl0CkBAIC00Nyw2ICsxMDEsOCBAQAogI2RlZmluZSBFQVRfQ0JPUl9BUk1fTEFCRUxfVUVJRCAgICAgICAgICAgICAgICAgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFIC0gOSkKICNkZWZpbmUgRUFUX0NCT1JfQVJNX0xBQkVMX09SSUdJTkFUSU9OICAgICAgICAgIChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAtIDEwKQogCisjZGVmaW5lIENCT1JfQVJNX1RPVEFMX0NMQUlNX0lOU1RBTkNFICAgICAgICAgICAxMAorCiAjZGVmaW5lIEVBVF9DQk9SX1NXX0NPTVBPTkVOVF9UWVBFICAgICAgICAgICAgICAoMXUpCiAjZGVmaW5lIEVBVF9DQk9SX1NXX0NPTVBPTkVOVF9NRUFTVVJFTUVOVCAgICAgICAoMnUpCiAjZGVmaW5lIEVBVF9DQk9SX1NXX0NPTVBPTkVOVF9FUE9DSCAgICAgICAgICAgICAoM3UpCkBAIC01NCw2ICsxMTAsNDAgQEAKICNkZWZpbmUgRUFUX0NCT1JfU1dfQ09NUE9ORU5UX1NJR05FUl9JRCAgICAgICAgICg1dSkKICNkZWZpbmUgRUFUX0NCT1JfU1dfQ09NUE9ORU5UX01FQVNVUkVNRU5UX0RFU0MgICg2dSkKIAorI2RlZmluZSBNQU5EQVRPUllfQ0xBSU1fV0lUSF9TV19DT01QICAgICAgICAgICAoMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX05PTkNFKSAgICAgICAgICAgICAgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX1VFSUQpICAgICAgICAgICAgICAgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX0lNUExFTUVOVEFUSU9OX0lEKSAgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX0NMSUVOVF9JRCkgICAgICAgICAgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX1NFQ1VSSVRZX0xJRkVDWUNMRSkgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX0JPT1RfU0VFRCkgICAgICAgICAgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX1NXX0NPTVBPTkVOVFMpKQorCisjZGVmaW5lIE1BTkRBVE9SWV9DTEFJTV9OT19TV19DT01QICAgICAgICAgICAgICgxIDw8IChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBFQVRfQ0JPUl9BUk1fTEFCRUxfTk9OQ0UpICAgICAgICAgICAgICB8ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDw8IChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBFQVRfQ0JPUl9BUk1fTEFCRUxfVUVJRCkgICAgICAgICAgICAgICB8ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDw8IChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBFQVRfQ0JPUl9BUk1fTEFCRUxfSU1QTEVNRU5UQVRJT05fSUQpICB8ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDw8IChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBFQVRfQ0JPUl9BUk1fTEFCRUxfQ0xJRU5UX0lEKSAgICAgICAgICB8ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDw8IChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBFQVRfQ0JPUl9BUk1fTEFCRUxfU0VDVVJJVFlfTElGRUNZQ0xFKSB8ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDw8IChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBFQVRfQ0JPUl9BUk1fTEFCRUxfQk9PVF9TRUVEKSAgICAgICAgICB8ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDw8IChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBFQVRfQ0JPUl9BUk1fTEFCRUxfTk9fU1dfQ09NUE9ORU5UUykpCisKKyNkZWZpbmUgTUFOREFUT1JZX1NXX0NPTVAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgRUFUX0NCT1JfU1dfQ09NUE9ORU5UX01FQVNVUkVNRU5UICAgICAgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCBFQVRfQ0JPUl9TV19DT01QT05FTlRfU0lHTkVSX0lEKQorCisjZGVmaW5lIE5VTExfVVNFRlVMX0JVRl9DICBOVUxMVXNlZnVsQnVmQwogCiBlbnVtIGF0dGVzdGF0aW9uX2Vycm9yX2NvZGUgewogICAgIFBBTF9BVFRFU1RfU1VDQ0VTUyA9IDAsCkBAIC02MSw2ICsxNTEsMTMgQEAKICAgICBQQUxfQVRURVNUX1RPS0VOX0NIQUxMRU5HRV9NSVNNQVRDSCwKICAgICBQQUxfQVRURVNUX1RPS0VOX05PVF9TVVBQT1JURUQsCiAgICAgUEFMX0FUVEVTVF9UT0tFTl9OT1RfQUxMX01BTkRBVE9SWV9DTEFJTVMsCisgICAgUEFMX0FUVEVTVF9IQVNIX0xFTkdUSF9NSVNNQVRDSCwKKyAgICBQQUxfQVRURVNUX0hBU0hfTUlTTUFUQ0gsCisgICAgUEFMX0FUVEVTVF9IQVNIX0ZBSUwsCisgICAgUEFMX0FUVEVTVF9IQVNIX1VOU1VQUE9SVEVELAorICAgIFBBTF9BVFRFU1RfSEFTSF9CVUZGRVJfU0laRSwKKyAgICBQQUxfQVRURVNUX0VSUl9QUk9URUNURURfSEVBREVSUywKKyAgICBQQUxfQVRURVNUX0VSUl9TSUdOX1NUUlVDVCwKICAgICBQQUxfQVRURVNUX0VSUk9SLAogfTsKIApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25faW50Zi5oIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25faW50Zi5oCmluZGV4IGVmMTMyYjUuLjEyZjZlZTkgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2ludGYuaAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9pbnRmLmgKQEAgLTE4LDcgKzE4LDcgQEAKICNpZm5kZWYgX1BBTF9JTklUSUFMX0FUVEVTVEFUSU9OX0hfCiAjZGVmaW5lIF9QQUxfSU5JVElBTF9BVFRFU1RBVElPTl9IXwogCi0jaW5jbHVkZSAicGFsX2F0dGVzdGF0aW9uX2VhdC5oIgorI2luY2x1ZGUgInBhbF9hdHRlc3RhdGlvbl9jcnlwdG8uaCIKIAogZW51bSBhdHRlc3RhdGlvbl9mdW5jdGlvbl9jb2RlIHsKICAgICBQQUxfSU5JVElBTF9BVFRFU1RfR0VUX1RPS0VOICAgICAgICA9IDB4MSwKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9yZWZlcmVuY2VfbG9ncy9hdHRlc3RhdGlvbi50eHQgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvcmVmZXJlbmNlX2xvZ3MvYXR0ZXN0YXRpb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFlMzQ3YTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvcmVmZXJlbmNlX2xvZ3MvYXR0ZXN0YXRpb24udHh0CkBAIC0wLDAgKzEsMzYgQEAKKyoqKioqIFBTQSBBcmNoaXRlY3R1cmUgVGVzdCBTdWl0ZSAtIFZlcnNpb24gMC45ICoqKioqDQorDQorUnVubmluZy4uIEF0dGVzdGF0aW9uIFN1aXRlDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorVEVTVDogODAxIHwgREVTQ1JJUFRJT046IFRlc3RpbmcgaW5pdGlhbCBhdHRlc3RhdGlvbiBBUElzDQorW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUNCitbQ2hlY2sgMV0gVGVzdCBwc2FfaW5pdGlhbF9hdHRlc3RhdGlvbl9nZXRfdG9rZW4gd2l0aCBDaGFsbGVuZ2UgMzINCitbQ2hlY2sgMl0gVGVzdCBwc2FfaW5pdGlhbF9hdHRlc3RhdGlvbl9nZXRfdG9rZW4gd2l0aCBDaGFsbGVuZ2UgNDgNCitbQ2hlY2sgM10gVGVzdCBwc2FfaW5pdGlhbF9hdHRlc3RhdGlvbl9nZXRfdG9rZW4gd2l0aCBDaGFsbGVuZ2UgNjQNCitbQ2hlY2sgNF0gVGVzdCBwc2FfaW5pdGlhbF9hdHRlc3RhdGlvbl9nZXRfdG9rZW4gd2l0aCB6ZXJvIGNoYWxsZW5nZSBzaXplDQorW0NoZWNrIDVdIFRlc3QgcHNhX2luaXRpYWxfYXR0ZXN0YXRpb25fZ2V0X3Rva2VuIHdpdGggc21hbGwgY2hhbGxlbmdlIHNpemUNCitbQ2hlY2sgNl0gVGVzdCBwc2FfaW5pdGlhbF9hdHRlc3RhdGlvbl9nZXRfdG9rZW4gd2l0aCBpbnZhbGlkIGNoYWxsZW5nZSBzaXplDQorW0NoZWNrIDddIFRlc3QgcHNhX2luaXRpYWxfYXR0ZXN0YXRpb25fZ2V0X3Rva2VuIHdpdGggbGFyZ2UgY2hhbGxlbmdlIHNpemUNCitbQ2hlY2sgOF0gVGVzdCBwc2FfaW5pdGlhbF9hdHRlc3RhdGlvbl9nZXRfdG9rZW4gd2l0aCB6ZXJvIGFzIHRva2VuIHNpemUNCitbQ2hlY2sgOV0gVGVzdCBwc2FfaW5pdGlhbF9hdHRlc3RhdGlvbl9nZXRfdG9rZW4gd2l0aCBzbWFsbCB0b2tlbiBzaXplDQorW0NoZWNrIDEwXSBUZXN0IHBzYV9pbml0aWFsX2F0dGVzdGF0aW9uX2dldF90b2tlbl9zaXplIHdpdGggQ2hhbGxlbmdlIDMyDQorW0NoZWNrIDExXSBUZXN0IHBzYV9pbml0aWFsX2F0dGVzdGF0aW9uX2dldF90b2tlbl9zaXplIHdpdGggQ2hhbGxlbmdlIDQ4DQorW0NoZWNrIDEyXSBUZXN0IHBzYV9pbml0aWFsX2F0dGVzdGF0aW9uX2dldF90b2tlbl9zaXplIHdpdGggQ2hhbGxlbmdlIDY0DQorW0NoZWNrIDEzXSBUZXN0IHBzYV9pbml0aWFsX2F0dGVzdGF0aW9uX2dldF90b2tlbl9zaXplIHdpdGggemVybyBjaGFsbGVuZ2Ugc2l6ZQ0KK1tDaGVjayAxNF0gVGVzdCBwc2FfaW5pdGlhbF9hdHRlc3RhdGlvbl9nZXRfdG9rZW5fc2l6ZSB3aXRoIHNtYWxsIGNoYWxsZW5nZSBzaXplDQorW0NoZWNrIDE1XSBUZXN0IHBzYV9pbml0aWFsX2F0dGVzdGF0aW9uX2dldF90b2tlbl9zaXplIHdpdGggaW52YWxpZCBjaGFsbGVuZ2Ugc2l6ZQ0KK1tDaGVjayAxNl0gVGVzdCBwc2FfaW5pdGlhbF9hdHRlc3RhdGlvbl9nZXRfdG9rZW5fc2l6ZSB3aXRoIGxhcmdlIGNoYWxsZW5nZSBzaXplDQorVEVTVCBSRVNVTFQ6IFBBU1NFRA0KKw0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyoqKioqKioqKioqKiBBdHRlc3RhdGlvbiBTdWl0ZSBSZXBvcnQgKioqKioqKioqKg0KK1RPVEFMIFRFU1RTICAgICA6IDENCitUT1RBTCBQQVNTRUQgICAgOiAxDQorVE9UQUwgU0lNIEVSUk9SIDogMA0KK1RPVEFMIEZBSUxFRCAgICA6IDANCitUT1RBTCBTS0lQUEVEICAgOiAwDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorRW50ZXJpbmcgc3RhbmRieS4uDQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL3JlZmVyZW5jZV9sb2dzL2NyeXB0by50eHQgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvcmVmZXJlbmNlX2xvZ3MvY3J5cHRvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjFiZDY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL3JlZmVyZW5jZV9sb2dzL2NyeXB0by50eHQKQEAgLTAsMCArMSw3NjYgQEAKKyoqKioqIFBTQSBBcmNoaXRlY3R1cmUgVGVzdCBTdWl0ZSAtIFZlcnNpb24gMC45ICoqKioqCisKK1J1bm5pbmcuLiBDcnlwdG8gU3VpdGUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitURVNUOiAyMDEgfCBERVNDUklQVElPTjogVGVzdGluZyBwc2FfY3J5cHRvX2luaXQgQVBJOiBCYXNpYworW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUKK1tDaGVjayAxXSBUZXN0IGNhbGxpbmcgY3J5cHRvIGZ1bmN0aW9ucyBiZWZvcmUgcHNhX2NyeXB0b19pbml0CitbQ2hlY2sgMl0gVGVzdCBwc2FfY3J5cHRvX2luaXQKK1tDaGVjayAzXSBUZXN0IG11bHRpcGxlIHBzYV9jcnlwdG9faW5pdAorVEVTVCBSRVNVTFQ6IFBBU1NFRAorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVEVTVDogMjAyIHwgREVTQ1JJUFRJT046IFRlc3RpbmcgY3J5cHRvIGtleSBtYW5hZ2VtZW50IEFQSXMKK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlCitbQ2hlY2sgMV0gVGVzdCBwc2FfaW1wb3J0X2tleSAxNiBCeXRlIEFFUworW0NoZWNrIDJdIFRlc3QgcHNhX2ltcG9ydF9rZXkgMjQgQnl0ZSBBRVMKK1tDaGVjayAzXSBUZXN0IHBzYV9pbXBvcnRfa2V5IDMyIEJ5dGUgQUVTCitbQ2hlY2sgNF0gVGVzdCBwc2FfaW1wb3J0X2tleSAyMDQ4IFJTQSBwdWJsaWMga2V5CitbQ2hlY2sgNV0gVGVzdCBwc2FfaW1wb3J0X2tleSB3aXRoIFJTQSAyMDQ4IGtleXBhaXIKK1tDaGVjayA2XSBUZXN0IHBzYV9pbXBvcnRfa2V5IHdpdGggREVTIDY0IGJpdCBrZXkKK1tDaGVjayA3XSBUZXN0IHBzYV9pbXBvcnRfa2V5IHdpdGggVHJpcGxlIERFUyAyLUtleQorW0NoZWNrIDhdIFRlc3QgcHNhX2ltcG9ydF9rZXkgd2l0aCBUcmlwbGUgREVTIDMtS2V5CitbQ2hlY2sgOV0gVGVzdCBwc2FfaW1wb3J0X2tleSB3aXRoIEVDIFB1YmxpYyBrZXkKK1tDaGVjayAxMF0gVGVzdCBwc2FfaW1wb3J0X2tleSB3aXRoIEVDIGtleXBhaXIKK1tDaGVjayAxMV0gVGVzdCBwc2FfaW1wb3J0X2tleSB3aXRoIGtleSBkYXRhIGdyZWF0ZXIgdGhhbiB0aGUgYWxnb3JpdGhtIHNpemUKK1tDaGVjayAxMl0gVGVzdCBwc2FfaW1wb3J0X2tleSB3aXRoIGluY29ycmVjdCBrZXkgZGF0YSBzaXplCitbQ2hlY2sgMTNdIFRlc3QgcHNhX2ltcG9ydF9rZXkgd2l0aCBpbmNvcnJlY3Qga2V5IHR5cGUKK1tDaGVjayAxNF0gVGVzdCBwc2FfaW1wb3J0X2tleSB3aXRoIGFscmVhZHkgb2NjdXBpZWQga2V5IHNsb3QKK1tDaGVjayAxNV0gVGVzdCBwc2FfaW1wb3J0X2tleSB3aXRoIHplcm8gYXMga2V5IGhhbmRsZQorW0NoZWNrIDE2XSBUZXN0IHBzYV9pbXBvcnRfa2V5IHdpdGggZGVzdHJveWVkIGhhbmRsZQorW0NoZWNrIDE3XSBUZXN0IHBzYV9pbXBvcnRfa2V5IHdpdGggdW5hbGxvY2F0ZWQga2V5IGhhbmRsZQorVEVTVCBSRVNVTFQ6IFBBU1NFRAorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVEVTVDogMjAzIHwgREVTQ1JJUFRJT046IFRlc3RpbmcgY3J5cHRvIGtleSBtYW5hZ2VtZW50IEFQSXMKK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlCitbQ2hlY2sgMV0gVGVzdCBwc2FfZXhwb3J0X2tleSAxNiBCeXRlIEFFUworW0NoZWNrIDJdIFRlc3QgcHNhX2V4cG9ydF9rZXkgMjQgQnl0ZSBBRVMKK1tDaGVjayAzXSBUZXN0IHBzYV9leHBvcnRfa2V5IDMyIEJ5dGUgQUVTCitbQ2hlY2sgNF0gVGVzdCBwc2FfZXhwb3J0X2tleSAyMDQ4IFJTQSBwdWJsaWMga2V5CitbQ2hlY2sgNV0gVGVzdCBwc2FfZXhwb3J0X2tleSB3aXRoIFJTQSAyMDQ4IGtleXBhaXIKK1tDaGVjayA2XSBUZXN0IHBzYV9leHBvcnRfa2V5IHdpdGggREVTIDY0IGJpdCBrZXkKK1tDaGVjayA3XSBUZXN0IHBzYV9leHBvcnRfa2V5IHdpdGggVHJpcGxlIERFUyAyLUtleQorW0NoZWNrIDhdIFRlc3QgcHNhX2V4cG9ydF9rZXkgd2l0aCBUcmlwbGUgREVTIDMtS2V5CitbQ2hlY2sgOV0gVGVzdCBwc2FfZXhwb3J0X2tleSB3aXRoIEVDIFB1YmxpYyBrZXkKK1tDaGVjayAxMF0gVGVzdCBwc2FfZXhwb3J0X2tleSB3aXRoIEVDIGtleXBhaXIKK1tDaGVjayAxMV0gVGVzdCBwc2FfZXhwb3J0X2tleSB3aXRoIGtleSBwb2xpY3kgdmVyaWZ5CitbQ2hlY2sgMTJdIFRlc3QgcHNhX2V4cG9ydF9rZXkgd2l0aCBsZXNzIGJ1ZmZlciBzaXplCitbQ2hlY2sgMTNdIFRlc3QgcHNhX2V4cG9ydF9rZXkgd2l0aCB1bmFsbG9jYXRlZCBrZXkgaGFuZGxlCitbQ2hlY2sgMTRdIFRlc3QgcHNhX2V4cG9ydF9rZXkgd2l0aCBlbXB0eSBrZXkgaGFuZGxlCitbQ2hlY2sgMTVdIFRlc3QgcHNhX2V4cG9ydF9rZXkgd2l0aCB6ZXJvIGFzIGtleSBoYW5kbGUKK1tDaGVjayAxNl0gVGVzdCBwc2FfZXhwb3J0X2tleSB3aXRoIGRlc3Ryb3llZCBrZXkgaGFuZGxlCitURVNUIFJFU1VMVDogUEFTU0VECisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitURVNUOiAyMDQgfCBERVNDUklQVElPTjogVGVzdGluZyBjcnlwdG8ga2V5IG1hbmFnZW1lbnQgQVBJcworW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUKK1tDaGVjayAxXSBUZXN0IHBzYV9leHBvcnRfcHVibGljX2tleSAxNiBCeXRlIEFFUworW0NoZWNrIDJdIFRlc3QgcHNhX2V4cG9ydF9wdWJsaWNfa2V5IDI0IEJ5dGUgQUVTCitbQ2hlY2sgM10gVGVzdCBwc2FfZXhwb3J0X3B1YmxpY19rZXkgMzIgQnl0ZSBBRVMKK1tDaGVjayA0XSBUZXN0IHBzYV9leHBvcnRfcHVibGljX2tleSAyMDQ4IFJTQSBwdWJsaWMga2V5CitbQ2hlY2sgNV0gVGVzdCBwc2FfZXhwb3J0X3B1YmxpY19rZXkgd2l0aCBSU0EgMjA0OCBrZXlwYWlyCitbQ2hlY2sgNl0gVGVzdCBwc2FfZXhwb3J0X3B1YmxpY19rZXkgd2l0aCBERVMgNjQgYml0IGtleQorW0NoZWNrIDddIFRlc3QgcHNhX2V4cG9ydF9wdWJsaWNfa2V5IHdpdGggVHJpcGxlIERFUyAyLUtleQorW0NoZWNrIDhdIFRlc3QgcHNhX2V4cG9ydF9wdWJsaWNfa2V5IHdpdGggVHJpcGxlIERFUyAzLUtleQorW0NoZWNrIDldIFRlc3QgcHNhX2V4cG9ydF9wdWJsaWNfa2V5IHdpdGggRUMgUHVibGljIGtleQorW0NoZWNrIDEwXSBUZXN0IHBzYV9leHBvcnRfcHVibGljX2tleSB3aXRoIEVDIGtleXBhaXIKK1tDaGVjayAxMV0gVGVzdCBwc2FfZXhwb3J0X3B1YmxpY19rZXkgd2l0aCBsZXNzIGJ1ZmZlciBzaXplCitbQ2hlY2sgMTJdIFRlc3QgcHNhX2V4cG9ydF9rZXkgd2l0aCB1bmFsbG9jYXRlZCBrZXkgaGFuZGxlCitbQ2hlY2sgMTNdIFRlc3QgcHNhX2V4cG9ydF9rZXkgd2l0aCBlbXB0eSBrZXkgaGFuZGxlCitbQ2hlY2sgMTRdIFRlc3QgcHNhX2V4cG9ydF9rZXkgd2l0aCB6ZXJvIGFzIGtleSBoYW5kbGUKK1tDaGVjayAxNV0gVGVzdCBwc2FfZXhwb3J0X2tleSB3aXRoIGRlc3Ryb3llZCBrZXkgaGFuZGxlCitURVNUIFJFU1VMVDogUEFTU0VECisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitURVNUOiAyMDUgfCBERVNDUklQVElPTjogVGVzdGluZyBjcnlwdG8ga2V5IG1hbmFnZW1lbnQgQVBJcworW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUKK1tDaGVjayAxXSBUZXN0IHBzYV9kZXN0cm95X2tleSAxNiBCeXRlIEFFUworW0NoZWNrIDJdIFRlc3QgcHNhX2Rlc3Ryb3lfa2V5IDI0IEJ5dGUgQUVTCitbQ2hlY2sgM10gVGVzdCBwc2FfZGVzdHJveV9rZXkgMzIgQnl0ZSBBRVMKK1tDaGVjayA0XSBUZXN0IHBzYV9kZXN0cm95X2tleSAyMDQ4IFJTQSBwdWJsaWMga2V5CitbQ2hlY2sgNV0gVGVzdCBwc2FfZGVzdHJveV9rZXkgd2l0aCBSU0EgMjA0OCBrZXlwYWlyCitbQ2hlY2sgNl0gVGVzdCBwc2FfZGVzdHJveV9rZXkgd2l0aCBERVMgNjQgYml0IGtleQorW0NoZWNrIDddIFRlc3QgcHNhX2Rlc3Ryb3lfa2V5IHdpdGggVHJpcGxlIERFUyAyLUtleQorW0NoZWNrIDhdIFRlc3QgcHNhX2Rlc3Ryb3lfa2V5IHdpdGggVHJpcGxlIERFUyAzLUtleQorW0NoZWNrIDldIFRlc3QgcHNhX2Rlc3Ryb3lfa2V5IHdpdGggRUMgUHVibGljIGtleQorW0NoZWNrIDEwXSBUZXN0IHBzYV9kZXN0cm95X2tleSB3aXRoIEVDIGtleXBhaXIKK1tDaGVjayAxMV0gVGVzdCBwc2FfZGVzdHJveV9rZXkgd2l0aCB1bmFsbG9jYXRlZCBrZXkgaGFuZGxlCitbQ2hlY2sgMTJdIFRlc3QgcHNhX2Rlc3Ryb3lfa2V5IHdpdGggemVybyBhcyBrZXkgaGFuZGxlCitbQ2hlY2sgMTNdIFRlc3QgcHNhX2Rlc3Ryb3lfa2V5IHdpdGggZW1wdHkga2V5IGhhbmRsZQorVEVTVCBSRVNVTFQ6IFBBU1NFRAorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVEVTVDogMjA2IHwgREVTQ1JJUFRJT046IFRlc3RpbmcgY3J5cHRvIGtleSBtYW5hZ2VtZW50IEFQSXMKK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlCitbQ2hlY2sgMV0gVGVzdCBwc2FfZ2V0X2tleV9pbmZvcm1hdGlvbiAxNiBCeXRlIEFFUworW0NoZWNrIDJdIFRlc3QgcHNhX2dldF9rZXlfaW5mb3JtYXRpb24gMjQgQnl0ZSBBRVMKK1tDaGVjayAzXSBUZXN0IHBzYV9nZXRfa2V5X2luZm9ybWF0aW9uIDMyIEJ5dGUgQUVTCitbQ2hlY2sgNF0gVGVzdCBwc2FfZ2V0X2tleV9pbmZvcm1hdGlvbiAyMDQ4IFJTQSBwdWJsaWMga2V5CitbQ2hlY2sgNV0gVGVzdCBwc2FfZ2V0X2tleV9pbmZvcm1hdGlvbiB3aXRoIFJTQSAyMDQ4IGtleXBhaXIKK1tDaGVjayA2XSBUZXN0IHBzYV9nZXRfa2V5X2luZm9ybWF0aW9uIHdpdGggREVTIDY0IGJpdCBrZXkKK1tDaGVjayA3XSBUZXN0IHBzYV9nZXRfa2V5X2luZm9ybWF0aW9uIHdpdGggVHJpcGxlIERFUyAyLUtleQorW0NoZWNrIDhdIFRlc3QgcHNhX2dldF9rZXlfaW5mb3JtYXRpb24gd2l0aCBUcmlwbGUgREVTIDMtS2V5CitbQ2hlY2sgOV0gVGVzdCBwc2FfZ2V0X2tleV9pbmZvcm1hdGlvbiB3aXRoIEVDIFB1YmxpYyBrZXkKK1tDaGVjayAxMF0gVGVzdCBwc2FfZ2V0X2tleV9pbmZvcm1hdGlvbiB3aXRoIEVDIGtleXBhaXIKK1tDaGVjayAxMV0gVGVzdCBwc2FfZ2V0X2tleV9pbmZvcm1hdGlvbiB3aXRoIHVuYWxsb2NhdGVkIGtleSBoYW5kbGUKK1tDaGVjayAxMl0gVGVzdCBwc2FfZ2V0X2tleV9pbmZvcm1hdGlvbiB3aXRoIHplcm8gYXMga2V5IGhhbmRsZQorW0NoZWNrIDEzXSBUZXN0IHBzYV9nZXRfa2V5X2luZm9ybWF0aW9uIHdpdGggZW1wdHkga2V5IGhhbmRsZQorW0NoZWNrIDE0XSBUZXN0IHBzYV9nZXRfa2V5X2luZm9ybWF0aW9uIHdpdGggZGVzdHJveWVkIGtleSBoYW5kbGUKK1RFU1QgUkVTVUxUOiBQQVNTRUQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RFU1Q6IDIwNyB8IERFU0NSSVBUSU9OOiBUZXN0aW5nIGNyeXB0byBrZXkgbWFuYWdlbWVudCBBUElzCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQorW0NoZWNrIDFdIFRlc3QgcHNhX3NldF9rZXlfcG9saWN5IDE2IEJ5dGUgQUVTCitbQ2hlY2sgMl0gVGVzdCBwc2Ffc2V0X2tleV9wb2xpY3kgMjQgQnl0ZSBBRVMKK1tDaGVjayAzXSBUZXN0IHBzYV9zZXRfa2V5X3BvbGljeSAzMiBCeXRlIEFFUworW0NoZWNrIDRdIFRlc3QgcHNhX3NldF9rZXlfcG9saWN5IDIwNDggUlNBIHB1YmxpYyBrZXkKK1tDaGVjayA1XSBUZXN0IHBzYV9zZXRfa2V5X3BvbGljeSB3aXRoIFJTQSAyMDQ4IGtleXBhaXIKK1tDaGVjayA2XSBUZXN0IHBzYV9zZXRfa2V5X3BvbGljeSB3aXRoIERFUyA2NCBiaXQga2V5CitbQ2hlY2sgN10gVGVzdCBwc2Ffc2V0X2tleV9wb2xpY3kgd2l0aCBUcmlwbGUgREVTIDItS2V5CitbQ2hlY2sgOF0gVGVzdCBwc2Ffc2V0X2tleV9wb2xpY3kgd2l0aCBUcmlwbGUgREVTIDMtS2V5CitbQ2hlY2sgOV0gVGVzdCBwc2Ffc2V0X2tleV9wb2xpY3kgd2l0aCBFQyBQdWJsaWMga2V5CitbQ2hlY2sgMTBdIFRlc3QgcHNhX3NldF9rZXlfcG9saWN5IHdpdGggRUMga2V5cGFpcgorW0NoZWNrIDExXSBUZXN0IHBzYV9zZXRfa2V5X3BvbGljeSB3aXRoIGludmFsaWQgdXNhZ2UKK1tDaGVjayAxMl0gVGVzdCBwc2Ffc2V0X2tleV9wb2xpY3kgd2l0aCB1bmFsbG9jYXRlZCBrZXkgaGFuZGxlCitbQ2hlY2sgMTNdIFRlc3QgcHNhX3NldF9rZXlfcG9saWN5IHdpdGggemVybyBhcyBrZXkgaGFuZGxlCitbQ2hlY2sgMTRdIFRlc3QgcHNhX3NldF9rZXlfcG9saWN5IHdpdGggYWxyZWFkeSBvY2N1cGllZCBoYW5kbGUKK1RFU1QgUkVTVUxUOiBQQVNTRUQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RFU1Q6IDIwOCB8IERFU0NSSVBUSU9OOiBUZXN0aW5nIGNyeXB0byBrZXkgbWFuYWdlbWVudCBBUElzCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQorW0NoZWNrIDFdIFRlc3QgcHNhX2dldF9rZXlfcG9saWN5IDE2IEJ5dGUgQUVTCitbQ2hlY2sgMl0gVGVzdCBwc2FfZ2V0X2tleV9wb2xpY3kgMjQgQnl0ZSBBRVMKK1tDaGVjayAzXSBUZXN0IHBzYV9nZXRfa2V5X3BvbGljeSAzMiBCeXRlIEFFUworW0NoZWNrIDRdIFRlc3QgcHNhX2dldF9rZXlfcG9saWN5IDIwNDggUlNBIHB1YmxpYyBrZXkKK1tDaGVjayA1XSBUZXN0IHBzYV9nZXRfa2V5X3BvbGljeSB3aXRoIFJTQSAyMDQ4IGtleXBhaXIKK1tDaGVjayA2XSBUZXN0IHBzYV9nZXRfa2V5X3BvbGljeSB3aXRoIERFUyA2NCBiaXQga2V5CitbQ2hlY2sgN10gVGVzdCBwc2FfZ2V0X2tleV9wb2xpY3kgd2l0aCBUcmlwbGUgREVTIDItS2V5CitbQ2hlY2sgOF0gVGVzdCBwc2FfZ2V0X2tleV9wb2xpY3kgd2l0aCBUcmlwbGUgREVTIDMtS2V5CitbQ2hlY2sgOV0gVGVzdCBwc2FfZ2V0X2tleV9wb2xpY3kgd2l0aCBFQyBQdWJsaWMga2V5CitbQ2hlY2sgMTBdIFRlc3QgcHNhX2dldF9rZXlfcG9saWN5IHdpdGggRUMga2V5cGFpcgorW0NoZWNrIDExXSBUZXN0IHBzYV9nZXRfa2V5X3BvbGljeSBuZWdhdGl2ZSBjYXNlcworW0NoZWNrIDEyXSBUZXN0IHBzYV9nZXRfa2V5X3BvbGljeSB3aXRoIHVuYWxsb2NhdGVkIGtleSBoYW5kbGUKK1tDaGVjayAxM10gVGVzdCBwc2FfZ2V0X2tleV9wb2xpY3kgd2l0aCB6ZXJvIGFzIGtleSBoYW5kbGUKK1tDaGVjayAxNF0gVGVzdCBwc2FfZ2V0X2tleV9wb2xpY3kgd2l0aCBlbXB0eSBrZXkgaGFuZGxlCitURVNUIFJFU1VMVDogUEFTU0VECisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitURVNUOiAyMDkgfCBERVNDUklQVElPTjogVGVzdGluZyBjcnlwdG8ga2V5IG1hbmFnZW1lbnQgQVBJcworW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUKK1tDaGVjayAxXSBUZXN0IHBzYV9hbGxvY2F0ZV9rZXkgMTYgQnl0ZSBBRVMKK1tDaGVjayAyXSBUZXN0IHBzYV9hbGxvY2F0ZV9rZXkgMjQgQnl0ZSBBRVMKK1tDaGVjayAzXSBUZXN0IHBzYV9hbGxvY2F0ZV9rZXkgMzIgQnl0ZSBBRVMKK1tDaGVjayA0XSBUZXN0IHBzYV9hbGxvY2F0ZV9rZXkgMjA0OCBSU0EgcHVibGljIGtleQorW0NoZWNrIDVdIFRlc3QgcHNhX2FsbG9jYXRlX2tleSB3aXRoIFJTQSAyMDQ4IGtleXBhaXIKK1tDaGVjayA2XSBUZXN0IHBzYV9hbGxvY2F0ZV9rZXkgd2l0aCBERVMgNjQgYml0IGtleQorW0NoZWNrIDddIFRlc3QgcHNhX2FsbG9jYXRlX2tleSB3aXRoIFRyaXBsZSBERVMgMi1LZXkKK1tDaGVjayA4XSBUZXN0IHBzYV9hbGxvY2F0ZV9rZXkgd2l0aCBUcmlwbGUgREVTIDMtS2V5CitbQ2hlY2sgOV0gVGVzdCBwc2FfYWxsb2NhdGVfa2V5IHdpdGggRUMgUHVibGljIGtleQorW0NoZWNrIDEwXSBUZXN0IHBzYV9hbGxvY2F0ZV9rZXkgd2l0aCBFQyBrZXlwYWlyCitbQ2hlY2sgMTFdIFRlc3RpbmcgdGhlIGluc3VmZmljaWVudCBtZW1vcnkKK1RFU1QgUkVTVUxUOiBQQVNTRUQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RFU1Q6IDIxMCB8IERFU0NSSVBUSU9OOiBUZXN0aW5nIGNyeXB0byBrZXkgbWFuYWdlbWVudCBBUElzCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQorW0NoZWNrIDFdIFRlc3QgcHNhX2dldF9rZXlfbGlmZXRpbWUgMTYgQnl0ZSBBRVMKK1tDaGVjayAyXSBUZXN0IHBzYV9nZXRfa2V5X2xpZmV0aW1lIDIwNDggUlNBIHB1YmxpYyBrZXkKK1tDaGVjayAzXSBUZXN0IHBzYV9nZXRfa2V5X2xpZmV0aW1lIHdpdGggVHJpcGxlIERFUyAyLUtleQorW0NoZWNrIDRdIFRlc3QgcHNhX2dldF9rZXlfbGlmZXRpbWUgd2l0aCBFQyBQdWJsaWMga2V5CitbQ2hlY2sgNV0gVGVzdCBwc2FfZ2V0X2tleV9saWZldGltZSB3aXRoIEVDIGtleXBhaXIKK1tDaGVjayA2XSBUZXN0IHBzYV9nZXRfa2V5X2xpZmV0aW1lIHdpdGggaW52YWxpZCBrZXkgaGFuZGxlCitbQ2hlY2sgN10gVGVzdCBwc2FfZ2V0X2tleV9saWZldGltZSB3aXRoIHplcm8gYXMga2V5IGhhbmRsZQorW0NoZWNrIDhdIFRlc3QgcHNhX2dldF9rZXlfbGlmZXRpbWUgd2l0aCBlbXB0eSBrZXkgaGFuZGxlCitURVNUIFJFU1VMVDogUEFTU0VECisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitURVNUOiAyMTEgfCBERVNDUklQVElPTjogVGVzdGluZyBjcnlwdG8gaGFzaCBmdW5jdGlvbnMgQVBJcworW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUKK1tDaGVjayAxXSBUZXN0IHBzYV9oYXNoX3NldHVwIHdpdGggTUQyIGFsZ29yaXRobQorW0NoZWNrIDJdIFRlc3QgcHNhX2hhc2hfc2V0dXAgd2l0aCBNRDQgYWxnb3JpdGhtCitbQ2hlY2sgM10gVGVzdCBwc2FfaGFzaF9zZXR1cCB3aXRoIE1ENSBhbGdvcml0aG0KK1tDaGVjayA0XSBUZXN0IHBzYV9oYXNoX3NldHVwIHdpdGggUklQRU1EMTYwIGFsZ29yaXRobQorW0NoZWNrIDVdIFRlc3QgcHNhX2hhc2hfc2V0dXAgd2l0aCBTSEExIGFsZ29yaXRobQorW0NoZWNrIDZdIFRlc3QgcHNhX2hhc2hfc2V0dXAgd2l0aCBTSEEyMjQgYWxnb3JpdGhtCitbQ2hlY2sgN10gVGVzdCBwc2FfaGFzaF9zZXR1cCB3aXRoIFNIQTI1NiBhbGdvcml0aG0KK1tDaGVjayA4XSBUZXN0IHBzYV9oYXNoX3NldHVwIHdpdGggU0hBMzg0IGFsZ29yaXRobQorW0NoZWNrIDldIFRlc3QgcHNhX2hhc2hfc2V0dXAgd2l0aCBTSEE1MTIgYWxnb3JpdGhtCitURVNUIFJFU1VMVDogUEFTU0VECisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitURVNUOiAyMTIgfCBERVNDUklQVElPTjogVGVzdGluZyBjcnlwdG8gaGFzaCBmdW5jdGlvbnMgQVBJcworW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUKK1tDaGVjayAxXSBUZXN0IHBzYV9oYXNoX3VwZGF0ZSB3aXRoIE1EMiBhbGdvcml0aG0KK1tDaGVjayAyXSBUZXN0IHBzYV9oYXNoX3VwZGF0ZSB3aXRoIE1ENCBhbGdvcml0aG0KK1tDaGVjayAzXSBUZXN0IHBzYV9oYXNoX3VwZGF0ZSB3aXRoIE1ENSBhbGdvcml0aG0KK1tDaGVjayA0XSBUZXN0IHBzYV9oYXNoX3VwZGF0ZSB3aXRoIFJJUEVNRDE2MCBhbGdvcml0aG0KK1tDaGVjayA1XSBUZXN0IHBzYV9oYXNoX3VwZGF0ZSB3aXRoIFNIQTEgYWxnb3JpdGhtCitbQ2hlY2sgNl0gVGVzdCBwc2FfaGFzaF91cGRhdGUgd2l0aCBTSEEyMjQgYWxnb3JpdGhtCitbQ2hlY2sgN10gVGVzdCBwc2FfaGFzaF91cGRhdGUgd2l0aCBTSEEyNTYgYWxnb3JpdGhtCitbQ2hlY2sgOF0gVGVzdCBwc2FfaGFzaF91cGRhdGUgd2l0aCBTSEEzODQgYWxnb3JpdGhtCitbQ2hlY2sgOV0gVGVzdCBwc2FfaGFzaF91cGRhdGUgd2l0aCBTSEE1MTIgYWxnb3JpdGhtCitbQ2hlY2sgMTBdIFRlc3QgcHNhX2hhc2hfdXBkYXRlIHdpdGhvdXQgaGFzaCBzZXR1cAorW0NoZWNrIDExXSBUZXN0IHBzYV9oYXNoX3VwZGF0ZSB3aXRoIGNvbXBsZXRlZCBvcGVydGFpb24gaGFuZGxlCitURVNUIFJFU1VMVDogUEFTU0VECisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitURVNUOiAyMTMgfCBERVNDUklQVElPTjogVGVzdGluZyBjcnlwdG8gaGFzaCBmdW5jdGlvbnMgQVBJcworW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUKK1tDaGVjayAxXSBUZXN0IHBzYV9oYXNoX3ZlcmlmeSB3aXRoIE1EMiBhbGdvcml0aG0KK1tDaGVjayAyXSBUZXN0IHBzYV9oYXNoX3ZlcmlmeSB3aXRoIE1ENCBhbGdvcml0aG0KK1tDaGVjayAzXSBUZXN0IHBzYV9oYXNoX3ZlcmlmeSB3aXRoIE1ENSBhbGdvcml0aG0KK1tDaGVjayA0XSBUZXN0IHBzYV9oYXNoX3ZlcmlmeSB3aXRoIFJJUEVNRDE2MCBhbGdvcml0aG0KK1tDaGVjayA1XSBUZXN0IHBzYV9oYXNoX3ZlcmlmeSB3aXRoIFNIQTEgYWxnb3JpdGhtCitbQ2hlY2sgNl0gVGVzdCBwc2FfaGFzaF92ZXJpZnkgd2l0aCBTSEEyMjQgYWxnb3JpdGhtCitbQ2hlY2sgN10gVGVzdCBwc2FfaGFzaF92ZXJpZnkgd2l0aCBTSEEyNTYgYWxnb3JpdGhtCitbQ2hlY2sgOF0gVGVzdCBwc2FfaGFzaF92ZXJpZnkgd2l0aCBTSEEzODQgYWxnb3JpdGhtCitbQ2hlY2sgOV0gVGVzdCBwc2FfaGFzaF92ZXJpZnkgd2l0aCBTSEE1MTIgYWxnb3JpdGhtCitbQ2hlY2sgMTBdIFRlc3QgcHNhX2hhc2hfdmVyaWZ5IHdpdGggaW5jb3JyZWN0IGV4cGVjdGVkIGhhc2gKK1tDaGVjayAxMV0gVGVzdCBwc2FfaGFzaF92ZXJpZnkgd2l0aCBpbmNvcnJlY3QgaGFzaCBsZW5ndGgKK1tDaGVjayAxMl0gdGVzdCBwc2FfaGFzaF92ZXJpZnkgd2l0aCBpbmFjdGl2ZSAmIGludmFsaWQgb3BlcmF0aW9uIGhhbmRsZQorVEVTVCBSRVNVTFQ6IFBBU1NFRAorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVEVTVDogMjE0IHwgREVTQ1JJUFRJT046IFRlc3RpbmcgY3J5cHRvIGhhc2ggZnVuY3Rpb25zIEFQSXMKK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlCitbQ2hlY2sgMV0gVGVzdCBwc2FfaGFzaF9maW5pc2ggd2l0aCBNRDIgYWxnb3JpdGhtCitbQ2hlY2sgMl0gVGVzdCBwc2FfaGFzaF9maW5pc2ggd2l0aCBNRDQgYWxnb3JpdGhtCitbQ2hlY2sgM10gVGVzdCBwc2FfaGFzaF9maW5pc2ggd2l0aCBNRDUgYWxnb3JpdGhtCitbQ2hlY2sgNF0gVGVzdCBwc2FfaGFzaF9maW5pc2ggd2l0aCBSSVBFTUQxNjAgYWxnb3JpdGhtCitbQ2hlY2sgNV0gVGVzdCBwc2FfaGFzaF9maW5pc2ggd2l0aCBTSEExIGFsZ29yaXRobQorW0NoZWNrIDZdIFRlc3QgcHNhX2hhc2hfZmluaXNoIHdpdGggU0hBMjI0IGFsZ29yaXRobQorW0NoZWNrIDddIFRlc3QgcHNhX2hhc2hfZmluaXNoIHdpdGggU0hBMjU2IGFsZ29yaXRobQorW0NoZWNrIDhdIFRlc3QgcHNhX2hhc2hfZmluaXNoIHdpdGggU0hBMzg0IGFsZ29yaXRobQorW0NoZWNrIDldIFRlc3QgcHNhX2hhc2hfZmluaXNoIHdpdGggU0hBNTEyIGFsZ29yaXRobQorW0NoZWNrIDEwXSB0ZXN0IHBzYV9oYXNoX2ZpbmlzaCB3aXRoIGluYWN0aXZlIG9wZXJhdGlvbiBoYW5kbGUKK1tDaGVjayAxMV0gdGVzdCBwc2FfaGFzaF9maW5pc2ggd2l0aCBpbnZhbGlkIGhhc2ggYnVmZmVyIHNpemUKK1RFU1QgUkVTVUxUOiBQQVNTRUQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RFU1Q6IDIxNSB8IERFU0NSSVBUSU9OOiBUZXN0aW5nIGNyeXB0byBoYXNoIGZ1bmN0aW9ucyBBUElzCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQorW0NoZWNrIDFdIFRlc3QgcHNhX2hhc2hfYWJvcnQgd2l0aCBNRDIgYWxnb3JpdGhtCitbQ2hlY2sgMl0gVGVzdCBwc2FfaGFzaF9hYm9ydCB3aXRoIE1ENCBhbGdvcml0aG0KK1tDaGVjayAzXSBUZXN0IHBzYV9oYXNoX2Fib3J0IHdpdGggTUQ1IGFsZ29yaXRobQorW0NoZWNrIDRdIFRlc3QgcHNhX2hhc2hfYWJvcnQgd2l0aCBSSVBFTUQxNjAgYWxnb3JpdGhtCitbQ2hlY2sgNV0gVGVzdCBwc2FfaGFzaF9hYm9ydCB3aXRoIFNIQTEgYWxnb3JpdGhtCitbQ2hlY2sgNl0gVGVzdCBwc2FfaGFzaF9hYm9ydCB3aXRoIFNIQTIyNCBhbGdvcml0aG0KK1tDaGVjayA3XSBUZXN0IHBzYV9oYXNoX2Fib3J0IHdpdGggU0hBMjU2IGFsZ29yaXRobQorW0NoZWNrIDhdIFRlc3QgcHNhX2hhc2hfYWJvcnQgd2l0aCBTSEEzODQgYWxnb3JpdGhtCitbQ2hlY2sgOV0gVGVzdCBwc2FfaGFzaF9hYm9ydCB3aXRoIFNIQTUxMiBhbGdvcml0aG0KK1tDaGVjayAxMF0gVGVzdCBwc2FfaGFzaF9maW5pc2ggYWZ0ZXIgY2FsbGluZyBwc2FfaGFzaF9hYm9ydAorVEVTVCBSRVNVTFQ6IFBBU1NFRAorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVEVTVDogMjE2IHwgREVTQ1JJUFRJT046IFRlc3RpbmcgY3J5cHRvIGdlbmVyYXRvciBmdW5jdGlvbnMgQVBJcworW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUKK1tDaGVjayAxXSBUZXN0IHBzYV9nZW5lcmF0ZV9rZXkgMTYgQnl0ZSBBRVMKK1tDaGVjayAyXSBUZXN0IHBzYV9nZW5lcmF0ZV9rZXkgMjQgQnl0ZSBBRVMKK1tDaGVjayAzXSBUZXN0IHBzYV9nZW5lcmF0ZV9rZXkgMzIgQnl0ZSBBRVMKK1tDaGVjayA0XSBUZXN0IHBzYV9nZW5lcmF0ZV9rZXkgd2l0aCBERVMgNjQgYml0IGtleQorW0NoZWNrIDVdIFRlc3QgcHNhX2dlbmVyYXRlX2tleSB3aXRoIFRyaXBsZSBERVMgMi1LZXkKK1tDaGVjayA2XSBUZXN0IHBzYV9nZW5lcmF0ZV9rZXkgd2l0aCBUcmlwbGUgREVTIDMtS2V5CitbQ2hlY2sgN10gVGVzdCBwc2FfZ2VuZXJhdGVfa2V5IHdpdGggTnVsbCBleHRyYSBhbmQgTm9uLVplcm8gZXh0cmEgc2l6ZQorW0NoZWNrIDhdIFRlc3QgcHNhX2dlbmVyYXRlX2tleSB3aXRoIEVDQyBLZXlQYWlyCitbQ2hlY2sgOV0gVGVzdCBwc2FfZ2VuZXJhdGVfa2V5IHdpdGggUlNBIDIwNDggUHVibGljIGtleQorW0NoZWNrIDEwXSBUZXN0IHBzYV9nZW5lcmF0ZV9rZXkgd2l0aCB1bmFsbG9jYXRlZCBrZXkgaGFuZGxlCitbQ2hlY2sgMTFdIFRlc3QgcHNhX2dlbmVyYXRlX2tleSB3aXRoIHplcm8gYXMga2V5IGhhbmRsZQorW0NoZWNrIDEyXSBUZXN0IHBzYV9nZW5lcmF0ZV9rZXkgd2l0aCBwcmUtb2NjdXBpZWQga2V5IGhhbmRsZQorW0NoZWNrIDEzXSBUZXN0IHBzYV9nZW5lcmF0ZV9rZXkgd2l0aCBkZXN0cm95ZWQga2V5IGhhbmRsZQorVEVTVCBSRVNVTFQ6IFBBU1NFRAorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVEVTVDogMjE3IHwgREVTQ1JJUFRJT046IFRlc3RpbmcgY3J5cHRvIGdlbmVyYXRvciBmdW5jdGlvbnMgQVBJcworW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUKK1tDaGVjayAxXSBUZXN0IHBzYV9nZW5lcmF0ZV9yYW5kb20gdG8gZ2V0IDAgQnl0ZSBkYXRhCitbQ2hlY2sgMl0gVGVzdCBwc2FfZ2VuZXJhdGVfcmFuZG9tIHRvIGdldCAxNiBCeXRlIGRhdGEKK1tDaGVjayAzXSBUZXN0IHBzYV9nZW5lcmF0ZV9yYW5kb20gdG8gZ2V0IDI0IEJ5dGUgZGF0YQorW0NoZWNrIDRdIFRlc3QgcHNhX2dlbmVyYXRlX3JhbmRvbSB0byBnZXQgMzIgQnl0ZSBkYXRhCitbQ2hlY2sgNV0gVGVzdCBwc2FfZ2VuZXJhdGVfcmFuZG9tIHRvIGdldCA2NCBCeXRlIGRhdGEKK1tDaGVjayA2XSBUZXN0IHBzYV9nZW5lcmF0ZV9yYW5kb20gdG8gZ2V0IDEyOCBCeXRlIGRhdGEKK1tDaGVjayA3XSBUZXN0IHBzYV9nZW5lcmF0ZV9yYW5kb20gdG8gZ2V0IDI1NiBCeXRlIGRhdGEKK1tDaGVjayA4XSBUZXN0IHBzYV9nZW5lcmF0ZV9yYW5kb20gdG8gZ2V0IDUxMiBCeXRlIGRhdGEKK1tDaGVjayA5XSBUZXN0IHBzYV9nZW5lcmF0ZV9yYW5kb20gdG8gZ2V0IDEwMDAgQnl0ZSBkYXRhCitURVNUIFJFU1VMVDogUEFTU0VECisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitURVNUOiAyMTggfCBERVNDUklQVElPTjogVGVzdGluZyBjcnlwdG8gZ2VuZXJhdG9yIGZ1bmN0aW9ucyBBUElzCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQorW0NoZWNrIDFdIFRlc3QgcHNhX2dlbmVyYXRvcl9yZWFkIHRvIGdldCAxNiBCeXRlIGRhdGEgd2l0aCBTSEEtMjU2CitbQ2hlY2sgMl0gVGVzdCBwc2FfZ2VuZXJhdG9yX3JlYWQgdG8gZ2V0IDMyIEJ5dGUgZGF0YSB3aXRoIFNIQS01MTIKK1tDaGVjayAzXSBUZXN0IHBzYV9nZW5lcmF0b3JfcmVhZCB0byBnZXQgOCBCeXRlIGRhdGEgd2l0aCBTSEEtMQorW0NoZWNrIDRdIFRlc3QgcHNhX2dlbmVyYXRvcl9yZWFkIHRvIHJlcXVlc3QgbWF4aW11bSBjYXBhY2l0eQorW0NoZWNrIDVdIFRlc3QgcHNhX2dlbmVyYXRvcl9yZWFkIHRvIHJlcXVlc3QgbWF4aW11bSBjYXBhY2l0eSArMQorW0NoZWNrIDZdIFRlc3QgcHNhX2dlbmVyYXRvcl9yZWFkIHdpdGhvdXQgc2V0dXAKK1RFU1QgUkVTVUxUOiBQQVNTRUQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RFU1Q6IDIxOSB8IERFU0NSSVBUSU9OOiBUZXN0aW5nIGNyeXB0byBnZW5lcmF0b3IgZnVuY3Rpb25zIEFQSXMKK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlCitbQ2hlY2sgMV0gVGVzdCBwc2FfZ2VuZXJhdG9yX2dldF9jYXBhY2l0eSB0byBnZXQgMTYgQnl0ZSBkYXRhIHdpdGggU0hBLTI1NgorW0NoZWNrIDJdIFRlc3QgcHNhX2dlbmVyYXRvcl9nZXRfY2FwYWNpdHkgdG8gZ2V0IDMyIEJ5dGUgZGF0YSB3aXRoIFNIQS01MTIKK1tDaGVjayAzXSBUZXN0IHBzYV9nZXRfZ2VuZXJhdG9yX2NhcGFjaXR5IHdpdGhvdXQgc2V0dXAKK1RFU1QgUkVTVUxUOiBQQVNTRUQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RFU1Q6IDIyMCB8IERFU0NSSVBUSU9OOiBUZXN0aW5nIGNyeXB0byBnZW5lcmF0b3IgZnVuY3Rpb25zIEFQSXMKK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlCitbQ2hlY2sgMV0gVGVzdCBwc2FfZ2VuZXJhdG9yX2ltcG9ydF9rZXkgZm9yIDE2IEJ5dGUgQUVTIEtleQorW0NoZWNrIDJdIFRlc3QgcHNhX2dlbmVyYXRvcl9pbXBvcnRfa2V5IGZvciBUcmlwbGUgREVTIDMtS2V5CitbQ2hlY2sgM10gVGVzdCBwc2FfZ2VuZXJhdG9yX2ltcG9ydF9rZXkgb3V0cHV0IGdyZWF0ZXIgdGhhbiBjYXBhY2l0eQorW0NoZWNrIDRdIFRlc3QgcHNhX2dlbmVyYXRvcl9pbXBvcnRfa2V5IGZvciBSU0EgUHVibGljIEtleSAtIEludmFsaWQgdHlwZQorW0NoZWNrIDVdIFRlc3QgcHNhX2dlbmVyYXRvcl9pbXBvcnRfa2V5IGZvciBpbnZhbGlkIGJ5dGUgZm9yIGdlbmVyYXRpb24KK1tDaGVjayA2XSBUZXN0IHBzYV9nZW5lcmF0b3JfaW1wb3J0X2tleSB3aXRoIGludmFsaWQgaGFuZGxlCitbQ2hlY2sgN10gVGVzdCBwc2FfZ2VuZXJhdG9yX2ltcG9ydF9rZXkgd2l0aCB6ZXJvIGhhbmRsZQorW0NoZWNrIDhdIFRlc3QgcHNhX2dlbmVyYXRvcl9pbXBvcnRfa2V5IHdpdGggcHJlLW9jY3VwaWVkIGtleSBzbG90CitURVNUIFJFU1VMVDogUEFTU0VECisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitURVNUOiAyMjEgfCBERVNDUklQVElPTjogVGVzdGluZyBjcnlwdG8gZ2VuZXJhdG9yIGZ1bmN0aW9ucyBBUElzCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQorW0NoZWNrIDFdIFRlc3QgcHNhX2dlbmVyYXRvcl9hYm9ydCBvbiBlbXB0eSBnZW5lcmF0b3IKK1tDaGVjayAyXSBUZXN0IHBzYV9nZW5lcmF0b3JfYWJvcnQKK1tDaGVjayAzXSBNdWx0aXBsZSBwc2FfZ2VuZXJhdG9yX2Fib3J0IHRlc3QKK1RFU1QgUkVTVUxUOiBQQVNTRUQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RFU1Q6IDIyMiB8IERFU0NSSVBUSU9OOiBUZXN0aW5nIGNyeXB0byBnZW5lcmF0b3IgZnVuY3Rpb25zIEFQSXMKK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlCitbQ2hlY2sgMV0gVGVzdCBwc2Ffa2V5X2Rlcml2YXRpb24gdG8gZ2V0IDE2IEJ5dGUgZGF0YSB3aXRoIFNIQS0yNTYKK1tDaGVjayAyXSBUZXN0IHBzYV9rZXlfZGVyaXZhdGlvbiB0byBnZXQgMzIgQnl0ZSBkYXRhIHdpdGggU0hBLTUxMgorW0NoZWNrIDNdIFRlc3QgcHNhX2tleV9kZXJpdmF0aW9uIHRvIGdldCAzMiBCeXRlIGRhdGEgd2l0aCBNRC01CitbQ2hlY2sgNF0gVGVzdCBwc2Ffa2V5X2Rlcml2YXRpb24gdG8gZ2V0IDE2IEJ5dGUgZGF0YSB3aXRoIHNhbHQgYW5kIGxhYmVsCitbQ2hlY2sgNV0gVGVzdCBwc2Ffa2V5X2Rlcml2YXRpb24gd2l0aCB0b28gbGFyZ2UgY2FwYWNpdHkgZm9yIGFsZyBhbmQga2V5CitbQ2hlY2sgNl0gVGVzdCBwc2Ffa2V5X2Rlcml2YXRpb24gd2l0aCB1bnN1cHBvcnRlZCBrZXkgdHlwZQorW0NoZWNrIDddIFRlc3QgcHNhX2tleV9kZXJpdmF0aW9uIHdpdGggaW5jb3JyZWN0IHVzYWdlCitbQ2hlY2sgOF0gVGVzdCBwc2Ffa2V5X2Rlcml2YXRpb24gd2l0aCB1bnN1cHBvcnRlZCBrZXkgZGVyaXZhdGlvbiBhbGdvcml0aG0KK1tDaGVjayA5XSBUZXN0IHBzYV9rZXlfZGVyaXZhdGlvbiB3aXRoIGludmFsaWQgYWxnb3JpdGhtCitbQ2hlY2sgMTBdIFRlc3QgcHNhX2tleV9kZXJpdmF0aW9uIHdpdGggSW52YWxpZCBrZXkgaGFuZGxlCitbQ2hlY2sgMTFdIFRlc3QgcHNhX2tleV9kZXJpdmF0aW9uIHdpdGggWmVybyBhcyBrZXkgaGFuZGxlCitbQ2hlY2sgMTJdIFRlc3QgcHNhX2tleV9kZXJpdmF0aW9uIHdpdGggRW1wdHkga2V5IGhhbmRsZQorVEVTVCBSRVNVTFQ6IFBBU1NFRAorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVEVTVDogMjIzIHwgREVTQ1JJUFRJT046IFRlc3RpbmcgY3J5cHRvIGtleSBtYW5hZ2VtZW50IEFQSXMKK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlCitbQ2hlY2sgMV0gVGVzdCBwc2Ffa2V5X3BvbGljeV9nZXRfdXNhZ2Ugd2l0aCB1c2FnZSBhcyBlbmNyeXB0CitbQ2hlY2sgMl0gVGVzdCBwc2Ffa2V5X3BvbGljeV9nZXRfdXNhZ2Ugd2l0aCB1c2FnZSBhcyBkZWNyeXB0CitbQ2hlY2sgM10gVGVzdCBwc2Ffa2V5X3BvbGljeV9nZXRfdXNhZ2Ugd2l0aCB1c2FnZSBhcyBkZXJpdmUKK1tDaGVjayA0XSBUZXN0IHBzYV9rZXlfcG9saWN5X2dldF91c2FnZSB3aXRoIHVzYWdlIGFzIGV4cG9ydAorW0NoZWNrIDVdIFRlc3QgcHNhX2tleV9wb2xpY3lfZ2V0X3VzYWdlIHdpdGggdXNhZ2UgYXMgc2lnbgorW0NoZWNrIDZdIFRlc3QgcHNhX2tleV9wb2xpY3lfZ2V0X3VzYWdlIHdpdGggdXNhZ2UgYXMgdmVyaWZ5CitURVNUIFJFU1VMVDogUEFTU0VECisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitURVNUOiAyMjQgfCBERVNDUklQVElPTjogVGVzdGluZyBjcnlwdG8gQUVBRCBBUElzCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQorW0NoZWNrIDFdIFRlc3QgcHNhX2FlYWRfZW5jcnlwdCAtIENDTSAtIDE2QiBBRVMgLSAxM0Igbm91bmNlICYgOEIgYWRkaSBkYXRhCitbQ2hlY2sgMl0gVGVzdCBwc2FfYWVhZF9lbmNyeXB0IC0gQUVTLUNDTQorW0NoZWNrIDNdIFRlc3QgcHNhX2FlYWRfZW5jcnlwdCAtIEFFUy1DQ00gMjQgYnl0ZXMgVGFnIGxlbmd0aCA9IDQKK1tDaGVjayA0XSBUZXN0IHBzYV9hZWFkX2VuY3J5cHQgLSBHQ00gLSAxNkIgQUVTIC0gMTJCIE5vdW5jZSAmIDEyQiBhZGRpIGRhdGEKK1tDaGVjayA1XSBUZXN0IHBzYV9hZWFkX2VuY3J5cHQgLSBERVMgS2V5CitbQ2hlY2sgNl0gVGVzdCBwc2FfYWVhZF9lbmNyeXB0IC0gVW5zdXBwb3J0ZWQgQWxnb3JpdGhtCitbQ2hlY2sgN10gVGVzdCBwc2FfYWVhZF9lbmNyeXB0IC0gSW52YWxpZCBrZXkgdXNhZ2UKK1tDaGVjayA4XSBUZXN0IHBzYV9hZWFkX2VuY3J5cHQgLSBTbWFsbCBvdXRwdXQgYnVmZmVyIHNpemUKK1tDaGVjayA5XSBUZXN0IHBzYV9hZWFkX2VuY3J5cHQgLSBJbnZhbGlkIGtleSBoYW5kbGUKK1tDaGVjayAxMF0gVGVzdCBwc2FfYWVhZF9lbmNyeXB0IC0gWmVybyBhcyBrZXkgaGFuZGxlCitbQ2hlY2sgMTFdIFRlc3QgcHNhX2FlYWRfZW5jcnlwdCAtIEVtcHR5IGtleSBoYW5kbGUKK1RFU1QgUkVTVUxUOiBQQVNTRUQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RFU1Q6IDIyNSB8IERFU0NSSVBUSU9OOiBUZXN0aW5nIGNyeXB0byBBRUFEIEFQSXMKK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlCitbQ2hlY2sgMV0gVGVzdCBwc2FfYWVhZF9kZWNyeXB0IC0gQ0NNIC0gMTZCIEFFUyAtIDEzQiBub3VuY2UgJiA4QiBhZGRpIGRhdGEKK1tDaGVjayAyXSBUZXN0IHBzYV9hZWFkX2VuY3J5cHQgLSBBRVMtQ0NNCitbQ2hlY2sgM10gVGVzdCBwc2FfYWVhZF9lbmNyeXB0IC0gQUVTLUNDTSAyNCBieXRlcyBUYWcgbGVuZ3RoID0gNAorW0NoZWNrIDRdIFRlc3QgcHNhX2FlYWRfZGVjcnlwdCAtIEdDTSAtIDE2QiBBRVMgLSAxMkIgTm91bmNlICYgMTJCIGFkZGkgZGF0YQorW0NoZWNrIDVdIFRlc3QgcHNhX2FlYWRfZGVjcnlwdCAtIERFUyBLZXkKK1tDaGVjayA2XSBUZXN0IHBzYV9hZWFkX2RlY3J5cHQgLSBVbnN1cHBvcnRlZCBBbGdvcml0aG0KK1tDaGVjayA3XSBUZXN0IHBzYV9hZWFkX2RlY3J5cHQgLSBJbnZhbGlkIGtleSB1c2FnZQorW0NoZWNrIDhdIFRlc3QgcHNhX2FlYWRfZGVjcnlwdCAtIFNtYWxsIG91dHB1dCBidWZmZXIgc2l6ZQorW0NoZWNrIDldIFRlc3QgcHNhX2FlYWRfZGVjcnlwdCAtIEludmFsaWQgY2lwaGVyIHRleHQKK1tDaGVjayAxMF0gVGVzdCBwc2FfYWVhZF9kZWNyeXB0IC0gSW52YWxpZCBjaXBoZXIgdGV4dCBzaXplCitbQ2hlY2sgMTFdIFRlc3QgcHNhX2FlYWRfZGVjcnlwdCAtIEludmFsaWQgdGFnIGxlbmd0aCAwCitbQ2hlY2sgMTJdIFRlc3QgcHNhX2FlYWRfZGVjcnlwdCAtIEludmFsaWQga2V5IGhhbmRsZQorW0NoZWNrIDEzXSBUZXN0IHBzYV9hZWFkX2RlY3J5cHQgLSBaZXJvIGFzIGtleSBoYW5kbGUKK1tDaGVjayAxNF0gVGVzdCBwc2FfYWVhZF9kZWNyeXB0IC0gRW1wdHkga2V5IGhhbmRsZQorVEVTVCBSRVNVTFQ6IFBBU1NFRAorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVEVTVDogMjI2IHwgREVTQ1JJUFRJT046IFRlc3RpbmcgY3J5cHRvIE1BQyBBUElzCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQorW0NoZWNrIDFdIFRlc3QgcHNhX21hY19zaWduX3NldHVwIDY0IEJ5dGUgSE1BQworW0NoZWNrIDJdIFRlc3QgcHNhX21hY19zaWduX3NldHVwIDE2IEJ5dGUgQUVTIC0gQ01BQworW0NoZWNrIDNdIFRlc3QgcHNhX21hY19zaWduX3NldHVwIDE2IEJ5dGUgQUVTIC0gR01BQworW0NoZWNrIDRdIFRlc3QgcHNhX21hY19zaWduX3NldHVwIGluY29tcGFjdGlibGUgSE1BQyBmb3IgQ01BQworW0NoZWNrIDVdIFRlc3QgcHNhX21hY19zaWduX3NldHVwIGludmFsaWQgdXNhZ2UKK1tDaGVjayA2XSBUZXN0IHBzYV9tYWNfc2lnbl9zZXR1cCBpbnZhbGlkIGtleSB0eXBlCitbQ2hlY2sgN10gVGVzdCBwc2FfbWFjX3NpZ25fc2V0dXAgdHJ1bmNhdGVkIE1BQyB0b28gbGFyZ2UKK1tDaGVjayA4XSBUZXN0IHBzYV9tYWNfc2lnbl9zZXR1cCB0cnVuY2F0ZWQgTUFDIHRvbyBzbWFsbAorW0NoZWNrIDldIFRlc3QgcHNhX21hY19zaWduX3NldHVwIGJhZCBhbGdvcml0aG0gKHVua25vd24gTUFDIGFsZ29yaXRobSkKK1tDaGVjayAxMF0gVGVzdCBwc2FfbWFjX3NpZ25fc2V0dXAgYmFkIGFsZ29yaXRobSAobm90IGEgTUFDIGFsZ29yaXRobSkKK1tDaGVjayAxMV0gVGVzdCBwc2FfbWFjX3NpZ25fc2V0dXAgd2l0aCBpbnZhbGlkIGtleSBoYW5kbGUKK1tDaGVjayAxMl0gVGVzdCBwc2FfbWFjX3NpZ25fc2V0dXAgd2l0aCB6ZXJvIGtleSBoYW5kbGUKK1tDaGVjayAxM10gVGVzdCBwc2FfbWFjX3NpZ25fc2V0dXAgd2l0aCBlbXB0eSBrZXkgaGFuZGxlCitURVNUIFJFU1VMVDogUEFTU0VECisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitURVNUOiAyMjcgfCBERVNDUklQVElPTjogVGVzdGluZyBjcnlwdG8gTUFDIEFQSXMKK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlCitbQ2hlY2sgMV0gVGVzdCBwc2FfbWFjX3VwZGF0ZSA2NCBCeXRlIEhNQUMgU0hBMjU2CitbQ2hlY2sgMl0gVGVzdCBwc2FfbWFjX3VwZGF0ZSAxNiBCeXRlIEFFUyAtIENNQUMKK1tDaGVjayAzXSBUZXN0IHBzYV9tYWNfdXBkYXRlIDMyIEJ5dGUgSE1BQyBTSEE1MTIKK1tDaGVjayA0XSBUZXN0IHBzYV9tYWNfdXBkYXRlIHdpdGhvdXQgbWFjIHNldHVwCitURVNUIFJFU1VMVDogUEFTU0VECisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitURVNUOiAyMjggfCBERVNDUklQVElPTjogVGVzdGluZyBjcnlwdG8gTUFDIEFQSXMKK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlCitbQ2hlY2sgMV0gVGVzdCBwc2FfbWFjX3NpZ25fZmluaXNoIEhNQUMgU0hBIDIyNAorW0NoZWNrIDJdIFRlc3QgcHNhX21hY19zaWduX2ZpbmlzaCBITUFDIFNIQSAyNTYKK1tDaGVjayAzXSBUZXN0IHBzYV9tYWNfc2lnbl9maW5pc2ggSE1BQyBTSEEgNTEyCitbQ2hlY2sgNF0gVGVzdCBwc2FfbWFjX3NpZ25fZmluaXNoIEhNQUMgU0hBIDIyNCAodHJ1bmNhdGVkIHRvIDggQnl0ZSkKK1tDaGVjayA1XSBUZXN0IHBzYV9tYWNfc2lnbl9maW5pc2ggQ01BQyBBRVMgMTI4CitbQ2hlY2sgNl0gVGVzdCBwc2FfbWFjX3NpZ25fZmluaXNoIHNtYWxsIHNpemUgYnVmZmVyCitURVNUIFJFU1VMVDogUEFTU0VECisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitURVNUOiAyMjkgfCBERVNDUklQVElPTjogVGVzdGluZyBjcnlwdG8gTUFDIEFQSXMKK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlCitbQ2hlY2sgMV0gVGVzdCBwc2FfbWFjX3ZlcmlmeV9zZXR1cCA2NCBCeXRlIEhNQUMKK1tDaGVjayAyXSBUZXN0IHBzYV9tYWNfdmVyaWZ5X3NldHVwIDE2IEJ5dGUgQUVTIC0gQ01BQworW0NoZWNrIDNdIFRlc3QgcHNhX21hY192ZXJpZnlfc2V0dXAgMTYgQnl0ZSBBRVMgLSBHTUFDCitbQ2hlY2sgNF0gVGVzdCBwc2FfbWFjX3ZlcmlmeV9zZXR1cCBpbmNvbXBhY3RpYmxlIEhNQUMgZm9yIENNQUMKK1tDaGVjayA1XSBUZXN0IHBzYV9tYWNfdmVyaWZ5X3NldHVwIGludmFsaWQgdXNhZ2UKK1tDaGVjayA2XSBUZXN0IHBzYV9tYWNfdmVyaWZ5X3NldHVwIGludmFsaWQga2V5IHR5cGUKK1tDaGVjayA3XSBUZXN0IHBzYV9tYWNfdmVyaWZ5X3NldHVwIHRydW5jYXRlZCBNQUMgdG9vIGxhcmdlCitbQ2hlY2sgOF0gVGVzdCBwc2FfbWFjX3ZlcmlmeV9zZXR1cCB0cnVuY2F0ZWQgTUFDIHRvbyBzbWFsbAorW0NoZWNrIDldIFRlc3QgcHNhX21hY192ZXJpZnlfc2V0dXAgYmFkIGFsZ29yaXRobSAodW5rbm93biBNQUMgYWxnb3JpdGhtKQorW0NoZWNrIDEwXSBUZXN0IHBzYV9tYWNfdmVyaWZ5X3NldHVwIGJhZCBhbGdvcml0aG0gKG5vdCBhIE1BQyBhbGdvcml0aG0pCitbQ2hlY2sgMTFdIFRlc3QgcHNhX21hY192ZXJpZnlfc2V0dXAgaW52YWxpZCBrZXkgaGFuZGxlCitbQ2hlY2sgMTJdIFRlc3QgcHNhX21hY192ZXJpZnlfc2V0dXAgemVybyBhcyBrZXkgaGFuZGxlCitbQ2hlY2sgMTNdIFRlc3QgcHNhX21hY192ZXJpZnlfc2V0dXAgZW1wdHkga2V5IGhhbmRsZQorVEVTVCBSRVNVTFQ6IFBBU1NFRAorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVEVTVDogMjMwIHwgREVTQ1JJUFRJT046IFRlc3RpbmcgY3J5cHRvIE1BQyBBUElzCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQorW0NoZWNrIDFdIFRlc3QgcHNhX21hY192ZXJpZnlfZmluaXNoIEhNQUMgU0hBIDIyNAorW0NoZWNrIDJdIFRlc3QgcHNhX21hY192ZXJpZnlfZmluaXNoIEhNQUMgU0hBIDI1NgorW0NoZWNrIDNdIFRlc3QgcHNhX21hY192ZXJpZnlfZmluaXNoIEhNQUMgU0hBIDUxMgorW0NoZWNrIDRdIFRlc3QgcHNhX21hY192ZXJpZnlfZmluaXNoIEhNQUMgU0hBIDIyNCAodHJ1bmNhdGVkIHRvIDggQnl0ZSkKK1tDaGVjayA1XSBUZXN0IHBzYV9tYWNfdmVyaWZ5X2ZpbmlzaCBDTUFDIEFFUyAxMjgKK1tDaGVjayA2XSBUZXN0IHBzYV9tYWNfdmVyaWZ5X2ZpbmlzaCBzbWFsbCBzaXplIGJ1ZmZlcgorW0NoZWNrIDddIFRlc3QgcHNhX21hY192ZXJpZnlfZmluaXNoIGluY29ycmVjdCBleHBlY3RlZCBNQUMKK1RFU1QgUkVTVUxUOiBQQVNTRUQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RFU1Q6IDIzMSB8IERFU0NSSVBUSU9OOiBUZXN0aW5nIGNyeXB0byBNQUMgQVBJcworW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUKK1tDaGVjayAxXSBUZXN0IHBzYV9tYWNfYWJvcnQgSE1BQyBTSEEgMjI0CitbQ2hlY2sgMl0gVGVzdCBwc2FfbWFjX2Fib3J0IEhNQUMgU0hBIDI1NgorW0NoZWNrIDNdIFRlc3QgcHNhX21hY19hYm9ydCBITUFDIFNIQSA1MTIKK1tDaGVjayA0XSBUZXN0IHBzYV9tYWNfYWJvcnQgSE1BQyBTSEEgMjI0ICh0cnVuY2F0ZWQgdG8gOCBCeXRlKQorW0NoZWNrIDVdIFRlc3QgcHNhX21hY19hYm9ydCBDTUFDIEFFUyAxMjgKK1tDaGVjayA2XSBUZXN0IHBzYV9tYWNfc2lnbl9maW5pc2ggYWZ0ZXIgY2FsbGluZyBwc2FfbWFjX2Fib3J0CitURVNUIFJFU1VMVDogUEFTU0VECisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitURVNUOiAyMzIgfCBERVNDUklQVElPTjogVGVzdGluZyBjcnlwdG8gc3ltbWV0cmljIGNpcGhlciBBUElzCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQorW0NoZWNrIDFdIFRlc3QgcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwIDE2IEJ5dGUgQUVTCitbQ2hlY2sgMl0gVGVzdCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAgMjQgQnl0ZSBBRVMKK1tDaGVjayAzXSBUZXN0IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCAzMiBCeXRlIEFFUworW0NoZWNrIDRdIFRlc3QgcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwIERFUyA2NCBiaXQga2V5CitbQ2hlY2sgNV0gVGVzdCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAgVHJpcGxlIERFUyAyLUtleQorW0NoZWNrIDZdIFRlc3QgcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwIFRyaXBsZSBERVMgMy1LZXkKK1tDaGVjayA3XSBUZXN0IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCAxNiBCeXRlIHJhdyBkYXRhCitbQ2hlY2sgOF0gVGVzdCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAgLSBub3QgYSBjaXBoZXIgYWxnb3JpdGhtCitbQ2hlY2sgOV0gVGVzdCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAgLSB1bmtub3duIGNpcGhlciBhbGdvcml0aG0KK1tDaGVjayAxMF0gVGVzdCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAgLSBpbmNvbXBhdGlibGUga2V5IEFSQzQKK1tDaGVjayAxMV0gVGVzdCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAgLSBpbmNvcnJlY3QgdXNhZ2UKK1tDaGVjayAxMl0gVGVzdCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAgLSBSU0EgcHVibGljIGtleQorW0NoZWNrIDEzXSBUZXN0IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCAtIFJTQSBrZXlwYWlyCitbQ2hlY2sgMTRdIFRlc3QgcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwIC0gRUMgUHVibGljIGtleQorW0NoZWNrIDE1XSBUZXN0IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCAtIEVDIGtleXBhaXIKK1tDaGVjayAxNl0gVGVzdCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAgLSBJbnZhbGlkIGtleSBoYW5kbGUKK1tDaGVjayAxN10gVGVzdCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAgLSBaZXJvIGFzIGtleSBoYW5kbGUKK1tDaGVjayAxOF0gVGVzdCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAgLSBFbXB0eSBrZXkgaGFuZGxlCitURVNUIFJFU1VMVDogUEFTU0VECisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitURVNUOiAyMzMgfCBERVNDUklQVElPTjogVGVzdGluZyBjcnlwdG8gc3ltbWV0cmljIGNpcGhlciBBUElzCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQorW0NoZWNrIDFdIFRlc3QgcHNhX2NpcGhlcl9kZWNyeXB0X3NldHVwIDE2IEJ5dGUgQUVTCitbQ2hlY2sgMl0gVGVzdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAgMjQgQnl0ZSBBRVMKK1tDaGVjayAzXSBUZXN0IHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCAzMiBCeXRlIEFFUworW0NoZWNrIDRdIFRlc3QgcHNhX2NpcGhlcl9kZWNyeXB0X3NldHVwIERFUyA2NCBiaXQga2V5CitbQ2hlY2sgNV0gVGVzdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAgVHJpcGxlIERFUyAyLUtleQorW0NoZWNrIDZdIFRlc3QgcHNhX2NpcGhlcl9kZWNyeXB0X3NldHVwIFRyaXBsZSBERVMgMy1LZXkKK1tDaGVjayA3XSBUZXN0IHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCAxNiBCeXRlIHJhdyBkYXRhCitbQ2hlY2sgOF0gVGVzdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAgLSBub3QgYSBjaXBoZXIgYWxnb3JpdGhtCitbQ2hlY2sgOV0gVGVzdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAgLSB1bmtub3duIGNpcGhlciBhbGdvcml0aG0KK1tDaGVjayAxMF0gVGVzdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAgLSBpbmNvbXBhdGlibGUga2V5IEFSQzQKK1tDaGVjayAxMV0gVGVzdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAgLSBpbmNvcnJlY3QgdXNhZ2UKK1tDaGVjayAxMl0gVGVzdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAgLSBSU0EgcHVibGljIGtleQorW0NoZWNrIDEzXSBUZXN0IHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCAtIFJTQSBrZXlwYWlyCitbQ2hlY2sgMTRdIFRlc3QgcHNhX2NpcGhlcl9kZWNyeXB0X3NldHVwIC0gRUMgUHVibGljIGtleQorW0NoZWNrIDE1XSBUZXN0IHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCAtIEVDIGtleXBhaXIKK1tDaGVjayAxNl0gVGVzdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAgLSBJbnZhbGlkIGtleSBoYW5kbGUKK1tDaGVjayAxN10gVGVzdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAgLSBaZXJvIGFzIGtleSBoYW5kbGUKK1tDaGVjayAxOF0gVGVzdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAgLSBFbXB0eSBrZXkgaGFuZGxlCitURVNUIFJFU1VMVDogUEFTU0VECisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitURVNUOiAyMzQgfCBERVNDUklQVElPTjogVGVzdGluZyBjcnlwdG8gc3ltbWV0cmljIGNpcGhlciBBUElzCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQorW0NoZWNrIDFdIFRlc3QgcHNhX2NpcGhlcl9nZW5lcmF0ZV9pdiAxNiBCeXRlIEFFUworW0NoZWNrIDJdIFRlc3QgcHNhX2NpcGhlcl9nZW5lcmF0ZV9pdiAyNCBCeXRlIEFFUworW0NoZWNrIDNdIFRlc3QgcHNhX2NpcGhlcl9nZW5lcmF0ZV9pdiAzMiBCeXRlIEFFUworW0NoZWNrIDRdIFRlc3QgcHNhX2NpcGhlcl9nZW5lcmF0ZV9pdiBERVMgNjQgYml0IGtleQorW0NoZWNrIDVdIFRlc3QgcHNhX2NpcGhlcl9nZW5lcmF0ZV9pdiBUcmlwbGUgREVTIDItS2V5CitbQ2hlY2sgNl0gVGVzdCBwc2FfY2lwaGVyX2dlbmVyYXRlX2l2IFRyaXBsZSBERVMgMy1LZXkKK1tDaGVjayA3XSBUZXN0IHBzYV9jaXBoZXJfZ2VuZXJhdGVfaXYgQUVTIC0gc21hbGwgaXYgYnVmZmVyCitbQ2hlY2sgOF0gVGVzdCBwc2FfY2lwaGVyX2dlbmVyYXRlX2l2IERFUyAtIHNtYWxsIGl2IGJ1ZmZlcgorW0NoZWNrIDldIFRlc3QgcHNhX2NpcGhlcl9nZW5lcmF0ZV9pdiBBRVMgLSBsYXJnZSBpdiBidWZmZXIKK1tDaGVjayAxMF0gVGVzdCBwc2FfY2lwaGVyX2dlbmVyYXRlX2l2IERFUyAtIGxhcmdlIGl2IGJ1ZmZlcgorVEVTVCBSRVNVTFQ6IFBBU1NFRAorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVEVTVDogMjM1IHwgREVTQ1JJUFRJT046IFRlc3RpbmcgY3J5cHRvIHN5bW1ldHJpYyBjaXBoZXIgQVBJcworW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUKK1tDaGVjayAxXSBUZXN0IHBzYV9jaXBoZXJfc2V0X2l2IDE2IEJ5dGUgQUVTCitbQ2hlY2sgMl0gVGVzdCBwc2FfY2lwaGVyX3NldF9pdiAyNCBCeXRlIEFFUworW0NoZWNrIDNdIFRlc3QgcHNhX2NpcGhlcl9zZXRfaXYgMzIgQnl0ZSBBRVMKK1tDaGVjayA0XSBUZXN0IHBzYV9jaXBoZXJfc2V0X2l2IERFUyA2NCBiaXQga2V5CitbQ2hlY2sgNV0gVGVzdCBwc2FfY2lwaGVyX3NldF9pdiBUcmlwbGUgREVTIDItS2V5CitbQ2hlY2sgNl0gVGVzdCBwc2FfY2lwaGVyX3NldF9pdiBUcmlwbGUgREVTIDMtS2V5CitbQ2hlY2sgN10gVGVzdCBwc2FfY2lwaGVyX3NldF9pdiBBRVMgLSBzbWFsbCBpdiBidWZmZXIKK1tDaGVjayA4XSBUZXN0IHBzYV9jaXBoZXJfc2V0X2l2IERFUyAtIHNtYWxsIGl2IGJ1ZmZlcgorW0NoZWNrIDldIFRlc3QgcHNhX2NpcGhlcl9zZXRfaXYgQUVTIC0gbGFyZ2UgaXYgYnVmZmVyCitbQ2hlY2sgMTBdIFRlc3QgcHNhX2NpcGhlcl9zZXRfaXYgREVTIC0gbGFyZ2UgaXYgYnVmZmVyCitURVNUIFJFU1VMVDogUEFTU0VECisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitURVNUOiAyMzYgfCBERVNDUklQVElPTjogVGVzdGluZyBjcnlwdG8gc3ltbWV0cmljIGNpcGhlciBBUElzCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQorW0NoZWNrIDFdIFRlc3QgcHNhX2NpcGhlcl91cGRhdGUgLSBFbmNyeXB0IC0gQUVTIENCQ19OT19QQURESU5HCitbQ2hlY2sgMl0gVGVzdCBwc2FfY2lwaGVyX3VwZGF0ZSAtIEVuY3J5cHQgLSBBRVMgQ0JDX05PX1BBRERJTkcgKFNob3J0IGlucHV0KQorW0NoZWNrIDNdIFRlc3QgcHNhX2NpcGhlcl91cGRhdGUgLSBFbmNyeXB0IC0gQUVTIENCQ19QS0NTNworW0NoZWNrIDRdIFRlc3QgcHNhX2NpcGhlcl91cGRhdGUgLSBFbmNyeXB0IC0gQUVTIENCQ19QS0NTNyAoU2hvcnQgaW5wdXQpCitbQ2hlY2sgNV0gVGVzdCBwc2FfY2lwaGVyX3VwZGF0ZSAtIEVuY3J5cHQgLSBBRVMgQ1RSCitbQ2hlY2sgNl0gVGVzdCBwc2FfY2lwaGVyX3VwZGF0ZSAtIEVuY3J5cHQgLSBERVMgQ0JDIChub3BhZCkKK1tDaGVjayA3XSBUZXN0IHBzYV9jaXBoZXJfdXBkYXRlIC0gRW5jcnlwdCAtIDIta2V5IDNERSAtQ0JDIChub3BhZCkKK1tDaGVjayA4XSBUZXN0IHBzYV9jaXBoZXJfdXBkYXRlIC0gRW5jcnlwdCAtIDMta2V5IDNERSAtQ0JDIChub3BhZCkKK1tDaGVjayA5XSBUZXN0IHBzYV9jaXBoZXJfdXBkYXRlIC0gc21hbGwgb3V0cHV0IGJ1ZmZlciBzaXplCitbQ2hlY2sgMTBdIFRlc3QgcHNhX2NpcGhlcl91cGRhdGUgLSBEZWNyeXB0IC0gQUVTIENCQ19OT19QQURESU5HCitbQ2hlY2sgMTFdIFRlc3QgcHNhX2NpcGhlcl91cGRhdGUgLSBEZWNyeXB0IC0gQUVTIENCQ19OT19QQURESU5HIChTaG9ydCBpbnB1dCkKK1tDaGVjayAxMl0gVGVzdCBwc2FfY2lwaGVyX3VwZGF0ZSAtIERlY3J5cHQgLSBBRVMgQ0JDX1BLQ1M3CitbQ2hlY2sgMTNdIFRlc3QgcHNhX2NpcGhlcl91cGRhdGUgLSBEZWNyeXB0IC0gQUVTIENCQ19QS0NTNyAoU2hvcnQgaW5wdXQpCitbQ2hlY2sgMTRdIFRlc3QgcHNhX2NpcGhlcl91cGRhdGUgLSBEZWNyeXB0IC0gQUVTIENUUgorW0NoZWNrIDE1XSBUZXN0IHBzYV9jaXBoZXJfdXBkYXRlIC0gRGVjcnlwdCAtIERFUyBDQkMgKG5vcGFkKQorW0NoZWNrIDE2XSBUZXN0IHBzYV9jaXBoZXJfdXBkYXRlIC0gRGVjcnlwdCAtIDIta2V5IDNERSAtQ0JDIChub3BhZCkKK1tDaGVjayAxN10gVGVzdCBwc2FfY2lwaGVyX3VwZGF0ZSAtIERlY3J5cHQgLSAzLWtleSAzREUgLUNCQyAobm9wYWQpCitbQ2hlY2sgMThdIFRlc3QgcHNhX2NpcGhlcl91cGRhdGUgd2l0aG91dCBjaXBoZXIgc2V0dXAKK1RFU1QgUkVTVUxUOiBQQVNTRUQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RFU1Q6IDIzNyB8IERFU0NSSVBUSU9OOiBUZXN0aW5nIGNyeXB0byBzeW1tZXRyaWMgY2lwaGVyIEFQSXMKK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlCitbQ2hlY2sgMV0gVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIEVuY3J5cHQgLSBBRVMgQ0JDX05PX1BBRERJTkcKK1tDaGVjayAyXSBUZXN0IHBzYV9jaXBoZXJfZmluaXNoIC0gRW5jcnlwdCAtIEFFUyBDQkNfTk9fUEFERElORyAoU2hvcnQgaW5wdXQpCitbQ2hlY2sgM10gVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIEVuY3J5cHQgLSBBRVMgQ0JDX1BLQ1M3CitbQ2hlY2sgNF0gVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIEVuY3J5cHQgLSBBRVMgQ0JDX1BLQ1M3IChTaG9ydCBpbnB1dCkKK1tDaGVjayA1XSBUZXN0IHBzYV9jaXBoZXJfZmluaXNoIC0gRW5jcnlwdCAtIEFFUyBDVFIKK1tDaGVjayA2XSBUZXN0IHBzYV9jaXBoZXJfZmluaXNoIC0gRW5jcnlwdCAtIEFFUyBDVFIgKHNob3J0IGlucHV0KQorW0NoZWNrIDddIFRlc3QgcHNhX2NpcGhlcl9maW5pc2ggLSBFbmNyeXB0IC0gREVTIENCQyAobm9wYWQpCitbQ2hlY2sgOF0gVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIEVuY3J5cHQgLSAyLWtleSAzREUgLUNCQyAobm9wYWQpCitbQ2hlY2sgOV0gVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIEVuY3J5cHQgLSAzLWtleSAzREUgLUNCQyAobm9wYWQpCitbQ2hlY2sgMTBdIFRlc3QgcHNhX2NpcGhlcl9maW5pc2ggLSBzbWFsbCBvdXRwdXQgYnVmZmVyIHNpemUKK1tDaGVjayAxMV0gVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIERlY3J5cHQgLSBBRVMgQ0JDX05PX1BBRERJTkcKK1tDaGVjayAxMl0gVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIERlY3J5cHQgLSBBRVMgQ0JDX05PX1BBRERJTkcgKFNob3J0IGlucHV0KQorW0NoZWNrIDEzXSBUZXN0IHBzYV9jaXBoZXJfZmluaXNoIC0gRGVjcnlwdCAtIEFFUyBDQkNfUEtDUzcKK1tDaGVjayAxNF0gVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIERlY3J5cHQgLSBBRVMgQ0JDX1BLQ1M3IChTaG9ydCBpbnB1dCkKK1tDaGVjayAxNV0gVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIERlY3J5cHQgLSBBRVMgQ1RSCitbQ2hlY2sgMTZdIFRlc3QgcHNhX2NpcGhlcl9maW5pc2ggLSBEZWNyeXB0IC0gQUVTIENUUiAoc2hvcnQgaW5wdXQpCitbQ2hlY2sgMTddIFRlc3QgcHNhX2NpcGhlcl9maW5pc2ggLSBEZWNyeXB0IC0gREVTIENCQyAobm9wYWQpCitbQ2hlY2sgMThdIFRlc3QgcHNhX2NpcGhlcl9maW5pc2ggLSBEZWNyeXB0IC0gMi1rZXkgM0RFIC1DQkMgKG5vcGFkKQorW0NoZWNrIDE5XSBUZXN0IHBzYV9jaXBoZXJfZmluaXNoIC0gMy1rZXkgM0RFIC1DQkMgKG5vcGFkKQorVEVTVCBSRVNVTFQ6IFBBU1NFRAorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVEVTVDogMjM4IHwgREVTQ1JJUFRJT046IFRlc3RpbmcgY3J5cHRvIHN5bW1ldHJpYyBjaXBoZXIgQVBJcworW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUKK1tDaGVjayAxXSBUZXN0IHBzYV9jaXBoZXJfYWJvcnQgLSBFbmNyeXB0IC0gQUVTIENCQ19OT19QQURESU5HCitbQ2hlY2sgMl0gVGVzdCBwc2FfY2lwaGVyX2Fib3J0IC0gRW5jcnlwdCAtIEFFUyBDQkNfUEtDUzcKK1tDaGVjayAzXSBUZXN0IHBzYV9jaXBoZXJfYWJvcnQgLSBFbmNyeXB0IC0gQUVTIENUUgorW0NoZWNrIDRdIFRlc3QgcHNhX2NpcGhlcl9hYm9ydCAtIEVuY3J5cHQgLSBERVMgQ0JDIChub3BhZCkKK1tDaGVjayA1XSBUZXN0IHBzYV9jaXBoZXJfYWJvcnQgLSBFbmNyeXB0IC0gMi1rZXkgM0RFIC1DQkMgKG5vcGFkKQorW0NoZWNrIDZdIFRlc3QgcHNhX2NpcGhlcl9hYm9ydCAtIEVuY3J5cHQgLSAzLWtleSAzREUgLUNCQyAobm9wYWQpCitbQ2hlY2sgN10gVGVzdCBwc2FfY2lwaGVyX2Fib3J0IC0gRGVjcnlwdCAtIEFFUyBDQkNfTk9fUEFERElORworW0NoZWNrIDhdIFRlc3QgcHNhX2NpcGhlcl9hYm9ydCAtIERlY3J5cHQgLSBBRVMgQ0JDX1BLQ1M3CitbQ2hlY2sgOV0gVGVzdCBwc2FfY2lwaGVyX2Fib3J0IC0gRGVjcnlwdCAtIEFFUyBDVFIKK1tDaGVjayAxMF0gVGVzdCBwc2FfY2lwaGVyX2Fib3J0IC0gRGVjcnlwdCAtIERFUyBDQkMgKG5vcGFkKQorW0NoZWNrIDExXSBUZXN0IHBzYV9jaXBoZXJfYWJvcnQgLSBEZWNyeXB0IC0gMi1rZXkgM0RFIC1DQkMgKG5vcGFkKQorW0NoZWNrIDEyXSBUZXN0IHBzYV9jaXBoZXJfYWJvcnQgLSBEZWNyeXB0IC0gMy1rZXkgM0RFIC1DQkMgKG5vcGFkKQorW0NoZWNrIDEzXSBUZXN0IHBzYV9jaXBoZXJfdXBkYXRlIGFmdGVyIHBzYV9jaXBoZXJfYWJvcnQgc2hvdWxkIGZhaWwKK1RFU1QgUkVTVUxUOiBQQVNTRUQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RFU1Q6IDIzOSB8IERFU0NSSVBUSU9OOiBUZXN0aW5nIGNyeXB0byBhc3ltbWV0cmljIEFQSXMKK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlCitbQ2hlY2sgMV0gVGVzdCBwc2FfYXN5bW1ldHJpY19lbmNyeXB0IC0gUlNBIFBLQ1MxVjE1CitbQ2hlY2sgMl0gVGVzdCBwc2FfYXN5bW1ldHJpY19lbmNyeXB0IC0gUlNBIE9BRVAgU0hBMjU2CitbQ2hlY2sgM10gVGVzdCBwc2FfYXN5bW1ldHJpY19lbmNyeXB0IC0gUlNBIE9BRVAgU0hBMjU2IHdpdGggbGFiZWwKK1tDaGVjayA0XSBUZXN0IHBzYV9hc3ltbWV0cmljX2VuY3J5cHQgLSBSU0EgS0VZUEFJUiBQS0NTMVYxNQorW0NoZWNrIDVdIFRlc3QgcHNhX2FzeW1tZXRyaWNfZW5jcnlwdCAtIFNtYWxsIG91dHB1dCBidWZmZXIKK1tDaGVjayA2XSBUZXN0IHBzYV9hc3ltbWV0cmljX2VuY3J5cHQgLSBJbnZhbGlkIGFsZ29yaXRobQorW0NoZWNrIDddIFRlc3QgcHNhX2FzeW1tZXRyaWNfZW5jcnlwdCAtIEludmFsaWQga2V5IHR5cGUKK1tDaGVjayA4XSBUZXN0IHBzYV9hc3ltbWV0cmljX2VuY3J5cHQgLSBJbnZhbGlkIHVzYWdlCitbQ2hlY2sgOV0gVGVzdCBwc2FfYXN5bW1ldHJpY19lbmNyeXB0IC0gSW52YWxpZCBrZXkgaGFuZGxlCitbQ2hlY2sgMTBdIFRlc3QgcHNhX2FzeW1tZXRyaWNfZW5jcnlwdCAtIFplcm8gYXMga2V5IGhhbmRsZQorW0NoZWNrIDExXSBUZXN0IHBzYV9hc3ltbWV0cmljX2VuY3J5cHQgLSBFbXB0eSBrZXkgaGFuZGxlCitURVNUIFJFU1VMVDogUEFTU0VECisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitURVNUOiAyNDAgfCBERVNDUklQVElPTjogVGVzdGluZyBjcnlwdG8gYXN5bW1ldHJpYyBBUElzCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQorW0NoZWNrIDFdIFRlc3QgcHNhX2FzeW1tZXRyaWNfZGVjcnlwdCAtIFJTQSBLRVlQQUlSIFBLQ1MxVjE1CitbQ2hlY2sgMl0gVGVzdCBwc2FfYXN5bW1ldHJpY19kZWNyeXB0IC0gUlNBIEtFWVBBSVIgT0FFUCBTSEEyNTYKK1tDaGVjayAzXSBUZXN0IHBzYV9hc3ltbWV0cmljX2RlY3J5cHQgLSBSU0EgS0VZUEFJUiBPQUVQIFNIQTI1NiB3aXRoIGxhYmVsCitbQ2hlY2sgNF0gVGVzdCBwc2FfYXN5bW1ldHJpY19kZWNyeXB0IC0gSW52YWxpZCBrZXkgdHlwZSAoUlNBIHB1YmxpYyBrZXkpCitbQ2hlY2sgNV0gVGVzdCBwc2FfYXN5bW1ldHJpY19kZWNyeXB0IC0gU21hbGwgb3V0cHV0IGJ1ZmZlcgorW0NoZWNrIDZdIFRlc3QgcHNhX2FzeW1tZXRyaWNfZGVjcnlwdCAtIEludmFsaWQgYWxnb3JpdGhtCitbQ2hlY2sgN10gVGVzdCBwc2FfYXN5bW1ldHJpY19kZWNyeXB0IC0gSW52YWxpZCBrZXkgdHlwZSAoQUVTIEtleSkKK1tDaGVjayA4XSBUZXN0IHBzYV9hc3ltbWV0cmljX2RlY3J5cHQgLSBJbnZhbGlkIHVzYWdlCitbQ2hlY2sgOV0gVGVzdCBwc2FfYXN5bW1ldHJpY19kZWNyeXB0IC0gSW52YWxpZCBrZXkgaGFuZGxlCitbQ2hlY2sgMTBdIFRlc3QgcHNhX2FzeW1tZXRyaWNfZGVjcnlwdCAtIFplcm8gYXMga2V5IGhhbmRsZQorW0NoZWNrIDExXSBUZXN0IHBzYV9hc3ltbWV0cmljX2RlY3J5cHQgLSBFbXB0eSBrZXkgaGFuZGxlCitURVNUIFJFU1VMVDogUEFTU0VECisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitURVNUOiAyNDEgfCBERVNDUklQVElPTjogVGVzdGluZyBjcnlwdG8gYXN5bW1ldHJpYyBBUElzCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQorW0NoZWNrIDFdIFRlc3QgcHNhX2FzeW1tZXRyaWNfc2lnbiAtIFJTQSBLRVlQQUlSIFBLQ1MxVjE1IFJBVworW0NoZWNrIDJdIFRlc3QgcHNhX2FzeW1tZXRyaWNfc2lnbiAtIFJTQSBLRVlQQUlSIFBLQ1MxVjE1IFNIQS0yNTYKK1tDaGVjayAzXSBUZXN0IHBzYV9hc3ltbWV0cmljX3NpZ24gLSBFQ0RTQSBTRUNQMjU2UjEgU0hBLTI1NgorW0NoZWNrIDRdIFRlc3QgcHNhX2FzeW1tZXRyaWNfc2lnbiAtIEludmFsaWQga2V5IHR5cGUgKFJTQSBwdWJsaWMga2V5KQorW0NoZWNrIDVdIFRlc3QgcHNhX2FzeW1tZXRyaWNfc2lnbiAtIFNtYWxsIG91dHB1dCBidWZmZXIKK1tDaGVjayA2XSBUZXN0IHBzYV9hc3ltbWV0cmljX3NpZ24gLSBJbnZhbGlkIGFsZ29yaXRobQorW0NoZWNrIDddIFRlc3QgcHNhX2FzeW1tZXRyaWNfc2lnbiAtIEludmFsaWQga2V5IHR5cGUgKEFFUyBLZXkpCitbQ2hlY2sgOF0gVGVzdCBwc2FfYXN5bW1ldHJpY19zaWduIC0gSW52YWxpZCB1c2FnZQorW0NoZWNrIDldIFRlc3QgcHNhX2FzeW1tZXRyaWNfc2lnbiAtIFdyb25nIGhhc2ggc2l6ZQorW0NoZWNrIDEwXSBUZXN0IHBzYV9hc3ltbWV0cmljX3NpZ24gLSBJbnZhbGlkIGtleSBoYW5kbGUKK1tDaGVjayAxMV0gVGVzdCBwc2FfYXN5bW1ldHJpY19zaWduIC0gWmVybyBhcyBrZXkgaGFuZGxlCitbQ2hlY2sgMTJdIFRlc3QgcHNhX2FzeW1tZXRyaWNfc2lnbiAtIEVtcHR5IGtleSBoYW5kbGUKK1RFU1QgUkVTVUxUOiBQQVNTRUQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RFU1Q6IDI0MiB8IERFU0NSSVBUSU9OOiBUZXN0aW5nIGNyeXB0byBhc3ltbWV0cmljIEFQSXMKK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlCitbQ2hlY2sgMV0gVGVzdCBwc2FfYXN5bW1ldHJpY192ZXJpZnkgLSBSU0EgS0VZUEFJUiBQS0NTMVYxNSBSQVcKK1tDaGVjayAyXSBUZXN0IHBzYV9hc3ltbWV0cmljX3ZlcmlmeSAtIFJTQSBLRVlQQUlSIFBLQ1MxVjE1IFNIQS0yNTYKK1tDaGVjayAzXSBUZXN0IHBzYV9hc3ltbWV0cmljX3ZlcmlmeSAtIEVDRFNBIEtFWVBBSVIgU0VDUDI1NlIxIFNIQS0yNTYKK1tDaGVjayA0XSBUZXN0IHBzYV9hc3ltbWV0cmljX3ZlcmlmeSAtIFJTQSBwdWJsaWMga2V5CitbQ2hlY2sgNV0gVGVzdCBwc2FfYXN5bW1ldHJpY192ZXJpZnkgLSBTbWFsbCBvdXRwdXQgYnVmZmVyCitbQ2hlY2sgNl0gVGVzdCBwc2FfYXN5bW1ldHJpY192ZXJpZnkgLSBJbnZhbGlkIGFsZ29yaXRobQorW0NoZWNrIDddIFRlc3QgcHNhX2FzeW1tZXRyaWNfdmVyaWZ5IC0gSW52YWxpZCBrZXkgdHlwZSAoQUVTIEtleSkKK1tDaGVjayA4XSBUZXN0IHBzYV9hc3ltbWV0cmljX3ZlcmlmeSAtIEludmFsaWQgdXNhZ2UKK1tDaGVjayA5XSBUZXN0IHBzYV9hc3ltbWV0cmljX3ZlcmlmeSAtIFdyb25nIGhhc2ggc2l6ZQorW0NoZWNrIDEwXSBUZXN0IHBzYV9hc3ltbWV0cmljX3ZlcmlmeSAtIFdyb25nIHNpZ25hdHVyZQorW0NoZWNrIDExXSBUZXN0IHBzYV9hc3ltbWV0cmljX3ZlcmlmeSAtIEVDIHB1YmxpYyBrZXkKK1tDaGVjayAxMl0gVGVzdCBwc2FfYXN5bW1ldHJpY192ZXJpZnkgLSBXcm9uZyBzaWduYXR1cmUgc2l6ZQorW0NoZWNrIDEzXSBUZXN0IHBzYV9hc3ltbWV0cmljX3ZlcmlmeSAtIEludmFsaWQga2V5IGhhbmRsZQorW0NoZWNrIDE0XSBUZXN0IHBzYV9hc3ltbWV0cmljX3ZlcmlmeSAtIEludmFsaWQga2V5IGhhbmRsZQorW0NoZWNrIDE1XSBUZXN0IHBzYV9hc3ltbWV0cmljX3ZlcmlmeSAtIFplcm8gYXMga2V5IGhhbmRsZQorW0NoZWNrIDE2XSBUZXN0IHBzYV9hc3ltbWV0cmljX3ZlcmlmeSAtIEVtcHR5IGtleSBoYW5kbGUKK1RFU1QgUkVTVUxUOiBQQVNTRUQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RFU1Q6IDI0MyB8IERFU0NSSVBUSU9OOiBUZXN0aW5nIGNyeXB0byBnZW5lcmF0b3IgQVBJcworW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUKK1tDaGVjayAxXSBUZXN0IHBzYV9rZXlfYWdyZWVtZW50IC0gRUNESCBTRUNQMjU2UjEKK1tDaGVjayAyXSBUZXN0IHBzYV9rZXlfYWdyZWVtZW50IC0gRUNESCBTRUNQMzg0UjEKK1tDaGVjayAzXSBUZXN0IHBzYV9rZXlfYWdyZWVtZW50IC0gSW52YWxpZCB1c2FnZQorW0NoZWNrIDRdIFRlc3QgcHNhX2tleV9hZ3JlZW1lbnQgLSBVbmtub3duIEtERgorW0NoZWNrIDVdIFRlc3QgcHNhX2tleV9hZ3JlZW1lbnQgLSBOb3QgYSBrZXkgYWdyZWVtZW50IGFsZworW0NoZWNrIDZdIFRlc3QgcHNhX2tleV9hZ3JlZW1lbnQgLSBQdWJsaWMga2V5IG9uIGRpZmZlcmVudCBjdXJ2ZQorW0NoZWNrIDddIFRlc3QgcHNhX2tleV9hZ3JlZW1lbnQgLSBQdWJsaWMga2V5IGluc3RlYWQgb2YgcHJpdmF0ZSBrZXkKK1tDaGVjayA4XSBUZXN0IHBzYV9rZXlfYWdyZWVtZW50IC0gSW52YWxpZCBrZXkgaGFuZGxlCitbQ2hlY2sgOV0gVGVzdCBwc2Ffa2V5X2FncmVlbWVudCAtIEludmFsaWQga2V5IGhhbmRsZQorW0NoZWNrIDEwXSBUZXN0IHBzYV9rZXlfYWdyZWVtZW50IC0gWmVybyBhcyBrZXkgaGFuZGxlCitbQ2hlY2sgMTFdIFRlc3QgcHNhX2tleV9hZ3JlZW1lbnQgLSBFbXB0eSBrZXkgaGFuZGxlCitURVNUIFJFU1VMVDogUEFTU0VECisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitURVNUOiAyNDQgfCBERVNDUklQVElPTjogVGVzdGluZyBjcnlwdG8ga2V5IG1hbmFnZW1lbnQgQVBJcworW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUKK1tDaGVjayAxXSBUZXN0IHBzYV9jb3B5X2tleSAxNiBCeXRlIEFFUworW0NoZWNrIDJdIFRlc3QgcHNhX2NvcHlfa2V5IDI0IEJ5dGUgQUVTCitbQ2hlY2sgM10gVGVzdCBwc2FfY29weV9rZXkgMzIgQnl0ZSBBRVMKK1tDaGVjayA0XSBUZXN0IHBzYV9jb3B5X2tleSAyMDQ4IFJTQSBwdWJsaWMga2V5CitbQ2hlY2sgNV0gVGVzdCBwc2FfY29weV9rZXkgd2l0aCBSU0EgMjA0OCBrZXlwYWlyCitbQ2hlY2sgNl0gVGVzdCBwc2FfY29weV9rZXkgd2l0aCBJbmNvbXBhdGlibGUgdGFyZ2V0IHBvbGljeShzb3VyY2UgYW5kIHRhcmdldCkKK1tDaGVjayA3XSBUZXN0IHBzYV9jb3B5X2tleSB3aXRoIEluY29tcGF0aWJsZSBjb25zdHJhaW50CitbQ2hlY2sgOF0gVGVzdCBwc2FfY29weV9rZXkgd2l0aCB1bmV4cG9ydCBzb3VyY2Uga2V5IHVzYWdlCitURVNUIFJFU1VMVDogUEFTU0VECisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKioqKioqKioqKiogQ3J5cHRvIFN1aXRlIFJlcG9ydCAqKioqKioqKioqCitUT1RBTCBURVNUUyAgICAgOiA0NAorVE9UQUwgUEFTU0VEICAgIDogNDQKK1RPVEFMIFNJTSBFUlJPUiA6IDAKK1RPVEFMIEZBSUxFRCAgICA6IDAKK1RPVEFMIFNLSVBQRUQgICA6IDAKKyoqKioqKioqKioqKioqKioqKioqCisKK0VudGVyaW5nIHN0YW5kYnkuLgorCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2EvcmVmZXJlbmNlX2xvZ3MvcHJvdGVjdGVkX3N0b3JhZ2UudHh0IGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL3JlZmVyZW5jZV9sb2dzL3Byb3RlY3RlZF9zdG9yYWdlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45M2I3YmEzCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL3JlZmVyZW5jZV9sb2dzL3Byb3RlY3RlZF9zdG9yYWdlLnR4dApAQCAtMCwwICsxLDE1NyBAQAorKioqKiogUFNBIEFyY2hpdGVjdHVyZSBUZXN0IFN1aXRlIC0gVmVyc2lvbiAwLjkgKioqKioKKworUnVubmluZy4uIFByb3RlY3RlZCBTdG9yYWdlIFN1aXRlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVEVTVDogNDAxIHwgREVTQ1JJUFRJT046IFVJRCBub3QgZm91bmQgY2hlY2sKK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlCitbQ2hlY2sgMV0gQ2FsbCBnZXQgQVBJIGZvciBVSUQgNiB3aGljaCBpcyBub3Qgc2V0CitbQ2hlY2sgMl0gQ2FsbCBnZXRfaW5mbyBBUEkgZm9yIFVJRCA2IHdoaWNoIGlzIG5vdCBzZXQKK1tDaGVjayAzXSBDYWxsIHJlbW92ZSBBUEkgZm9yIFVJRCA2IHdoaWNoIGlzIG5vdCBzZXQKK1tDaGVjayA0XSBDYWxsIGdldCBBUEkgZm9yIFVJRCA2IHdoaWNoIGlzIHJlbW92ZWQKK1tDaGVjayA1XSBDYWxsIGdldF9pbmZvIEFQSSBmb3IgVUlEIDYgd2hpY2ggaXMgcmVtb3ZlZAorW0NoZWNrIDZdIENhbGwgcmVtb3ZlIEFQSSBmb3IgVUlEIDYgd2hpY2ggaXMgcmVtb3ZlZAorU2V0IHN0b3JhZ2UgZm9yIFVJRCA2CitbQ2hlY2sgN10gQ2FsbCBnZXQgQVBJIGZvciBkaWZmZXJlbnQgVUlEIDYKK1tDaGVjayA4XSBDYWxsIGdldF9pbmZvIEFQSSBmb3IgZGlmZmVyZW50IFVJRCA2CitbQ2hlY2sgOV0gQ2FsbCByZW1vdmUgQVBJIGZvciBkaWZmZXJlbnQgVUlEIDYKK1RFU1QgUkVTVUxUOiBQQVNTRUQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RFU1Q6IDQwMiB8IERFU0NSSVBUSU9OOiBXcml0ZSBvbmNlIGVycm9yIGNoZWNrCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQorW0NoZWNrIDFdIFVwZGF0ZSB0aGUgZmxhZyBvZiBVSUQgMSB3aXRoIFdSSVRFX09OQ0UgZmxhZworW0NoZWNrIDJdIFRyeSB0byByZW1vdmUgdGhlIFVJRCAxIGhhdmluZyBXUklURV9PTkNFIGZsYWcKK1tDaGVjayAzXSBDcmVhdGUgYSBuZXcgVUlEIDIgd2l0aCBXUklURV9PTkNFIGZsYWcKK1tDaGVjayA0XSBUcnkgdG8gcmVtb3ZlIHRoZSBVSUQgMiBoYXZpbmcgV1JJVEVfT05DRSBmbGFnCitbQ2hlY2sgNV0gVHJ5IHRvIGNoYW5nZSB0aGUgbGVuZ3RoIG9mIHdyaXRlX29uY2UgVUlEIDIKK1tDaGVjayA2XSBDaGVjayBVSUQgcmVtb3ZhbCBzdGlsbCBmYWlscworW0NoZWNrIDddIFRyeSB0byBjaGFuZ2UgdGhlIFdSSVRFX09OQ0UgZmxhZyB0byBOb25lIGZvciBVSUQgMgorW0NoZWNrIDhdIENoZWNrIFVJRCByZW1vdmFsIHN0aWxsIGZhaWxzCitURVNUIFJFU1VMVDogUEFTU0VECisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitURVNUOiA0MDMgfCBERVNDUklQVElPTjogSW5zdWZmaWNpZW50IHNwYWNlIGNoZWNrCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQorW0NoZWNrIDFdIE92ZXJsb2FkIHN0b3JhZ2Ugc3BhY2UKK1JlbW92ZSBhbGwgcmVnaXN0ZXJlZCBVSURzCitbQ2hlY2sgMl0gT3ZlcmxvYWQgc3RvcmFnZSBhZ2FpbiB0byB2ZXJpZnkgYWxsIHByZXZpb3VzIFVJRCByZW1vdmVkCisKK1JlbW92ZSBhbGwgcmVnaXN0ZXJlZCBVSURzCitURVNUIFJFU1VMVDogUEFTU0VECisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitURVNUOiA0MDQgfCBERVNDUklQVElPTjogRGF0YSBDb25zaXN0ZW5jeSBjaGVjaworW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUKK1tDaGVjayAxXSBDYWxsIGdldCBBUEkgd2l0aCBpbmNvcnJlY3QgbGVuZ3RoCitbQ2hlY2sgMl0gT2xkIGJ1ZmZlciBpbnZhbGlkIGFmdGVyIGxlbmd0aCBjaGFuZ2UKK1RFU1QgUkVTVUxUOiBQQVNTRUQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RFU1Q6IDQwNSB8IERFU0NSSVBUSU9OOiBTdWNjZXNzIHNjZW5hcmlvcyBjaGVjaworW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUKK1tDaGVjayAxXSBTZXQgVUlEIHdpdGggZGF0YSBsZW5ndGggemVybyBhbmQgY2FsbCBzdG9yYWdlIEFQSXMKK1tDaGVjayAyXSBSZXNldHRpbmcgdGhlIGxlbmd0aCBjaGVjaworVEVTVCBSRVNVTFQ6IFBBU1NFRAorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVEVTVDogNDA2IHwgREVTQ1JJUFRJT046IEZsYWdzIG5vdCBzdXBwb3J0ZWQgY2hlY2sKK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlCitbQ2hlY2sgMV0gQ2FsbCBzZXQgQVBJIHdpdGggdmFsaWQgZmxhZyB2YWx1ZXMKK1RFU1QgUkVTVUxUOiBQQVNTRUQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RFU1Q6IDQwNyB8IERFU0NSSVBUSU9OOiBJbmNvcnJlY3QgU2l6ZSBjaGVjaworW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUKK0NyZWF0ZSBhIHZhbGlkIFN0b3JhZ2UKK0luY3JlYXNlIHRoZSBsZW5ndGggb2Ygc3RvcmFnZQorW0NoZWNrIDFdIENhbGwgZ2V0IEFQSSB3aXRoIG9sZCBsZW5ndGgKK0RlY3JlYXNlIHRoZSBsZW5ndGggb2Ygc3RvcmFnZQorW0NoZWNrIDJdIENhbGwgZ2V0IEFQSSB3aXRoIG9sZCBsZW5ndGgKK1tDaGVjayAzXSBDYWxsIGdldCBBUEkgd2l0aCB2YWxpZCBsZW5ndGgKK1RFU1QgUkVTVUxUOiBQQVNTRUQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RFU1Q6IDQwOCB8IERFU0NSSVBUSU9OOiBJbnZhbGlkIG9mZnNldCBjaGVjaworW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUKK1tDaGVjayAxXSBUcnkgdG8gYWNjZXNzIGRhdGEgd2l0aCB2YXJ5aW5nIHZhbGlkIG9mZnNldAorW0NoZWNrIDJdIFRyeSB0byBhY2Nlc3MgZGF0YSB3aXRoIHZhcnlpbmcgaW52YWxpZCBvZmZzZXQKK1RFU1QgUkVTVUxUOiBQQVNTRUQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RFU1Q6IDQwOSB8IERFU0NSSVBUSU9OOiBJbnZhbGlkIEFyZ3VtZW50cyBjaGVjaworW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUKK1tDaGVjayAxXSBDYWxsIHNldCBBUEkgd2l0aCBOVUxMIHBvaW50ZXIgYW5kIGRhdGEgbGVuZ3RoIDAKK1tDaGVjayAyXSBDYWxsIGdldCBBUEkgd2l0aCBOVUxMIHJlYWQgYnVmZmVyIGFuZCBkYXRhIGxlbmd0aCAwCitbQ2hlY2sgM10gUmVtb3ZlIHRoZSBVSUQKK1tDaGVjayA0XSBDYWxsIGdldF9pbmZvIEFQSSB0byB2ZXJpZnkgVUlEIHJlbW92ZWQKK1tDaGVjayA1XSBDcmVhdGUgVUlEIHdpdGggemVybyBkYXRhX2xlbiBhbmQgdmFsaWQgd3JpdGUgYnVmZmVyCitbQ2hlY2sgOF0gQ2FsbCBnZXQgQVBJIHdpdGggTlVMTCByZWFkIGJ1ZmZlciBhbmQgZGF0YSBsZW5ndGggMAorW0NoZWNrIDldIEluY3JlYXNlIHRoZSBsZW5ndGgKK1RFU1QgUkVTVUxUOiBQQVNTRUQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RFU1Q6IDQxMCB8IERFU0NSSVBUSU9OOiBVSUQgdmFsdWUgemVybyBjaGVjaworW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUKK1tDaGVjayAxXSBDcmVhdGluZyBzdG9yYWdlIHdpdGggVUlEIDAgc2hvdWxkIGZhaWwKK1RFU1QgUkVTVUxUOiBQQVNTRUQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RFU1Q6IDQxMSB8IERFU0NSSVBUSU9OOiBPcHRpb25hbCBBUElzOiBVSUQgbm90IGZvdW5kIGNoZWNrCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQorVGVzdCBDYXNlIHNraXBwZWQgYXMgT3B0aW9uYWwgUFMgQVBJcyBhcmUgbm90IHN1cHBvcnRlZC4KK1RFU1QgUkVTVUxUOiBTS0lQUEVEIChTa2lwIENvZGU9MHgyQikKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RFU1Q6IDQxMiB8IERFU0NSSVBUSU9OOiBPcHRpb25hbCBBUElzOiBJbnZhbGlkIGFyZ3VtZW50cyBhbmQgb2Zmc2V0IGludmFsaWQKK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlCitUZXN0IENhc2Ugc2tpcHBlZCBhcyBPcHRpb25hbCBQUyBBUElzIGFyZSBub3Qgc3VwcG9ydGVkLgorVEVTVCBSRVNVTFQ6IFNLSVBQRUQgKFNraXAgQ29kZT0weDJCKQorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVEVTVDogNDEzIHwgREVTQ1JJUFRJT046IFNldF9FeHRlbmRlZCBhbmQgQ3JlYXRlIGFwaSA6IFN1Y2Nlc3MKK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlCitUZXN0IENhc2Ugc2tpcHBlZCBhcyBPcHRpb25hbCBQUyBBUElzIGFyZSBub3Qgc3VwcG9ydGVkLgorVEVTVCBSRVNVTFQ6IFNLSVBQRUQgKFNraXAgQ29kZT0weDJCKQorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVEVTVDogNDE0IHwgREVTQ1JJUFRJT046IE9wdGlvbmFsIEFQSXMgbm90IHN1cHBvcnRlZCBjaGVjaworW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUKK09wdGlvbmFsIFBTIEFQSXMgYXJlIG5vdCBzdXBwb3J0ZWQuCitbQ2hlY2sgMV0gQ2FsbCB0byBjcmVhdGUgQVBJIHNob3VsZCBmYWlsIGFzIEFQSSBub3Qgc3VwcG9ydGVkCitbQ2hlY2sgMl0gQ3JlYXRlIHZhbGlkIHN0b3JhZ2Ugd2l0aCBzZXQgQVBJCitbQ2hlY2sgM10gQ2FsbCB0byBzZXRfZXh0ZW5kZWQgQVBJIGNhbGwgc2hvdWxkIGZhaWwKK1tDaGVjayA0XSBWZXJpZnkgZGF0YSBpcyB1bmNoYW5nZWQKK1RFU1QgUkVTVUxUOiBQQVNTRUQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RFU1Q6IDQxNSB8IERFU0NSSVBUSU9OOiBDcmVhdGUgQVBJIHdyaXRlX29uY2UgZmxhZyB2YWx1ZSBjaGVjaworW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUKK1Rlc3QgQ2FzZSBza2lwcGVkIGFzIE9wdGlvbmFsIFBTIEFQSXMgYXJlIG5vdCBzdXBwb3J0ZWQuCitURVNUIFJFU1VMVDogU0tJUFBFRCAoU2tpcCBDb2RlPTB4MkIpCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKioqKioqKioqKiogUHJvdGVjdGVkIFN0b3JhZ2UgU3VpdGUgUmVwb3J0ICoqKioqKioqKioKK1RPVEFMIFRFU1RTICAgICA6IDE1CitUT1RBTCBQQVNTRUQgICAgOiAxMQorVE9UQUwgU0lNIEVSUk9SIDogMAorVE9UQUwgRkFJTEVEICAgIDogMAorVE9UQUwgU0tJUFBFRCAgIDogNAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0VudGVyaW5nIHN0YW5kYnkuLgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL3NwZS9wYWxfZHJpdmVyX2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9zcGUvcGFsX2RyaXZlcl9pbnRmLmMKaW5kZXggZWI0NjhiOS4uNGQ1MjIwNyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL3NwZS9wYWxfZHJpdmVyX2ludGYuYworKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2Evc3BlL3BhbF9kcml2ZXJfaW50Zi5jCkBAIC0zMyw3ICszMyw3IEBACiAgICAgICAgICAgICAgIC0gZGF0YSAgICAgOiBWYWx1ZSBmb3IgZm9ybWF0IHNwZWNpZmllcgogKiovCiAKLXZvaWQgcGFsX3ByaW50KGNoYXIgKnN0ciwgdWludDMyX3QgZGF0YSkKK3ZvaWQgcGFsX3ByaW50KGNoYXIgKnN0ciwgaW50MzJfdCBkYXRhKQogewogICBwYWxfdWFydF9wbDAxMV9wcmludChzdHIsZGF0YSk7CiB9CkBAIC0xMDksMyArMTA5LDIzIEBACiAgICAgcmV0dXJuIChwYWxfd2RfY21zZGtfaXNfZW5hYmxlZChiYXNlX2FkZHIpKTsKIH0KIAorLyoqCisgICAgQGJyaWVmICAgLSBUcmlnZ2VyIGludGVycnVwdCBmb3IgaXJxIHNpZ25hbCBhc3NpZ25lZCB0byBkcml2ZXIgcGFydGl0aW9uCisgICAgICAgICAgICAgICBiZWZvcmUgcmV0dXJuIHRvIGNhbGxlci4KKyAgICBAcGFyYW0gICAtIHZvaWQKKyAgICBAcmV0dXJuICAtIHZvaWQKKyoqLwordm9pZCBwYWxfZ2VuZXJhdGVfaW50ZXJydXB0KHZvaWQpCit7CisgICAgcGFsX3VhcnRfcGwwMTFfZ2VuZXJhdGVfaXJxKCk7Cit9CisKKy8qKgorICAgIEBicmllZiAgIC0gRGlzYWJsZSBpbnRlcnJ1cHQgdGhhdCB3YXMgZ2VuZXJhdGVkIHVzaW5nIHBhbF9nZW5lcmF0ZV9pbnRlcnJ1cHQgQVBJLgorICAgIEBwYXJhbSAgIC0gdm9pZAorICAgIEByZXR1cm4gIC0gdm9pZAorKiovCit2b2lkIHBhbF9kaXNhYmxlX2ludGVycnVwdCh2b2lkKQoreworICAgIHBhbF91YXJ0X3BsMDExX2Rpc2FibGVfaXJxKCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2Evc3BlL3BhbF9kcml2ZXJfaW50Zi5oIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9hL3NwZS9wYWxfZHJpdmVyX2ludGYuaAppbmRleCBkYTg1YTYzLi5jZWYzNGNhIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2Evc3BlL3BhbF9kcml2ZXJfaW50Zi5oCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYS9zcGUvcGFsX2RyaXZlcl9pbnRmLmgKQEAgLTIzLDExICsyMywxMyBAQAogI2luY2x1ZGUgInBhbF93ZF9jbXNkay5oIgogCiB2b2lkIHBhbF91YXJ0X2luaXQodWludDMyX3QgdWFydF9iYXNlX2FkZHIpOwotdm9pZCBwYWxfcHJpbnQoY2hhciAqc3RyLCB1aW50MzJfdCBkYXRhKTsKK3ZvaWQgcGFsX3ByaW50KGNoYXIgKnN0ciwgaW50MzJfdCBkYXRhKTsKIGludCBwYWxfbnZtZW1fd3JpdGUoYWRkcl90IGJhc2UsIHVpbnQzMl90IG9mZnNldCwgdm9pZCAqYnVmZmVyLCBpbnQgc2l6ZSk7CiBpbnQgcGFsX252bWVtX3JlYWQoYWRkcl90IGJhc2UsIHVpbnQzMl90IG9mZnNldCwgdm9pZCAqYnVmZmVyLCBpbnQgc2l6ZSk7CiBpbnQgcGFsX3dkX3RpbWVyX2luaXQoYWRkcl90IGJhc2VfYWRkciwgdWludDMyX3QgdGltZV91cywgdWludDMyX3QgdGltZXJfdGlja191cyk7CiBpbnQgcGFsX3dkX3RpbWVyX2VuYWJsZShhZGRyX3QgYmFzZV9hZGRyKTsKIGludCBwYWxfd2RfdGltZXJfZGlzYWJsZShhZGRyX3QgYmFzZV9hZGRyKTsKIGludCBwYWxfd2RfdGltZXJfaXNfZW5hYmxlZChhZGRyX3QgYmFzZV9hZGRyKTsKK3ZvaWQgcGFsX2dlbmVyYXRlX2ludGVycnVwdCh2b2lkKTsKK3ZvaWQgcGFsX2Rpc2FibGVfaW50ZXJydXB0KHZvaWQpOwogI2VuZGlmIC8qIF9QQUxfRFJJVkVSX0lOVEZfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvTWFrZWZpbGUgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhN2UxMGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL01ha2VmaWxlCkBAIC0wLDAgKzEsMTYwIEBACisjICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyMgKgorIyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgKgorIyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgKgorIyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMqKi8KKworaW5jbHVkZSAkKFNPVVJDRSkvdG9vbHMvbWFrZWZpbGVzL3Rvb2xjaGFpbi5taworCisjIE1ha2UgdmFyaWFibGVzIHRvIHNlbGVjdCBjb3JyZWN0IGluc3RhbmNlcyBvZiBQQUwgZmlsZXMKKworIyMgUFNBX0lQQ19JTVBMRU1FTlRFRCBtdXN0IGJlIHRydWUgZm9yIElQQyBTVUlURQorUFNBX0lQQ19JTVBMRU1FTlRFRDo9MAorCisjIyBQU0FfQ1JZUFRPX0lNUExFTUVOVEVEIG11c3QgYmUgdHJ1ZSBmb3IgQ1JZUFRPIFNVSVRFCitQU0FfQ1JZUFRPX0lNUExFTUVOVEVEOj0xCisKKyMjIFBTQV9QUk9URUNURURfU1RPUkFHRV9JTVBMRU1FTlRFRCBtdXN0IGJlIHRydWUgZm9yIFBST1RFQ1RFRF9TVE9SQUdFIFNVSVRFCitQU0FfUFJPVEVDVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQ6PTEKKworIyMgUFNBX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9JTVBMRU1FTlRFRCBtdXN0IGJlIHRydWUgZm9yIElOVEVSTkFMX1RSVVNURURfU1RPUkFHRSBTVUlURQorUFNBX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9JTVBMRU1FTlRFRDo9MAorCisjIyBQU0FfSU5JVElBTF9BVFRFU1RBVElPTl9JTVBMRU1FTlRFRCBtdXN0IGJlIHRydWUgZm9yIElOSVRJQUxfQVRURVNUQVRJT04gU1VJVEUKK1BTQV9JTklUSUFMX0FUVEVTVEFUSU9OX0lNUExFTUVOVEVEOj0xCisKKyMgTWFrZSB2YXJpYWJsZXMgaG9sZGluZyBOU1BFL1NQRSBzb3VyY2UgZmlsZXMKKworIyMgUEFMIEMgc291cmNlIGZpbGVzIHBhcnQgb2YgTlNQRSBsaWJyYXJ5CitTUkNfQ19OU1BFPQorCisjIyBQQUwgQVNNIHNvdXJjZSBmaWxlcyBwYXJ0IG9mIE5TUEUgbGlicmFyeQorU1JDX0FTTV9OU1BFPQorCisjIyBQQUwgQyBzb3VyY2UgZmlsZXMgcGFydCBvZiBTUEUgbGlicmFyeSAtIGRyaXZlciBwYXJ0aXRpb24KK1NSQ19DX0RSSVZFUl9TUD0KKworIyMgUEFMIEFTTSBzb3VyY2UgZmlsZXMgcGFydCBvZiBTUEUgbGlicmFyeSAtIGRyaXZlciBwYXJ0aXRpb24KK1NSQ19BU01fRFJJVkVSX1NQPQorCitpZmVxICgke1BTQV9JUENfSU1QTEVNRU5URUR9LDEpCisjIFdoZW4gUFNBX0lQQ19JTVBMRU1FTlRFRD0xLCBkcml2ZXIgZnVuY3Rpb25hbGl0aWVzIGFyZSBpbXBsZW1lbnRlZCBhcyBSb1Qtc2VydmljZXMKKyMgYW5kIHNlY3VyZSBhbmQgbm9uLXNlY3VyZSBjbGllbnRzIHdpbGwgY2FsbCB0byB0aGVzZSBSb1Qtc2VydmljZXMgdG8gZ2V0IGFwcHJvcHJpYXRlIGRyaXZlciBzZXJ2aWNlcy4KK1NSQ19DX05TUEUgKz0gcGFsX2NsaWVudF9hcGlfaW50Zi5jCitTUkNfQ19OU1BFICs9IHBhbF9kcml2ZXJfaXBjX2ludGYuYworCisjIERyaXZlciBmaWxlcyB3aWxsIGJlIGNvbXBpbGVkIGFzIHBhcnQgb2YgZHJpdmVyIHBhcnRpdGlvbgorU1JDX0NfRFJJVkVSX1NQICs9IHBhbF9kcml2ZXJfaW50Zi5jIHBhbF9udm1lbS5jIHBhbF91YXJ0LmMgcGFsX3dkX2Ntc2RrLmMKK2Vsc2UKKworIyBXaGVuIFBTQV9JUENfSU1QTEVNRU5URUQ9MCwgZHJpdmVyIGZpbGVzIHdpbGwgYmUgY29tcGlsZWQgYXMgcGFydCBvZiBOU1BFCitTUkNfQ19OU1BFICs9IHBhbF9jbGllbnRfYXBpX2VtcHR5X2ludGYuYworU1JDX0NfTlNQRSArPSBwYWxfZHJpdmVyX25zX2ludGYuYyBwYWxfbnZtZW0uYyBwYWxfdWFydC5jIHBhbF93ZF9jbXNkay5jCitlbmRpZgorCitpZmVxICgke1BTQV9DUllQVE9fSU1QTEVNRU5URUR9LDEpCitTUkNfQ19OU1BFICs9IHBhbF9jcnlwdG9faW50Zi5jCitlbHNlCitTUkNfQ19OU1BFICs9IHBhbF9jcnlwdG9fZW1wdHlfaW50Zi5jCitlbmRpZgorCitpZmVxICgke1BTQV9QUk9URUNURURfU1RPUkFHRV9JTVBMRU1FTlRFRH0sMSkKK1NSQ19DX05TUEUgKz0gcGFsX3Byb3RlY3RlZF9zdG9yYWdlX2ludGYuYworZWxzZQorU1JDX0NfTlNQRSArPSBwYWxfcHJvdGVjdGVkX3N0b3JhZ2VfZW1wdHlfaW50Zi5jCitlbmRpZgorCitpZmVxICgke1BTQV9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfSU1QTEVNRU5URUR9LDEpCitTUkNfQ19OU1BFICs9IHBhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2VfaW50Zi5jCitlbHNlCitTUkNfQ19OU1BFICs9IHBhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2VfZW1wdHlfaW50Zi5jCitlbmRpZgorCitpZmVxICgke1BTQV9JTklUSUFMX0FUVEVTVEFUSU9OX0lNUExFTUVOVEVEfSwxKQorU1JDX0NfTlNQRSArPSBwYWxfYXR0ZXN0YXRpb25faW50Zi5jCitTUkNfQ19OU1BFICs9IHBhbF9hdHRlc3RhdGlvbl9lYXQuYworU1JDX0NfTlNQRSArPSBwYWxfYXR0ZXN0YXRpb25fY3J5cHRvLmMKK2Vsc2UKK1NSQ19DX05TUEUgKz0gcGFsX2F0dGVzdGF0aW9uX2VtcHR5X2ludGYuYworZW5kaWYKKworSU5DTFVERT0gLUkkKFNPVVJDRSkvcGxhdGZvcm0vdGFyZ2V0cy8kKFRBUkdFVCkvbnNwZSBcCisgICAgICAgICAtSSQoU09VUkNFKS9wbGF0Zm9ybS90YXJnZXRzLyQoVEFSR0VUKS9zcGUgXAorICAgICAgICAgLUkkKEJVSUxEKS9wbGF0Zm9ybS8kKFRBUkdFVCkvIFwKKyAgICAgICAgIC1JJChTT1VSQ0UpL3BsYXRmb3JtL2RyaXZlcnMvdWFydC9wbDAxMSBcCisgICAgICAgICAtSSQoU09VUkNFKS9wbGF0Zm9ybS9kcml2ZXJzL252bWVtLyBcCisgICAgICAgICAtSSQoU09VUkNFKS9wbGF0Zm9ybS9kcml2ZXJzL3dhdGNoZG9nL2Ntc2RrIFwKKyAgICAgICAgIC1JJChTT1VSQ0UpL3BsYXRmb3JtL3RhcmdldHMvJChUQVJHRVQpL25zcGUvY29tbW9uIFwKKyAgICAgICAgIC1JJChTT1VSQ0UpL3BsYXRmb3JtL3RhcmdldHMvJChUQVJHRVQpL25zcGUvY3J5cHRvIFwKKyAgICAgICAgIC1JJChTT1VSQ0UpL3BsYXRmb3JtL3RhcmdldHMvJChUQVJHRVQpL25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbiBcCisgICAgICAgICAtSSQoU09VUkNFKS9wbGF0Zm9ybS90YXJnZXRzLyQoVEFSR0VUKS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vZXh0L2luYyBcCisgICAgICAgICAtSSQoU09VUkNFKS9wbGF0Zm9ybS90YXJnZXRzLyQoVEFSR0VUKS9uc3BlL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZSBcCisgICAgICAgICAtSSQoU09VUkNFKS9wbGF0Zm9ybS90YXJnZXRzLyQoVEFSR0VUKS9uc3BlL3Byb3RlY3RlZF9zdG9yYWdlIFwKKworVlBBVEg9JChTT1VSQ0UpL3BsYXRmb3JtL3RhcmdldHMvJChUQVJHRVQpLzogXAorICAgICAgJChTT1VSQ0UpL3BsYXRmb3JtL3RhcmdldHMvJChUQVJHRVQpL3NwZTogXAorICAgICAgJChTT1VSQ0UpL3BsYXRmb3JtL3RhcmdldHMvJChUQVJHRVQpL25zcGU6IFwKKyAgICAgICQoU09VUkNFKS9wbGF0Zm9ybS9kcml2ZXJzL3VhcnQvcGwwMTE6IFwKKyAgICAgICQoU09VUkNFKS9wbGF0Zm9ybS9kcml2ZXJzL252bWVtOiBcCisgICAgICAkKFNPVVJDRSkvcGxhdGZvcm0vZHJpdmVycy93YXRjaGRvZy9jbXNkazogXAorICAgICAgJChTT1VSQ0UpL3BsYXRmb3JtL3RhcmdldHMvJChUQVJHRVQpL25zcGUvY29tbW9uOiBcCisgICAgICAkKFNPVVJDRSkvcGxhdGZvcm0vdGFyZ2V0cy8kKFRBUkdFVCkvbnNwZS9jcnlwdG86IFwKKyAgICAgICQoU09VUkNFKS9wbGF0Zm9ybS90YXJnZXRzLyQoVEFSR0VUKS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb246IFwKKyAgICAgICQoU09VUkNFKS9wbGF0Zm9ybS90YXJnZXRzLyQoVEFSR0VUKS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vZXh0L3NyYzogXAorICAgICAgJChTT1VSQ0UpL3BsYXRmb3JtL3RhcmdldHMvJChUQVJHRVQpL25zcGUvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlOiBcCisgICAgICAkKFNPVVJDRSkvcGxhdGZvcm0vdGFyZ2V0cy8kKFRBUkdFVCkvbnNwZS9wcm90ZWN0ZWRfc3RvcmFnZTogXAorCithbGw6IGJ1aWxkCisKK2lmZXEgKCR7UFNBX0lQQ19JTVBMRU1FTlRFRH0sMSkKK2J1aWxkOiBta2RpciBidWlsZF9uc3BlX3BhbCBidWlsZF9zcGVfcGFsCitlbHNlCitidWlsZDogbWtkaXIgYnVpbGRfbnNwZV9wYWwKK2VuZGlmCisKK21rZGlyOgorCUBta2RpciAtcCAkKEJVSUxEKS9wbGF0Zm9ybS9uc3BlLworCUBta2RpciAtcCAkKEJVSUxEKS9wbGF0Zm9ybS9zcGUvCisKKyMgQlVJTEQgTlNQRSBQQUwKK2J1aWxkX25zcGVfcGFsOiBidWlsZF9jX25zcGUgYnVpbGRfYXNtX25zcGUgcGFsX25zcGUuYQorCitidWlsZF9jX25zcGU6ICQoU1JDX0NfTlNQRTolLmM9JChCVUlMRCkvcGxhdGZvcm0vbnNwZS8lLm8pCitidWlsZF9hc21fbnNwZTogJChTUkNfQVNNX05TUEU6JS5zPSQoQlVJTEQpL3BsYXRmb3JtL25zcGUvJS5vKQorCiskKEJVSUxEKS9wbGF0Zm9ybS9uc3BlLyUubyA6ICUuYworCSQoQ0MpICQoUEFMX0NERUZTKSAkKElOQ0xVREUpIC1vICRAIC1jICQ8CisKKyQoQlVJTEQpL3BsYXRmb3JtL25zcGUvJS5vIDogJS5zCisJJChBUykgJChJTkNMVURFKSAtbyAkQCAkPAorCitwYWxfbnNwZS5hOgorCSQoQVIpICQoQVJfT1BUSU9OUykgJChCVUlMRCkvcGxhdGZvcm0vcGFsX25zcGUuYSAkKEJVSUxEKS9wbGF0Zm9ybS9uc3BlLyoubworCisjIEJVSUxEIFNQRSBQQUwKK2J1aWxkX3NwZV9wYWw6IGJ1aWxkX2RyaXZlcl9zcAorCitidWlsZF9kcml2ZXJfc3A6IGJ1aWxkX2NfZHJpdmVyX3NwIGJ1aWxkX2FzbV9kcml2ZXJfc3AKKworYnVpbGRfY19kcml2ZXJfc3A6ICQoU1JDX0NfRFJJVkVSX1NQOiUuYz0kKEJVSUxEKS9wbGF0Zm9ybS9zcGUvJV9kcml2ZXJfc3AubykKK2J1aWxkX2FzbV9kcml2ZXJfc3A6ICQoU1JDX0FTTV9EUklWRVJfU1A6JS5zPSQoQlVJTEQpL3BsYXRmb3JtL3NwZS8lX2RyaXZlcl9zcC5vKQorCisjIEdlbmVyYXRlZCAlX2RyaXZlcl9zcC5vKHMpIGFyZSB1c2VkIGluIHNwYnVpbGQubWsgdG8gY3JlYXRlIGZpbmFsIGRyaXZlcl9wYXJ0aXRpb24uYQorJChCVUlMRCkvcGxhdGZvcm0vc3BlLyVfZHJpdmVyX3NwLm8gOiAlLmMKKwkkKENDKSAkKElOQ0xVREUpIC1EU1BFX0JVSUxEIC1vICRAIC1jICQ8CisKKyQoQlVJTEQpL3BsYXRmb3JtL3NwZS8lX2RyaXZlcl9zcC5vIDogJS5zCisJJChBUykgJChJTkNMVURFKSAtbyAkQCAkPAorCitjbGVhbjoKKwlAcm0gLXJmICQoQlVJTEQpL3BsYXRmb3JtL25zcGUvKiAkKEJVSUxEKS9wbGF0Zm9ybS9zcGUvKi5hCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL21hbmlmZXN0cy9jb21tb24vZHJpdmVyX3BhcnRpdGlvbl9wc2EuanNvbiBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbWFuaWZlc3RzL2NvbW1vbi9kcml2ZXJfcGFydGl0aW9uX3BzYS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMTBjOWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL21hbmlmZXN0cy9jb21tb24vZHJpdmVyX3BhcnRpdGlvbl9wc2EuanNvbgpAQCAtMCwwICsxLDc1IEBACit7CisgICJwc2FfZnJhbWV3b3JrX3ZlcnNpb24iOiAxLjAsCisgICJuYW1lIjogIkRSSVZFUl9QQVJUSVRJT04iLAorICAidHlwZSI6ICJQU0EtUk9UIiwKKyAgInByaW9yaXR5IjogIk5PUk1BTCIsCisgICJkZXNjcmlwdGlvbiI6ICJJbXBsZW1lbnRzIGRldmljZSBzZXJ2aWNlcyBzdWNoIHByaW50LCBmbGFzaCByZWFkL3dyaXRlLC4gZXRjLiIsCisgICJlbnRyeV9wb2ludCI6ICJkcml2ZXJfbWFpbiIsCisgICJzdGFja19zaXplIjogIjB4NDAwIiwKKyAgInNlcnZpY2VzIjogW3sKKyAgICAgICJuYW1lIjogIkRSSVZFUl9VQVJUX1NJRCIsCisgICAgICAic2lkIjogIjB4MDAwMEZDMDEiLAorICAgICAgInNpZ25hbCI6ICJEUklWRVJfVUFSVF9TSUciLAorICAgICAgIm5vbl9zZWN1cmVfY2xpZW50cyI6IHRydWUsCisgICAgICAibWlub3JfdmVyc2lvbiI6IDEsCisgICAgICAibWlub3JfcG9saWN5IjogIlJFTEFYRUQiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJEUklWRVJfV0FUQ0hET0dfU0lEIiwKKyAgICAgICJzaWQiOiAiMHgwMDAwRkMwMiIsCisgICAgICAic2lnbmFsIjogIkRSSVZFUl9XQVRDSERPR19TSUciLAorICAgICAgIm5vbl9zZWN1cmVfY2xpZW50cyI6IHRydWUsCisgICAgICAibWlub3JfdmVyc2lvbiI6IDEsCisgICAgICAibWlub3JfcG9saWN5IjogIlJFTEFYRUQiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJEUklWRVJfTlZNRU1fU0lEIiwKKyAgICAgICJzaWQiOiAiMHgwMDAwRkMwMyIsCisgICAgICAic2lnbmFsIjogIkRSSVZFUl9OVk1FTV9TSUciLAorICAgICAgIm5vbl9zZWN1cmVfY2xpZW50cyI6IHRydWUsCisgICAgICAibWlub3JfdmVyc2lvbiI6IDEsCisgICAgICAibWlub3JfcG9saWN5IjogIlJFTEFYRUQiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJEUklWRVJfVEVTVF9TSUQiLAorICAgICAgInNpZCI6ICIweDAwMDBGQzA0IiwKKyAgICAgICJzaWduYWwiOiAiRFJJVkVSX1RFU1RfU0lHIiwKKyAgICAgICJub25fc2VjdXJlX2NsaWVudHMiOiB0cnVlLAorICAgICAgIm1pbm9yX3ZlcnNpb24iOiAxLAorICAgICAgIm1pbm9yX3BvbGljeSI6ICJSRUxBWEVEIgorICAgIH0KKyAgXSwKKyAgIm1taW9fcmVnaW9ucyIgOiBbCisgICAgeworICAgICAgIm5hbWUiOiAiVUFSVF9SRUdJT04iLAorICAgICAgImJhc2UiOiAiMHg0MDAwNDAwMCIsCisgICAgICAic2l6ZSI6ICIweDEwMDAiLAorICAgICAgInBlcm1pc3Npb24iOiAiUkVBRC1XUklURSIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIldBVENIRE9HX1JFR0lPTiIsCisgICAgICAiYmFzZSI6ICIweDQwMDA4MDAwIiwKKyAgICAgICJzaXplIjogIjB4MTAwMCIsCisgICAgICAicGVybWlzc2lvbiI6ICJSRUFELVdSSVRFIgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiTlZNRU1fUkVHSU9OIiwKKyAgICAgICJiYXNlIjogIjB4MjAwMkYwMDAiLAorICAgICAgInNpemUiOiAiMHg0MDAiLAorICAgICAgInBlcm1pc3Npb24iOiAiUkVBRC1XUklURSIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIkRSSVZFUl9QQVJUSVRJT05fTU1JTyIsCisgICAgICAiYmFzZSI6ICIweDIwMEFGMDQwIiwKKyAgICAgICJzaXplIjogIjB4MjAiLAorICAgICAgInBlcm1pc3Npb24iOiAiUkVBRC1XUklURSIKKyAgICB9CisgIF0sCisgICJpcnFzIjogWworICAgIHsKKyAgICAgICAiZGVzY3JpcHRpb24iOiAiVXNpbmcgVUFSVCBUWCBpbnRlcnJ1cHQgdG8gdGVzdCBwc2Ffd2FpdCBhbmQgcHNhX2VvaSBmb3IgaXJxX3NpZ25hbCIsCisgICAgICAgInNpZ25hbCI6ICJEUklWRVJfVUFSVF9JTlRSX1NJRyIsCisgICAgICAgImxpbmVfbnVtIjogNDYKKyAgICB9CisgIF0KK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbWFuaWZlc3RzL2lwYy9jbGllbnRfcGFydGl0aW9uX3BzYS5qc29uIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9tYW5pZmVzdHMvaXBjL2NsaWVudF9wYXJ0aXRpb25fcHNhLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkzMzc3YgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbWFuaWZlc3RzL2lwYy9jbGllbnRfcGFydGl0aW9uX3BzYS5qc29uCkBAIC0wLDAgKzEsMzcgQEAKK3sKKyAgInBzYV9mcmFtZXdvcmtfdmVyc2lvbiI6IDEuMCwKKyAgIm5hbWUiOiAiQ0xJRU5UX1BBUlRJVElPTiIsCisgICJ0eXBlIjogIkFQUExJQ0FUSU9OLVJPVCIsCisgICJwcmlvcml0eSI6ICJOT1JNQUwiLAorICAiZGVzY3JpcHRpb24iOiAiQ2xpZW50IHBhcnRpdGlvbiBleGVjdXRpbmcgY2xpZW50IHRlc3QgZnVuYyBmcm9tIFNQRSIsCisgICJlbnRyeV9wb2ludCI6ICJjbGllbnRfbWFpbiIsCisgICJzdGFja19zaXplIjogIjB4NDAwIiwKKyAgInNlcnZpY2VzIjogW3sKKyAgICAgICJuYW1lIjogIkNMSUVOVF9URVNUX0RJU1BBVENIRVJfU0lEIiwKKyAgICAgICJzaWQiOiAiMHgwMDAwRkEwMSIsCisgICAgICAic2lnbmFsIjogIkNMSUVOVF9URVNUX0RJU1BBVENIRVJfU0lHIiwKKyAgICAgICJub25fc2VjdXJlX2NsaWVudHMiOiB0cnVlLAorICAgICAgIm1pbm9yX3ZlcnNpb24iOiAxLAorICAgICAgIm1pbm9yX3BvbGljeSI6ICJSRUxBWEVEIgorICAgIH0KKyAgXSwKKyAgImRlcGVuZGVuY2llcyI6IFsKKyAgICAiRFJJVkVSX1VBUlRfU0lEIiwKKyAgICAiRFJJVkVSX05WTUVNX1NJRCIsCisgICAgIkRSSVZFUl9URVNUX1NJRCIsCisgICAgIlNFUlZFUl9URVNUX0RJU1BBVENIRVJfU0lEIiwKKyAgICAiU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQiLAorICAgICJTRVJWRVJfU1RSSUNUX01JTk9SX1ZFUlNJT05fU0lEIiwKKyAgICAiU0VSVkVSX1JFTEFYX01JTk9SX1ZFUlNJT05fU0lEIiwKKyAgICAiU0VSVkVSX1NFQ1VSRV9DT05ORUNUX09OTFlfU0lEIiwKKyAgICAiU0VSVkVSX0NPTk5FQ1RJT05fRFJPUF9TSUQiCisgIF0sCisgICJtbWlvX3JlZ2lvbnMiIDogWworICAgIHsKKyAgICAgICJuYW1lIjogIkNMSUVOVF9QQVJUSVRJT05fTU1JTyIsCisgICAgICAiYmFzZSI6ICIweDIwMEFGMDAwIiwKKyAgICAgICJzaXplIjogIjB4MjAiLAorICAgICAgInBlcm1pc3Npb24iOiAiUkVBRC1XUklURSIKKyAgICB9CisgICBdCit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL21hbmlmZXN0cy9pcGMvc2VydmVyX3BhcnRpdGlvbl9wc2EuanNvbiBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbWFuaWZlc3RzL2lwYy9zZXJ2ZXJfcGFydGl0aW9uX3BzYS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NmI4ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL21hbmlmZXN0cy9pcGMvc2VydmVyX3BhcnRpdGlvbl9wc2EuanNvbgpAQCAtMCwwICsxLDY5IEBACit7CisgICJwc2FfZnJhbWV3b3JrX3ZlcnNpb24iOiAxLjAsCisgICJuYW1lIjogIlNFUlZFUl9QQVJUSVRJT04iLAorICAidHlwZSI6ICJBUFBMSUNBVElPTi1ST1QiLAorICAicHJpb3JpdHkiOiAiTk9STUFMIiwKKyAgImRlc2NyaXB0aW9uIjogIlNlcnZlciBwYXJ0aXRpb24gZXhlY3V0aW5nIHNlcnZlciB0ZXN0IGZ1bmMiLAorICAiZW50cnlfcG9pbnQiOiAic2VydmVyX21haW4iLAorICAic3RhY2tfc2l6ZSI6ICIweDQwMCIsCisgICJoZWFwX3NpemUiOiAiMHgxMDAiLAorICAic2VydmljZXMiOiBbeworICAgICAgIm5hbWUiOiAiU0VSVkVSX1RFU1RfRElTUEFUQ0hFUl9TSUQiLAorICAgICAgInNpZCI6ICIweDAwMDBGQjAxIiwKKyAgICAgICJzaWduYWwiOiAiU0VSVkVSX1RFU1RfRElTUEFUQ0hFUl9TSUciLAorICAgICAgIm5vbl9zZWN1cmVfY2xpZW50cyI6IHRydWUsCisgICAgICAibWlub3JfdmVyc2lvbiI6IDEsCisgICAgICAibWlub3JfcG9saWN5IjogIlJFTEFYRUQiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJTRVJWRVJfU0VDVVJFX0NPTk5FQ1RfT05MWV9TSUQiLAorICAgICAgInNpZCI6ICIweDAwMDBGQjAyIiwKKyAgICAgICJzaWduYWwiOiAiU0VSVkVSX1NFQ1VSRV9DT05ORUNUX09OTFlfU0lHIiwKKyAgICAgICJub25fc2VjdXJlX2NsaWVudHMiOiBmYWxzZSwKKyAgICAgICJtaW5vcl92ZXJzaW9uIjogMiwKKyAgICAgICJtaW5vcl9wb2xpY3kiOiAiUkVMQVhFRCIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlNFUlZFUl9TVFJJQ1RfTUlOT1JfVkVSU0lPTl9TSUQiLAorICAgICAgInNpZCI6ICIweDAwMDBGQjAzIiwKKyAgICAgICJzaWduYWwiOiAiU0VSVkVSX1NUUklDVF9NSU5PUl9WRVJTSU9OX1NJRyIsCisgICAgICAibm9uX3NlY3VyZV9jbGllbnRzIjogdHJ1ZSwKKyAgICAgICJtaW5vcl92ZXJzaW9uIjogMiwKKyAgICAgICJtaW5vcl9wb2xpY3kiOiAiU1RSSUNUIgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUQiLAorICAgICAgInNpZCI6ICIweDAwMDBGQjA0IiwKKyAgICAgICJzaWduYWwiOiAiU0VSVkVSX1VOU1BFQ0lGRURfTUlOT1JfVl9TSUciLAorICAgICAgIm5vbl9zZWN1cmVfY2xpZW50cyI6IHRydWUKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlNFUlZFUl9SRUxBWF9NSU5PUl9WRVJTSU9OX1NJRCIsCisgICAgICAic2lkIjogIjB4MDAwMEZCMDUiLAorICAgICAgInNpZ25hbCI6ICJTRVJWRVJfUkVMQVhfTUlOT1JfVkVSU0lPTl9TSUciLAorICAgICAgIm5vbl9zZWN1cmVfY2xpZW50cyI6IHRydWUsCisgICAgICAibWlub3JfdmVyc2lvbiI6IDIsCisgICAgICAibWlub3JfcG9saWN5IjogIlJFTEFYRUQiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJTRVJWRVJfVU5FWFRFUk5fU0lEIiwKKyAgICAgICJzaWQiOiAiMHgwMDAwRkIwNiIsCisgICAgICAic2lnbmFsIjogIlNFUlZFUl9VTkVYVEVSTl9TSUciLAorICAgICAgIm5vbl9zZWN1cmVfY2xpZW50cyI6IHRydWUsCisgICAgICAibWlub3JfdmVyc2lvbiI6IDIsCisgICAgICAibWlub3JfcG9saWN5IjogIlJFTEFYRUQiCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJTRVJWRVJfQ09OTkVDVElPTl9EUk9QX1NJRCIsCisgICAgICAic2lkIjogIjB4MDAwMEZCMDciLAorICAgICAgInNpZ25hbCI6ICJTRVJWRVJfQ09OTkVDVElPTl9EUk9QX1NJRyIsCisgICAgICAibm9uX3NlY3VyZV9jbGllbnRzIjogdHJ1ZSwKKyAgICAgICJtaW5vcl92ZXJzaW9uIjogMiwKKyAgICAgICJtaW5vcl9wb2xpY3kiOiAiUkVMQVhFRCIKKyAgICB9CisgIF0sCisgICJkZXBlbmRlbmNpZXMiOiBbCisgICAgIkRSSVZFUl9VQVJUX1NJRCIsCisgICAgIkRSSVZFUl9OVk1FTV9TSUQiCisgIF0KK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9jb21tb24vcGFsX2NsaWVudF9hcGlfZW1wdHlfaW50Zi5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9uc3BlL2NvbW1vbi9wYWxfY2xpZW50X2FwaV9lbXB0eV9pbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc4YjRjZQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9jb21tb24vcGFsX2NsaWVudF9hcGlfZW1wdHlfaW50Zi5jCkBAIC0wLDAgKzEsOTMgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJwYWxfY29tbW9uLmgiCisjaW5jbHVkZSAicGFsX2NsaWVudF9hcGlfaW50Zi5oIgorCisvKioKKyAqIEBicmllZiAtIFJldHJpZXZlIHRoZSB2ZXJzaW9uIG9mIHRoZSBQU0EgRnJhbWV3b3JrIEFQSSB0aGF0IGlzIGltcGxlbWVudGVkLgorICogVGhpcyBpcyBhIHdyYXBwZXIgQVBJIGZvciBwc2FfZnJhbWV3b3JrX3ZlcnNpb24gQVBJLgorICogQHBhcmFtICAgIC0gdm9pZAorICogQHJldHVybiAgIC0gVGhlIFBTQSBGcmFtZXdvcmsgQVBJIHZlcnNpb24uCisgKi8KKwordWludDMyX3QgcGFsX2lwY19mcmFtZXdvcmtfdmVyc2lvbih2b2lkKQoreworICAgIHJldHVybiAwOworfQorCisvKioKKyAqIEBicmllZiAtIFJldHJpZXZlIHRoZSBtaW5vciB2ZXJzaW9uIG9mIGEgUm9vdCBvZiBUcnVzdCBTZXJ2aWNlIGJ5IGl0cyBTSUQuCisgKiBUaGlzIGlzIGEgd3JhcHBlciBBUEkgZm9yIHRoZSBwc2FfdmVyc2lvbiBBUEkuCisgKiBAcGFyYW0gLSBzaWQgVGhlIFJvb3Qgb2YgVHJ1c3QgU2VydmljZSBJRAorICogQHJldHVybiAtIE1pbm9yIHZlcnNpb24gb2YgUm9vdCBvZiBUcnVzdCBTZXJ2aWNlIG9yIFBTQV9WRVJTSU9OX05PTkUgaWYgUm9vdCBvZiBUcnVzdAorICogICAgICAgICAgIFNlcnZpY2Ugbm90IHByZXNlbnQgb24gdGhlIHN5c3RlbS4KKyAqLworCit1aW50MzJfdCBwYWxfaXBjX3ZlcnNpb24odWludDMyX3Qgc2lkKQoreworICAgIHJldHVybiBQU0FfVkVSU0lPTl9OT05FOworfQorCisvKioKKyAqIEBicmllZiAgIC0gQ29ubmVjdCB0byBnaXZlbiBzaWQuCisgKiAgICAgICAgICAgIFRoaXMgaXMgYSB3cmFwcGVyIEFQSSBmb3IgdGhlIHBzYV9jb25uZWN0IEFQSS4KKyAqIEBwYXJhbSAgIC0gc2lkIDogUm9UIHNlcnZpY2UgaWQKKyAqIEBwYXJhbSAgIC0gbWlub3JfdmVyc2lvbiA6IG1pbm9yX3ZlcnNpb24gb2YgUm9UIHNlcnZpY2UKKyAqIEByZXR1cm4gIC0gcHNhX2hhbmRsZV90IDogcmV0dXJuIGNvbm5lY3Rpb24gaGFuZGxlCisgKi8KKworcHNhX2hhbmRsZV90IHBhbF9pcGNfY29ubmVjdCh1aW50MzJfdCBzaWQsIHVpbnQzMl90IG1pbm9yX3ZlcnNpb24pCit7CisgICAgcmV0dXJuIFBTQV9OVUxMX0hBTkRMRTsKK30KKworLyoqCisgKiBAYnJpZWYgQ2FsbCBhIGNvbm5lY3RlZCBSb290IG9mIFRydXN0IFNlcnZpY2UuCisgKiBUaGlzIGlzIGEgd3JhcHBlciBBUEkgZm9yIHRoZSBwc2FfY2FsbCBBUEkuCisgKiBUaGUgY2FsbGVyIG11c3QgcHJvdmlkZSBhbiBhcnJheSBvZiA6OnBzYV9pbnZlY190IHN0cnVjdHVyZXMgYXMgdGhlIGlucHV0IHBheWxvYWQuCisgKgorICogQHBhcmFtICAtaGFuZGxlICAgSGFuZGxlIGZvciB0aGUgY29ubmVjdGlvbi4KKyAqIEBwYXJhbSAgLWluX3ZlYyAgIEFycmF5IG9mIHBzYV9pbnZlYyBzdHJ1Y3R1cmVzLgorICogQHBhcmFtICAtaW5fbGVuICAgTnVtYmVyIG9mIHBzYV9pbnZlYyBzdHJ1Y3R1cmVzIGluIGluX3ZlYy4KKyAqIEBwYXJhbSAgLW91dF92ZWMgIEFycmF5IG9mIHBzYV9vdXR2ZWMgc3RydWN0dXJlcyBmb3Igb3B0aW9uYWwgUm9vdCBvZiBUcnVzdCBTZXJ2aWNlIHJlc3BvbnNlLgorICogQHBhcmFtICAtb3V0X2xlbiAgTnVtYmVyIG9mIHBzYV9vdXR2ZWMgc3RydWN0dXJlcyBpbiBvdXRfdmVjLgorICogQHJldHVybiAtcHNhX3N0YXR1c190CisgKi8KKworcHNhX3N0YXR1c190IHBhbF9pcGNfY2FsbChwc2FfaGFuZGxlX3QgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBzYV9pbnZlYyAqaW5fdmVjLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX291dHZlYyAqb3V0X3ZlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3V0X2xlbikKK3sKKyAgICByZXR1cm4gKFBTQV9TVUNDRVNTIC0gMSk7Cit9CisKKy8qKgorICogQGJyaWVmIENsb3NlIGEgY29ubmVjdGlvbiB0byBhIFJvb3Qgb2YgVHJ1c3QgU2VydmljZS4KKyAqIFRoaXMgaXMgYSB3cmFwcGVyIEFQSSBmb3IgdGhlIHBzYV9jbG9zZSBBUEkuCisgKiBTZW5kcyB0aGUgUFNBX0lQQ19ESVNDT05ORUNUIG1lc3NhZ2UgdG8gdGhlIFJvb3Qgb2YgVHJ1c3QgU2VydmljZSBzbyBpdCBjYW4gY2xlYW4gdXAgcmVzb3VyY2VzLgorICoKKyAqIEBwYXJhbSBoYW5kbGUgSGFuZGxlIGZvciB0aGUgY29ubmVjdGlvbi4KKyAqIEByZXR1cm4gdm9pZAorICovCisKK3ZvaWQgcGFsX2lwY19jbG9zZShwc2FfaGFuZGxlX3QgaGFuZGxlKQoreworICAgIHJldHVybjsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9jb21tb24vcGFsX2NsaWVudF9hcGlfaW50Zi5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9uc3BlL2NvbW1vbi9wYWxfY2xpZW50X2FwaV9pbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBkZGQxMQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9jb21tb24vcGFsX2NsaWVudF9hcGlfaW50Zi5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJwYWxfY29tbW9uLmgiCisjaW5jbHVkZSAicGFsX2NsaWVudF9hcGlfaW50Zi5oIgorCisvKioKKyAqIEBicmllZiAgIC0gUmV0cmlldmUgdGhlIHZlcnNpb24gb2YgdGhlIFBTQSBGcmFtZXdvcmsgQVBJIHRoYXQgaXMgaW1wbGVtZW50ZWQuCisgKiBUaGlzIGlzIGEgd3JhcHBlciBBUEkgZm9yIHBzYV9mcmFtZXdvcmtfdmVyc2lvbiBBUEkuCisgKiBAcGFyYW0gICAgLSB2b2lkCisgKiBAcmV0dXJuICAgLSBUaGUgUFNBIEZyYW1ld29yayBBUEkgdmVyc2lvbi4KKyAqICAgICAgICAgICAgIE5vdGUgLSBSZXR1cm4gUEFMX1NUQVRVU19FUlJPUiBpZiBQU0EgSVBDIGlzIG5vdCBpbXBsZW1lbnRlZC4KKyAqLworCit1aW50MzJfdCBwYWxfaXBjX2ZyYW1ld29ya192ZXJzaW9uKHZvaWQpCit7CisgICAgcmV0dXJuIChwc2FfZnJhbWV3b3JrX3ZlcnNpb24oKSk7Cit9CisKKy8qKgorICogQGJyaWVmICAgLSBSZXRyaWV2ZSB0aGUgbWlub3IgdmVyc2lvbiBvZiBhIFJvb3Qgb2YgVHJ1c3QgU2VydmljZSBieSBpdHMgU0lELgorICogVGhpcyBpcyBhIHdyYXBwZXIgQVBJIGZvciB0aGUgcHNhX3ZlcnNpb24gQVBJLgorICogQHBhcmFtIC0gc2lkIFRoZSBSb290IG9mIFRydXN0IFNlcnZpY2UgSUQKKyAqIEByZXR1cm4gLSBNaW5vciB2ZXJzaW9uIG9mIFJvb3Qgb2YgVHJ1c3QgU2VydmljZSBvciBQU0FfVkVSU0lPTl9OT05FIGlmIFJvb3Qgb2YgVHJ1c3QKKyAqICAgICAgICAgICBTZXJ2aWNlIG5vdCBwcmVzZW50IG9uIHRoZSBzeXN0ZW0uCisgKiAgICAgICAgICAgTm90ZSAtIFJldHVybiBQQUxfU1RBVFVTX0VSUk9SIGlmIFBTQSBJUEMgaXMgbm90IGltcGxlbWVudGVkLgorICovCisKK3VpbnQzMl90IHBhbF9pcGNfdmVyc2lvbih1aW50MzJfdCBzaWQpCit7CisgICAgcmV0dXJuIChwc2FfdmVyc2lvbihzaWQpKTsKK30KKworLyoqCisgKiBAYnJpZWYgICAtIENvbm5lY3QgdG8gZ2l2ZW4gc2lkLgorICogICAgICAgICAgICBUaGlzIGlzIGEgd3JhcHBlciBBUEkgZm9yIHRoZSBwc2FfY29ubmVjdCBBUEkuCisgKiBAcGFyYW0gICAtIHNpZCA6IFJvVCBzZXJ2aWNlIGlkCisgKiBAcGFyYW0gICAtIG1pbm9yX3ZlcnNpb24gOiBtaW5vcl92ZXJzaW9uIG9mIFJvVCBzZXJ2aWNlCisgKiBAcmV0dXJuICAtIHBzYV9oYW5kbGVfdCA6IHJldHVybiBjb25uZWN0aW9uIGhhbmRsZQorICogICAgICAgICAgICBOb3RlIC0gUmV0dXJuIFBTQV9OVUxMX0hBTkRMRSBpZiBQU0EgSVBDIGlzIG5vdCBpbXBsZW1lbnRlZC4KKyAqLworCitwc2FfaGFuZGxlX3QgcGFsX2lwY19jb25uZWN0KHVpbnQzMl90IHNpZCwgdWludDMyX3QgbWlub3JfdmVyc2lvbikKK3sKKyAgICByZXR1cm4gKHBzYV9jb25uZWN0KHNpZCwgbWlub3JfdmVyc2lvbikpOworfQorCisvKioKKyAqIEBicmllZiBDYWxsIGEgY29ubmVjdGVkIFJvb3Qgb2YgVHJ1c3QgU2VydmljZS4KKyAqIFRoaXMgaXMgYSB3cmFwcGVyIEFQSSBmb3IgdGhlIHBzYV9jYWxsIEFQSS4KKyAqIFRoZSBjYWxsZXIgbXVzdCBwcm92aWRlIGFuIGFycmF5IG9mIDo6cHNhX2ludmVjX3Qgc3RydWN0dXJlcyBhcyB0aGUgaW5wdXQgcGF5bG9hZC4KKyAqCisgKiBAcGFyYW0gIC1oYW5kbGUgICBIYW5kbGUgZm9yIHRoZSBjb25uZWN0aW9uLgorICogQHBhcmFtICAtaW5fdmVjICAgQXJyYXkgb2YgcHNhX2ludmVjIHN0cnVjdHVyZXMuCisgKiBAcGFyYW0gIC1pbl9sZW4gICBOdW1iZXIgb2YgcHNhX2ludmVjIHN0cnVjdHVyZXMgaW4gaW5fdmVjLgorICogQHBhcmFtICAtb3V0X3ZlYyAgQXJyYXkgb2YgcHNhX291dHZlYyBzdHJ1Y3R1cmVzIGZvciBvcHRpb25hbCBSb290IG9mIFRydXN0IFNlcnZpY2UgcmVzcG9uc2UuCisgKiBAcGFyYW0gIC1vdXRfbGVuICBOdW1iZXIgb2YgcHNhX291dHZlYyBzdHJ1Y3R1cmVzIGluIG91dF92ZWMuCisgKiBAcmV0dXJuIC1wc2Ffc3RhdHVzX3QKKyAqICAgICAgICAgIE5vdGUgLSBSZXR1cm4gLTEgaWYgUFNBIElQQyBpcyBub3QgaW1wbGVtZW50ZWQuCisgKi8KKworcHNhX3N0YXR1c190IHBhbF9pcGNfY2FsbChwc2FfaGFuZGxlX3QgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBzYV9pbnZlYyAqaW5fdmVjLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgcHNhX291dHZlYyAqb3V0X3ZlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb3V0X2xlbikKK3sKKyAgICByZXR1cm4gKHBzYV9jYWxsKGhhbmRsZSwgaW5fdmVjLCBpbl9sZW4sIG91dF92ZWMsIG91dF9sZW4pKTsKK30KKworLyoqCisgKiBAYnJpZWYgQ2xvc2UgYSBjb25uZWN0aW9uIHRvIGEgUm9vdCBvZiBUcnVzdCBTZXJ2aWNlLgorICogVGhpcyBpcyBhIHdyYXBwZXIgQVBJIGZvciB0aGUgcHNhX2Nsb3NlIEFQSS4KKyAqIFNlbmRzIHRoZSBQU0FfSVBDX0RJU0NPTk5FQ1QgbWVzc2FnZSB0byB0aGUgUm9vdCBvZiBUcnVzdCBTZXJ2aWNlIHNvIGl0IGNhbiBjbGVhbiB1cCByZXNvdXJjZXMuCisgKgorICogQHBhcmFtICAtIGhhbmRsZSBIYW5kbGUgZm9yIHRoZSBjb25uZWN0aW9uLgorICogQHJldHVybiAtIHZvaWQKKyAqLworCit2b2lkIHBhbF9pcGNfY2xvc2UocHNhX2hhbmRsZV90IGhhbmRsZSkKK3sKKyAgICBwc2FfY2xvc2UoaGFuZGxlKTsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9jb21tb24vcGFsX2NsaWVudF9hcGlfaW50Zi5oIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9uc3BlL2NvbW1vbi9wYWxfY2xpZW50X2FwaV9pbnRmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y1NzQxZQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9jb21tb24vcGFsX2NsaWVudF9hcGlfaW50Zi5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpZm5kZWYgX1BBTF9DTElFTlRfQVBJX0hfCisjZGVmaW5lIF9QQUxfQ0xJRU5UX0FQSV9IXworCisjaW5jbHVkZSAicGFsX2NvbW1vbi5oIgorCit1aW50MzJfdCBwYWxfaXBjX2ZyYW1ld29ya192ZXJzaW9uKHZvaWQpOwordWludDMyX3QgcGFsX2lwY192ZXJzaW9uKHVpbnQzMl90IHNpZCk7Citwc2FfaGFuZGxlX3QgcGFsX2lwY19jb25uZWN0KHVpbnQzMl90IHNpZCwgdWludDMyX3QgbWlub3JfdmVyc2lvbik7Citwc2Ffc3RhdHVzX3QgcGFsX2lwY19jYWxsKHBzYV9oYW5kbGVfdCBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHNhX2ludmVjICppbl92ZWMsCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGluX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICBwc2Ffb3V0dmVjICpvdXRfdmVjLAorICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvdXRfbGVuKTsKK3ZvaWQgcGFsX2lwY19jbG9zZShwc2FfaGFuZGxlX3QgaGFuZGxlKTsKKyNlbmRpZiAvKiBfUEFMX0NMSUVOVF9BUElfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9jb21tb24vcGFsX2NvbW1vbi5oIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9uc3BlL2NvbW1vbi9wYWxfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ViZTFlMQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9jb21tb24vcGFsX2NvbW1vbi5oCkBAIC0wLDAgKzEsMTE4IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZuZGVmIF9QQUxfQ09NTU9OX0hfCisjZGVmaW5lIF9QQUxfQ09NTU9OX0hfCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2lmbmRlZiBUQVJHRVRfQ0ZHX0JVSUxECisjaW5jbHVkZSAicGFsX2NvbmZpZy5oIgorI2luY2x1ZGUgInBhbF9jcnlwdG9fY29uZmlnLmgiCisjZW5kaWYKKworLyogdHlwZWRlZidzICovCit0eXBlZGVmIHVpbnQ4X3QgICAgICAgICAgICAgYm9vbF90OwordHlwZWRlZiB1aW50MzJfdCAgICAgICAgICAgIGFkZHJfdDsKK3R5cGVkZWYgdWludDMyX3QgICAgICAgICAgICB0ZXN0X2lkX3Q7Cit0eXBlZGVmIHVpbnQzMl90ICAgICAgICAgICAgYmxvY2tfaWRfdDsKK3R5cGVkZWYgY2hhciAgICAgICAgICAgICAgICBjaGFyOF90OwordHlwZWRlZiB1aW50MzJfdCAgICAgICAgICAgIGNmZ19pZF90OworCisjZGVmaW5lIFBBTF9TVEFUVVNfVU5TVVBQT1JURURfRlVOQyAgICAgIDB4RkYKKwordHlwZWRlZiBlbnVtCit7CisgICAgUEFMX1NUQVRVU19TVUNDRVNTID0gMHgwLAorICAgIFBBTF9TVEFUVVNfRVJST1IgICA9IDB4ODAKK30gcGFsX3N0YXR1c190OworCit0eXBlZGVmIGVudW0geworICAgIE5WTUVNX1JFQUQgICAgICAgICAgICAgPSAweDEsCisgICAgTlZNRU1fV1JJVEUgICAgICAgICAgICA9IDB4MiwKK30gbnZtZW1fZm5fdHlwZV90OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgbnZtZW1fZm5fdHlwZV90IG52bWVtX2ZuX3R5cGU7CisgICAgYWRkcl90IGJhc2U7CisgICAgdWludDMyX3Qgb2Zmc2V0OworICAgIGludCBzaXplOworfSBudm1lbV9wYXJhbV90OworCit0eXBlZGVmIGVudW0geworICAgIFdEX0lOSVRfU0VRICAgICAgICAgPSAweDEsCisgICAgV0RfRU5BQkxFX1NFUSAgICAgICA9IDB4MiwKKyAgICBXRF9ESVNBQkxFX1NFUSAgICAgID0gMHgzLAorICAgIFdEX1NUQVRVU19TRVEgICAgICAgPSAweDQsCit9IHdkX2ZuX3R5cGVfdDsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBXRF9MT1dfVElNRU9VVCAgICAgID0gMHgxLAorICAgIFdEX01FRElVTV9USU1FT1VUICAgPSAweDIsCisgICAgV0RfSElHSF9USU1FT1VUICAgICA9IDB4MywKKyAgICBXRF9DUllQVE9fVElNRU9VVCAgID0gMHg0LAorfSB3ZF90aW1lb3V0X3R5cGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHdkX2ZuX3R5cGVfdCB3ZF9mbl90eXBlOworICAgIGFkZHJfdCAgICAgICB3ZF9iYXNlX2FkZHI7CisgICAgdWludDMyX3QgICAgIHdkX3RpbWVfdXM7CisgICAgdWludDMyX3QgICAgIHdkX3RpbWVyX3RpY2tfdXM7Cit9IHdkX3BhcmFtX3Q7CisKK3R5cGVkZWYgZW51bSB7CisgICAgVUFSVF9JTklUICAgICAgICAgICAgID0gMHgxLAorICAgIFVBUlRfUFJJTlQgICAgICAgICAgICA9IDB4MiwKK30gdWFydF9mbl90eXBlX3Q7CisKKy8qCisgKiBSZWRlZmluaW5nIHNvbWUgb2YgdGhlIGNsaWVudC5oIGVsZW1lbnRzIGZvciBjb21waWxhdGlvbiB0byBnbyB0aHJvdWdoCisgKiB3aGVuIFBTQSBJUEMgQVBJcyBhcmUgbm90IGltcGxlbWVudGVkLgorICovCisjaWYgKFBTQV9JUENfSU1QTEVNRU5URUQgPT0gMCkKKworI2lmbmRlZiBQU0FfVkVSU0lPTl9OT05FCisjZGVmaW5lIFBTQV9WRVJTSU9OX05PTkUgICAgICAgICAgICAoMCkKKyNlbmRpZgorCisjaWZuZGVmIFBTQV9TVUNDRVNTCisjZGVmaW5lIFBTQV9TVUNDRVNTICAgICAgICAgICAgICAgICAoMCkKK3R5cGVkZWYgaW50MzJfdCBwc2Ffc3RhdHVzX3Q7CisjZW5kaWYKK3R5cGVkZWYgaW50MzJfdCBwc2FfaGFuZGxlX3Q7CisKKyNpZm5kZWYgUFNBX05VTExfSEFORExFCisjZGVmaW5lIFBTQV9OVUxMX0hBTkRMRSAgICAgICAgICAgICAoKHBzYV9oYW5kbGVfdCkwKQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHBzYV9pbnZlYyB7CisgICAgY29uc3Qgdm9pZCAqYmFzZTsKKyAgICBzaXplX3QgbGVuOworfSBwc2FfaW52ZWM7CisKK3R5cGVkZWYgc3RydWN0IHBzYV9vdXR2ZWMgeworICAgIHZvaWQgKmJhc2U7CisgICAgc2l6ZV90IGxlbjsKK30gcHNhX291dHZlYzsKKworI2VuZGlmIC8qIFBTQV9JUENfSU1QTEVNRU5URUQgKi8KKworI2VuZGlmIC8qIF9QQUxfQ09NTU9OX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL25zcGUvY29tbW9uL3BhbF9jb25maWcuaCBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9jb21tb24vcGFsX2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZjcwYWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL25zcGUvY29tbW9uL3BhbF9jb25maWcuaApAQCAtMCwwICsxLDExOSBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2lmbmRlZiBfUEFMX0NPTkZJR19IXworI2RlZmluZSBfUEFMX0NPTkZJR19IXworCisvKgorICogTGlzdCBvZiBtYWNyb3MgdXNlZCBieSB0ZXN0IHN1aXRlCisgKi8KKyNpZiAhZGVmaW5lZChQU0FfSVBDX0lNUExFTUVOVEVEKQorI2RlZmluZSBQU0FfSVBDX0lNUExFTUVOVEVEIDAKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoUFNBX0NSWVBUT19JTVBMRU1FTlRFRCkKKyNkZWZpbmUgUFNBX0NSWVBUT19JTVBMRU1FTlRFRCAwCisjZW5kaWYKKworI2lmICFkZWZpbmVkKFBTQV9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQpCisjZGVmaW5lIFBTQV9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQgMAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChQU0FfUFJPVEVDVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQpCisjZGVmaW5lIFBTQV9QUk9URUNURURfU1RPUkFHRV9JTVBMRU1FTlRFRCAwCisjZW5kaWYKKworI2lmICFkZWZpbmVkKFBTQV9JTklUSUFMX0FUVEVTVEFUSU9OX0lNUExFTUVOVEVEKQorI2RlZmluZSBQU0FfSU5JVElBTF9BVFRFU1RBVElPTl9JTVBMRU1FTlRFRCAwCisjZW5kaWYKKworI2lmIChQU0FfSVBDX0lNUExFTUVOVEVEID09IDApICYmIFwKKyAgICAoUFNBX0NSWVBUT19JTVBMRU1FTlRFRCA9PSAwKSAmJiBcCisgICAgKFBTQV9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQgPT0gMCkgJiYgXAorICAgIChQU0FfUFJPVEVDVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQgPT0gMCkgJiYgXAorICAgIChQU0FfSU5JVElBTF9BVFRFU1RBVElPTl9JTVBMRU1FTlRFRCA9PSAwKQorI2Vycm9yICJZb3UgbXVzdCBkZWZpbmUgYXQgbGVhc3Qgb25lIG9mIHRoZXNlIG1hY3JvcyB0byBydW4gdGVzdCBzdWl0ZSIKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoVkVSQk9TRSkKKyNkZWZpbmUgVkVSQk9TRSAzIC8qIFByaW50IHZlcmJvc2l0eSA9IFRFU1QgKi8KKyNlbmRpZgorCisjaWYgKCFkZWZpbmVkKFZBTF9OU1BFX0JVSUxEKSAmJiAhZGVmaW5lZChTUEVfQlVJTEQpKQorI2RlZmluZSBWQUxfTlNQRV9CVUlMRCAxCisjZW5kaWYKKworI2lmICghZGVmaW5lZChOT05TRUNVUkVfVEVTVF9CVUlMRCkgJiYgIWRlZmluZWQoU1BFX0JVSUxEKSkKKyNkZWZpbmUgTk9OU0VDVVJFX1RFU1RfQlVJTEQgMQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChURVNUX0NPTUJJTkVfQVJDSElWRSkKKyNkZWZpbmUgVEVTVF9DT01CSU5FX0FSQ0hJVkUgMCAvKiBDb21iaW5lIHRlc3QgYXJjaGl2ZSBvciBiaW5hcnk/ICovCisjZW5kaWYKKworI2lmICFkZWZpbmVkKFdBVENIRE9HX0FWQUlMQUJMRSkKKyNkZWZpbmUgV0FUQ0hET0dfQVZBSUxBQkxFIDAgLyogSWYgemVybywgc2tpcCB3YXRjaGRvZyBwcm9ncmFtbWluZyAqLworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChTUF9IRUFQX01FTV9TVVBQKQorI2RlZmluZSBTUF9IRUFQX01FTV9TVVBQIDAgLyogQXJlIER5bmFtaWMgZnVuY3MgYXZhaWxhYmxlIHRvIHNlY3VyZSBwYXJ0aXRpb24/ICovCisjZW5kaWYKKworLyoKKyAqIEluY2x1ZGUgb2YgUFNBIGRlZmluZWQgSGVhZGVyIGZpbGVzCisgKi8KKworI2lmIFBTQV9JUENfSU1QTEVNRU5URUQKKy8qIHBzYS9jbGllbnQuaDogQ29udGFpbnMgdGhlIFBTQSBDbGllbnQgQVBJIGVsZW1lbnRzICovCisjaW5jbHVkZSAicHNhL2NsaWVudC5oIgorCisvKgorICogcHNhX21hbmlmZXN0L3NpZC5oOiAgTWFjcm8gZGVmaW5pdGlvbnMgZGVyaXZlZCBmcm9tIG1hbmlmZXN0IGZpbGVzIHRoYXQgbWFwIGZyb20gUm9UIFNlcnZpY2UKKyAqIG5hbWVzIHRvIFNlcnZpY2UgSURzIChTSURzKS4gUGFydGl0aW9uIG1hbmlmZXN0IHBhcnNlIGJ1aWxkIHRvb2wgbXVzdCBwcm92aWRlIHRoZSBpbXBsZW1lbnRhdGlvbgorICogb2YgdGhpcyBmaWxlLgorKi8KKyNpbmNsdWRlICJwc2FfbWFuaWZlc3Qvc2lkLmgiCisKKy8qCisgKiBwc2FfbWFuaWZlc3QvcGlkLmg6IFNlY3VyZSBQYXJ0aXRpb24gSURzCisgKiBNYWNybyBkZWZpbml0aW9ucyB0aGF0IG1hcCBmcm9tIFNlY3VyZSBQYXJ0aXRpb24gbmFtZXMgdG8gU2VjdXJlIFBhcnRpdGlvbiBJRHMuCisgKiBQYXJ0aXRpb24gbWFuaWZlc3QgcGFyc2UgYnVpbGQgdG9vbCBtdXN0IHByb3ZpZGUgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZmlsZS4KKyovCisjaW5jbHVkZSAicHNhX21hbmlmZXN0L3BpZC5oIgorI2VuZGlmCisKKyNpZiBQU0FfQ1JZUFRPX0lNUExFTUVOVEVECisvKiBwc2EvY3J5cHRvLmg6IENvbnRhaW5zIHRoZSBQU0EgQ3J5cHRvIEFQSSBlbGVtZW50cyAqLworI2luY2x1ZGUgInBzYS9jcnlwdG8uaCIKKyNlbmRpZgorCisjaWYgUFNBX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9JTVBMRU1FTlRFRAorLyogcHNhL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS5oOiBDb250YWlucyB0aGUgUFNBIElUUyBBUEkgZWxlbWVudHMgKi8KKyNpbmNsdWRlICJwc2EvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlLmgiCisjZW5kaWYKKworI2lmIFBTQV9QUk9URUNURURfU1RPUkFHRV9JTVBMRU1FTlRFRAorLyogcHNhL3Byb3RlY3RlZF9zdG9yYWdlLmg6IENvbnRhaW5zIHRoZSBQU0EgUFMgQVBJIGVsZW1lbnRzICovCisjaW5jbHVkZSAicHNhL3Byb3RlY3RlZF9zdG9yYWdlLmgiCisjZW5kaWYKKworI2lmIFBTQV9JTklUSUFMX0FUVEVTVEFUSU9OX0lNUExFTUVOVEVECisvKiBwc2EvaW5pdGlhbF9hdHRlc3RhdGlvbi5oOiBDb250YWlucyB0aGUgUFNBIEluaXRpYWwgQXR0ZXN0YXRpb24gQVBJIGVsZW1lbnRzICovCisjaW5jbHVkZSAicHNhL2luaXRpYWxfYXR0ZXN0YXRpb24uaCIKKyNlbmRpZgorCisjZW5kaWYgLyogX1BBTF9DT05GSUdfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9jb21tb24vcGFsX2RyaXZlcl9pcGNfaW50Zi5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9uc3BlL2NvbW1vbi9wYWxfZHJpdmVyX2lwY19pbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhmNzczZgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9jb21tb24vcGFsX2RyaXZlcl9pcGNfaW50Zi5jCkBAIC0wLDAgKzEsMzA1IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAicGFsX2NvbW1vbi5oIgorI2luY2x1ZGUgInBhbF9jbGllbnRfYXBpX2ludGYuaCIKKworLyoqCisgICAgQGJyaWVmICAgIC0gVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgVUFSVAorICAgIEBwYXJhbSAgICAtIHVhcnQgYmFzZSBhZGRyCisgICAgQHJldHVybiAgIC0gU1VDQ0VTUy9GQUlMVVJFCisqKi8KK2ludCBwYWxfdWFydF9pbml0X25zKHVpbnQzMl90IHVhcnRfYmFzZV9hZGRyKQoreworICAgIHBzYV9oYW5kbGVfdCAgICAgICAgICAgIHByaW50X2hhbmRsZSA9IDA7CisgICAgcHNhX3N0YXR1c190ICAgICAgICAgICAgc3RhdHVzX29mX2NhbGwgPSBQU0FfU1VDQ0VTUzsKKyAgICB1YXJ0X2ZuX3R5cGVfdCAgICAgICAgICB1YXJ0X2ZuID0gVUFSVF9JTklUOworCisgICAgcHNhX2ludmVjIGRhdGFbM10gPSB7eyZ1YXJ0X2ZuLCBzaXplb2YodWFydF9mbil9LAorICAgICAgICAgICAgICAgICAgICAgICAgIHsmdWFydF9iYXNlX2FkZHIsIHNpemVvZih1YXJ0X2Jhc2VfYWRkcil9LAorICAgICAgICAgICAgICAgICAgICAgICAgIHtOVUxMLCAwfX07CisKKyAgICBwcmludF9oYW5kbGUgPSBwYWxfaXBjX2Nvbm5lY3QoRFJJVkVSX1VBUlRfU0lELCAwKTsKKyAgICBpZiAocHJpbnRfaGFuZGxlIDwgMCkKKyAgICB7CisgICAgICAgIHJldHVybihQQUxfU1RBVFVTX0VSUk9SKTsKKyAgICB9CisKKyAgICBzdGF0dXNfb2ZfY2FsbCA9IHBhbF9pcGNfY2FsbChwcmludF9oYW5kbGUsIGRhdGEsIDMsIE5VTEwsIDApOworICAgIGlmIChzdGF0dXNfb2ZfY2FsbCAhPSBQU0FfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIHJldHVybihQQUxfU1RBVFVTX0VSUk9SKTsKKyAgICB9CisKKyAgICBwYWxfaXBjX2Nsb3NlKHByaW50X2hhbmRsZSk7CisgICAgcmV0dXJuIFBBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworLyoqCisgICAgQGJyaWVmICAgIC0gVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhlIGlucHV0IHN0cmluZyBhbmQgd3JpdGVzIGJ5dGVzIGludG8gVUFSVCBUWCBGSUZPCisgICAgQHBhcmFtICAgIC0gc3RyICAgICAgOiBJbnB1dCBTdHJpbmcKKyAgICAgICAgICAgICAgLSBkYXRhICAgICA6IFZhbHVlIGZvciBmb3JtYXQgc3BlY2lmaWVyCisgICAgQHJldHVybiAgIC0gU1VDQ0VTUy9GQUlMVVJFCisqKi8KKworaW50IHBhbF9wcmludF9ucyhjaGFyICpzdHIsIGludDMyX3QgZGF0YSkKK3sKKyAgICBpbnQgICAgICAgICAgICAgc3RyaW5nX2xlbiA9IDA7CisgICAgY2hhciAgICAgICAgICAgICpwID0gc3RyOworICAgIHBzYV9oYW5kbGVfdCAgICBwcmludF9oYW5kbGUgPSAwOworICAgIHBzYV9zdGF0dXNfdCAgICBzdGF0dXNfb2ZfY2FsbCA9IFBTQV9TVUNDRVNTOworICAgIHBhbF9zdGF0dXNfdCAgICBzdGF0dXMgPSBQQUxfU1RBVFVTX1NVQ0NFU1M7CisgICAgdWFydF9mbl90eXBlX3QgIHVhcnRfZm4gPSBVQVJUX1BSSU5UOworCisgICAgd2hpbGUgKCpwICE9ICdcMCcpCisgICAgeworICAgICAgICBzdHJpbmdfbGVuKys7CisgICAgICAgIHArKzsKKyAgICB9CisKKyAgICBwc2FfaW52ZWMgZGF0YTFbM10gPSB7eyZ1YXJ0X2ZuLCBzaXplb2YodWFydF9mbil9LAorICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyLCBzdHJpbmdfbGVuKzF9LAorICAgICAgICAgICAgICAgICAgICAgICAgICB7JmRhdGEsIHNpemVvZihkYXRhKX19OworICAgIHByaW50X2hhbmRsZSA9IHBhbF9pcGNfY29ubmVjdChEUklWRVJfVUFSVF9TSUQsIDApOworCisgICAgaWYgKHByaW50X2hhbmRsZSA8IDApCisgICAgeworICAgICAgICByZXR1cm4gUEFMX1NUQVRVU19FUlJPUjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3RhdHVzX29mX2NhbGwgPSBwYWxfaXBjX2NhbGwocHJpbnRfaGFuZGxlLCBkYXRhMSwgMywgTlVMTCwgMCk7CisgICAgICAgIGlmIChzdGF0dXNfb2ZfY2FsbCAhPSBQU0FfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdHVzID0gUEFMX1NUQVRVU19FUlJPUjsKKyAgICAgICAgfQorICAgIH0KKyAgICBwYWxfaXBjX2Nsb3NlKHByaW50X2hhbmRsZSk7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgICAgQGJyaWVmICAgICAgICAgICAtIEluaXRpYWxpemVzIGFuIGhhcmR3YXJlIHdhdGNoZG9nIHRpbWVyCisgICAgQHBhcmFtICAgICAgICAgICAtIGJhc2VfYWRkciAgICAgICA6IEJhc2UgYWRkcmVzcyBvZiB0aGUgd2F0Y2hkb2cgbW9kdWxlCisgICAgICAgICAgICAgICAgICAgICAtIHRpbWVfdXMgICAgICAgICA6IFRpbWUgaW4gbWljcm8gc2Vjb25kcworICAgICAgICAgICAgICAgICAgICAgLSB0aW1lcl90aWNrX3VzICAgOiBOdW1iZXIgb2YgdGlja3MgcGVyIG1pY3JvIHNlY29uZAorICAgIEByZXR1cm4gICAgICAgICAgLSBTVUNDRVNTL0ZBSUxVUkUKKyoqLworaW50IHBhbF93ZF90aW1lcl9pbml0X25zKGFkZHJfdCBiYXNlX2FkZHIsIHVpbnQzMl90IHRpbWVfdXMsIHVpbnQzMl90IHRpbWVyX3RpY2tfdXMpCit7CisgICAgd2RfcGFyYW1fdCAgICAgICAgICAgICAgd2RfcGFyYW07CisgICAgcHNhX2hhbmRsZV90ICAgICAgICAgICAgaGFuZGxlID0gMDsKKyAgICBwc2Ffc3RhdHVzX3QgICAgICAgICAgICBzdGF0dXNfb2ZfY2FsbCA9IFBTQV9TVUNDRVNTOworCisgICAgd2RfcGFyYW0ud2RfZm5fdHlwZSA9IFdEX0lOSVRfU0VROworICAgIHdkX3BhcmFtLndkX2Jhc2VfYWRkciA9IGJhc2VfYWRkcjsKKyAgICB3ZF9wYXJhbS53ZF90aW1lX3VzID0gdGltZV91czsKKyAgICB3ZF9wYXJhbS53ZF90aW1lcl90aWNrX3VzID0gdGltZXJfdGlja191czsKKyAgICBwc2FfaW52ZWMgaW52ZWNbMV0gPSB7eyZ3ZF9wYXJhbSwgc2l6ZW9mKHdkX3BhcmFtKX19OworCisgICAgaGFuZGxlID0gcGFsX2lwY19jb25uZWN0KERSSVZFUl9XQVRDSERPR19TSUQsIDApOworICAgIGlmIChoYW5kbGUgPCAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFBBTF9TVEFUVVNfRVJST1I7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHN0YXR1c19vZl9jYWxsID0gcGFsX2lwY19jYWxsKGhhbmRsZSwgaW52ZWMsIDEsIE5VTEwsIDApOworICAgICAgICBpZiAoc3RhdHVzX29mX2NhbGwgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhbF9pcGNfY2xvc2UoaGFuZGxlKTsKKyAgICAgICAgICAgIHJldHVybiBQQUxfU1RBVFVTX0VSUk9SOworICAgICAgICB9CisgICAgfQorICAgcGFsX2lwY19jbG9zZShoYW5kbGUpOworICAgcmV0dXJuIFBBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworLyoqCisgICAgQGJyaWVmICAgICAgICAgICAtIEVuYWJsZXMgYSBoYXJkd2FyZSB3YXRjaGRvZyB0aW1lcgorICAgIEBwYXJhbSAgICAgICAgICAgLSBiYXNlX2FkZHIgICAgICAgOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIHdhdGNoZG9nIG1vZHVsZQorICAgIEByZXR1cm4gICAgICAgICAgLSBTVUNDRVNTL0ZBSUxVUkUKKyoqLworaW50IHBhbF93ZF90aW1lcl9lbmFibGVfbnMoYWRkcl90IGJhc2VfYWRkcikKK3sKKyAgICB3ZF9wYXJhbV90ICAgICAgICAgICAgICB3ZF9wYXJhbTsKKyAgICBwc2FfaGFuZGxlX3QgICAgICAgICAgICBoYW5kbGUgPSAwOworICAgIHBzYV9zdGF0dXNfdCAgICAgICAgICAgIHN0YXR1c19vZl9jYWxsID0gUFNBX1NVQ0NFU1M7CisKKyAgICB3ZF9wYXJhbS53ZF9mbl90eXBlID0gV0RfRU5BQkxFX1NFUTsKKyAgICB3ZF9wYXJhbS53ZF9iYXNlX2FkZHIgPSBiYXNlX2FkZHI7CisgICAgd2RfcGFyYW0ud2RfdGltZV91cyA9IDA7CisgICAgd2RfcGFyYW0ud2RfdGltZXJfdGlja191cyA9IDA7CisgICAgcHNhX2ludmVjIGludmVjWzFdID0ge3smd2RfcGFyYW0sIHNpemVvZih3ZF9wYXJhbSl9fTsKKworICAgIGhhbmRsZSA9IHBhbF9pcGNfY29ubmVjdChEUklWRVJfV0FUQ0hET0dfU0lELCAwKTsKKyAgICBpZiAoaGFuZGxlIDwgMCkKKyAgICB7CisgICAgICAgIHJldHVybiBQQUxfU1RBVFVTX0VSUk9SOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzdGF0dXNfb2ZfY2FsbCA9IHBhbF9pcGNfY2FsbChoYW5kbGUsIGludmVjLCAxLCBOVUxMLCAwKTsKKyAgICAgICAgaWYgKHN0YXR1c19vZl9jYWxsICE9IFBTQV9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBwYWxfaXBjX2Nsb3NlKGhhbmRsZSk7CisgICAgICAgICAgICByZXR1cm4gUEFMX1NUQVRVU19FUlJPUjsKKyAgICAgICAgfQorICAgIH0KKyAgIHBhbF9pcGNfY2xvc2UoaGFuZGxlKTsKKyAgIHJldHVybiBQQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKKy8qKgorICAgIEBicmllZiAgICAgICAgICAgLSBEaXNhYmxlcyBhIGhhcmR3YXJlIHdhdGNoZG9nIHRpbWVyCisgICAgQHBhcmFtICAgICAgICAgICAtIGJhc2VfYWRkciAgOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIHdhdGNoZG9nIG1vZHVsZQorICAgIEByZXR1cm4gICAgICAgICAgLSBTVUNDRVNTL0ZBSUxVUkUKKyoqLworaW50IHBhbF93ZF90aW1lcl9kaXNhYmxlX25zKGFkZHJfdCBiYXNlX2FkZHIpCit7CisgICAgd2RfcGFyYW1fdCAgICAgICAgICAgICAgd2RfcGFyYW07CisgICAgcHNhX2hhbmRsZV90ICAgICAgICAgICAgaGFuZGxlID0gMDsKKyAgICBwc2Ffc3RhdHVzX3QgICAgICAgICAgICBzdGF0dXNfb2ZfY2FsbCA9IFBTQV9TVUNDRVNTOworCisgICAgd2RfcGFyYW0ud2RfZm5fdHlwZSA9IFdEX0RJU0FCTEVfU0VROworICAgIHdkX3BhcmFtLndkX2Jhc2VfYWRkciA9IGJhc2VfYWRkcjsKKyAgICB3ZF9wYXJhbS53ZF90aW1lX3VzID0gMDsKKyAgICB3ZF9wYXJhbS53ZF90aW1lcl90aWNrX3VzID0gMDsKKyAgICBwc2FfaW52ZWMgaW52ZWNbMV0gPSB7eyZ3ZF9wYXJhbSwgc2l6ZW9mKHdkX3BhcmFtKX19OworCisgICAgaGFuZGxlID0gcGFsX2lwY19jb25uZWN0KERSSVZFUl9XQVRDSERPR19TSUQsIDApOworICAgIGlmIChoYW5kbGUgPCAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFBBTF9TVEFUVVNfRVJST1I7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHN0YXR1c19vZl9jYWxsID0gcGFsX2lwY19jYWxsKGhhbmRsZSwgaW52ZWMsIDEsIE5VTEwsIDApOworICAgICAgICBpZiAoc3RhdHVzX29mX2NhbGwgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhbF9pcGNfY2xvc2UoaGFuZGxlKTsKKyAgICAgICAgICAgIHJldHVybiBQQUxfU1RBVFVTX0VSUk9SOworICAgICAgICB9CisgICAgfQorICAgcGFsX2lwY19jbG9zZShoYW5kbGUpOworICAgcmV0dXJuIFBBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworLyoqCisgICAgQGJyaWVmICAgIC0gUmVhZHMgZnJvbSBnaXZlbiBub24tdm9sYXRpbGUgYWRkcmVzcy4KKyAgICBAcGFyYW0gICAgLSBiYXNlICAgIDogQmFzZSBhZGRyZXNzIG9mIG52bWVtCisgICAgICAgICAgICAgICAgb2Zmc2V0ICA6IE9mZnNldAorICAgICAgICAgICAgICAgIGJ1ZmZlciAgOiBQb2ludGVyIHRvIHNvdXJjZSBhZGRyZXNzCisgICAgICAgICAgICAgICAgc2l6ZSAgICA6IE51bWJlciBvZiBieXRlcworICAgIEByZXR1cm4gICAtIFNVQ0NFU1MvRkFJTFVSRQorKiovCitpbnQgcGFsX252bWVtX3JlYWRfbnMoYWRkcl90IGJhc2UsIHVpbnQzMl90IG9mZnNldCwgdm9pZCAqYnVmZmVyLCBpbnQgc2l6ZSkKK3sKKyAgICBudm1lbV9wYXJhbV90ICAgbnZtZW1fcGFyYW07CisgICAgcHNhX2hhbmRsZV90ICAgIGhhbmRsZSA9IDA7CisgICAgcHNhX3N0YXR1c190ICAgIHN0YXR1c19vZl9jYWxsID0gUFNBX1NVQ0NFU1M7CisKKyAgICBudm1lbV9wYXJhbS5udm1lbV9mbl90eXBlID0gTlZNRU1fUkVBRDsKKyAgICBudm1lbV9wYXJhbS5iYXNlID0gYmFzZTsKKyAgICBudm1lbV9wYXJhbS5vZmZzZXQgPSBvZmZzZXQ7CisgICAgbnZtZW1fcGFyYW0uc2l6ZSA9IHNpemU7CisgICAgcHNhX2ludmVjIGludmVjWzFdID0ge3smbnZtZW1fcGFyYW0sIHNpemVvZihudm1lbV9wYXJhbSl9fTsKKyAgICBwc2Ffb3V0dmVjIG91dHZlY1sxXSA9IHt7YnVmZmVyLCBzaXplfX07CisKKyAgICBoYW5kbGUgPSBwYWxfaXBjX2Nvbm5lY3QoRFJJVkVSX05WTUVNX1NJRCwgMCk7CisgICAgaWYgKGhhbmRsZSA8IDApCisgICAgeworICAgICAgICByZXR1cm4gUEFMX1NUQVRVU19FUlJPUjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3RhdHVzX29mX2NhbGwgPSBwYWxfaXBjX2NhbGwoaGFuZGxlLCBpbnZlYywgMSwgb3V0dmVjLCAxKTsKKyAgICAgICAgaWYgKHN0YXR1c19vZl9jYWxsICE9IFBTQV9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBwYWxfaXBjX2Nsb3NlKGhhbmRsZSk7CisgICAgICAgICAgICByZXR1cm4gUEFMX1NUQVRVU19FUlJPUjsKKyAgICAgICAgfQorICAgIH0KKyAgIHBzYV9jbG9zZShoYW5kbGUpOworICAgcmV0dXJuIFBBTF9TVEFUVVNfU1VDQ0VTUzsKK30KKworLyoqCisgICAgQGJyaWVmICAgIC0gV3JpdGVzIGludG8gZ2l2ZW4gbm9uLXZvbGF0aWxlIGFkZHJlc3MuCisgICAgQHBhcmFtICAgIC0gYmFzZSAgICA6IEJhc2UgYWRkcmVzcyBvZiBudm1lbQorICAgICAgICAgICAgICAgIG9mZnNldCAgOiBPZmZzZXQKKyAgICAgICAgICAgICAgICBidWZmZXIgIDogUG9pbnRlciB0byBzb3VyY2UgYWRkcmVzcworICAgICAgICAgICAgICAgIHNpemUgICAgOiBOdW1iZXIgb2YgYnl0ZXMKKyAgICBAcmV0dXJuICAgLSBTVUNDRVNTL0ZBSUxVUkUKKyoqLworaW50IHBhbF9udm1lbV93cml0ZV9ucyhhZGRyX3QgYmFzZSwgdWludDMyX3Qgb2Zmc2V0LCB2b2lkICpidWZmZXIsIGludCBzaXplKQoreworICAgIG52bWVtX3BhcmFtX3QgICBudm1lbV9wYXJhbTsKKyAgICBwc2FfaGFuZGxlX3QgICAgaGFuZGxlID0gMDsKKyAgICBwc2Ffc3RhdHVzX3QgICAgc3RhdHVzX29mX2NhbGwgPSBQU0FfU1VDQ0VTUzsKKworICAgIG52bWVtX3BhcmFtLm52bWVtX2ZuX3R5cGUgPSBOVk1FTV9XUklURTsKKyAgICBudm1lbV9wYXJhbS5iYXNlID0gYmFzZTsKKyAgICBudm1lbV9wYXJhbS5vZmZzZXQgPSBvZmZzZXQ7CisgICAgbnZtZW1fcGFyYW0uc2l6ZSA9IHNpemU7CisgICAgcHNhX2ludmVjIGludmVjWzJdID0ge3smbnZtZW1fcGFyYW0sIHNpemVvZihudm1lbV9wYXJhbSl9LCB7YnVmZmVyLCBzaXplfX07CisKKyAgICBoYW5kbGUgPSBwYWxfaXBjX2Nvbm5lY3QoRFJJVkVSX05WTUVNX1NJRCwgMCk7CisgICAgaWYgKGhhbmRsZSA8IDApCisgICAgeworICAgICAgICByZXR1cm4gUEFMX1NUQVRVU19FUlJPUjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3RhdHVzX29mX2NhbGwgPSBwYWxfaXBjX2NhbGwoaGFuZGxlLCBpbnZlYywgMiwgTlVMTCwgMCk7CisgICAgICAgIGlmIChzdGF0dXNfb2ZfY2FsbCAhPSBQU0FfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgcGFsX2lwY19jbG9zZShoYW5kbGUpOworICAgICAgICAgICAgcmV0dXJuIFBBTF9TVEFUVVNfRVJST1I7CisgICAgICAgIH0KKyAgICB9CisgICBwYWxfaXBjX2Nsb3NlKGhhbmRsZSk7CisgICByZXR1cm4gUEFMX1NUQVRVU19TVUNDRVNTOworfQorCisvKioKKyAqICAgQGJyaWVmICAgIC0gVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgcGVyaXBoZXJhbHMgdXNpbmcgU1BJIGNvbW1hbmRzCisgKiAgIEBwYXJhbSAgICAtIGFkZHIgOiBhZGRyZXNzIG9mIHRoZSBwZXJpcGhlcmFsCisgKiAgICAgICAgICAgICAgIGRhdGEgOiByZWFkIGJ1ZmZlcgorICogICAgICAgICAgICAgICBsZW4gIDogbGVuZ3RoIG9mIHRoZSByZWFkIGJ1ZmZlciBpbiBieXRlcworICogICBAcmV0dXJuICAgLSBlcnJvciBzdGF0dXMKKyoqLworaW50IHBhbF9zcGlfcmVhZChhZGRyX3QgYWRkciwgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbGVuKQoreworICAgIHJldHVybiAweEZGOworfQorCisvKioKKyAqICAgQGJyaWVmICAgIC0gVGVybWluYXRlcyB0aGUgc2ltdWxhdGlvbiBhdCB0aGUgZW5kIG9mIGFsbCB0ZXN0cyBjb21wbGV0aW9uLgorICogICAgICAgICAgICAgICBCeSBkZWZhdWx0LCBpdCBwdXQgY3B1cyBpbnRvIHBvd2VyIGRvd24gbW9kZS4KKyAqICAgQHBhcmFtICAgIC0gdm9pZAorICogICBAcmV0dXJuICAgLSB2b2lkCisqKi8KK3ZvaWQgcGFsX3Rlcm1pbmF0ZV9zaW11bGF0aW9uKHZvaWQpCit7CisgICAgLyogQWRkIGxvZ2ljIHRvIHRlcm1pbmF0ZSB0aGUgc2ltbHVhdGlvbiAqLworCisgICAgd2hpbGUoMSkKKyAgICB7CisgICAgICAgIGFzbSB2b2xhdGlsZSgiV0ZJIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9uc3BlL2NvbW1vbi9wYWxfZHJpdmVyX25zX2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9jb21tb24vcGFsX2RyaXZlcl9uc19pbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM4ZGY2YwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9jb21tb24vcGFsX2RyaXZlcl9uc19pbnRmLmMKQEAgLTAsMCArMSwxNDUgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJwYWxfY29tbW9uLmgiCisjaW5jbHVkZSAicGFsX3VhcnQuaCIKKyNpbmNsdWRlICJwYWxfbnZtZW0uaCIKKyNpbmNsdWRlICJwYWxfd2RfY21zZGsuaCIKKworLyoqCisgICAgQGJyaWVmICAgIC0gVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgVUFSVAorICAgIEBwYXJhbSAgICAtIHVhcnQgYmFzZSBhZGRyCisgICAgQHJldHVybiAgIC0gU1VDQ0VTUy9GQUlMVVJFCisqKi8KK2ludCBwYWxfdWFydF9pbml0X25zKHVpbnQzMl90IHVhcnRfYmFzZV9hZGRyKQoreworICAgIHBhbF91YXJ0X3BsMDExX2luaXQodWFydF9iYXNlX2FkZHIpOworICAgIHJldHVybiBQQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKKy8qKgorICAgIEBicmllZiAgICAtIFRoaXMgZnVuY3Rpb24gcGFyc2VzIHRoZSBpbnB1dCBzdHJpbmcgYW5kIHdyaXRlcyBieXRlcyBpbnRvIFVBUlQgVFggRklGTworICAgIEBwYXJhbSAgICAtIHN0ciAgICAgIDogSW5wdXQgU3RyaW5nCisgICAgICAgICAgICAgIC0gZGF0YSAgICAgOiBWYWx1ZSBmb3IgZm9ybWF0IHNwZWNpZmllcgorICAgIEByZXR1cm4gICAtIFNVQ0NFU1MvRkFJTFVSRQorKiovCisKK2ludCBwYWxfcHJpbnRfbnMoY2hhciAqc3RyLCBpbnQzMl90IGRhdGEpCit7CisgICAgcGFsX3VhcnRfcGwwMTFfcHJpbnQoc3RyLCBkYXRhKTsKKyAgICByZXR1cm4gUEFMX1NUQVRVU19TVUNDRVNTOworfQorCisvKioKKyAgICBAYnJpZWYgICAgICAgICAgIC0gSW5pdGlhbGl6ZXMgYW4gaGFyZHdhcmUgd2F0Y2hkb2cgdGltZXIKKyAgICBAcGFyYW0gICAgICAgICAgIC0gYmFzZV9hZGRyICAgICAgIDogQmFzZSBhZGRyZXNzIG9mIHRoZSB3YXRjaGRvZyBtb2R1bGUKKyAgICAgICAgICAgICAgICAgICAgIC0gdGltZV91cyAgICAgICAgIDogVGltZSBpbiBtaWNybyBzZWNvbmRzCisgICAgICAgICAgICAgICAgICAgICAtIHRpbWVyX3RpY2tfdXMgICA6IE51bWJlciBvZiB0aWNrcyBwZXIgbWljcm8gc2Vjb25kCisgICAgQHJldHVybiAgICAgICAgICAtIFNVQ0NFU1MvRkFJTFVSRQorKiovCitpbnQgcGFsX3dkX3RpbWVyX2luaXRfbnMoYWRkcl90IGJhc2VfYWRkciwgdWludDMyX3QgdGltZV91cywgdWludDMyX3QgdGltZXJfdGlja191cykKK3sKKyAgICByZXR1cm4ocGFsX3dkX2Ntc2RrX2luaXQoYmFzZV9hZGRyLHRpbWVfdXMsIHRpbWVyX3RpY2tfdXMpKTsKK30KKworLyoqCisgICAgQGJyaWVmICAgICAgICAgICAtIEVuYWJsZXMgYSBoYXJkd2FyZSB3YXRjaGRvZyB0aW1lcgorICAgIEBwYXJhbSAgICAgICAgICAgLSBiYXNlX2FkZHIgICAgICAgOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIHdhdGNoZG9nIG1vZHVsZQorICAgIEByZXR1cm4gICAgICAgICAgLSBTVUNDRVNTL0ZBSUxVUkUKKyoqLworaW50IHBhbF93ZF90aW1lcl9lbmFibGVfbnMoYWRkcl90IGJhc2VfYWRkcikKK3sKKyAgICByZXR1cm4ocGFsX3dkX2Ntc2RrX2VuYWJsZShiYXNlX2FkZHIpKTsKK30KKworLyoqCisgICAgQGJyaWVmICAgICAgICAgICAtIERpc2FibGVzIGEgaGFyZHdhcmUgd2F0Y2hkb2cgdGltZXIKKyAgICBAcGFyYW0gICAgICAgICAgIC0gYmFzZV9hZGRyICA6IEJhc2UgYWRkcmVzcyBvZiB0aGUgd2F0Y2hkb2cgbW9kdWxlCisgICAgQHJldHVybiAgICAgICAgICAtIFNVQ0NFU1MvRkFJTFVSRQorKiovCitpbnQgcGFsX3dkX3RpbWVyX2Rpc2FibGVfbnMoYWRkcl90IGJhc2VfYWRkcikKK3sKKyAgICByZXR1cm4gKHBhbF93ZF9jbXNka19kaXNhYmxlKGJhc2VfYWRkcikpOworfQorCisvKioKKyAgICBAYnJpZWYgICAgLSBSZWFkcyBmcm9tIGdpdmVuIG5vbi12b2xhdGlsZSBhZGRyZXNzLgorICAgIEBwYXJhbSAgICAtIGJhc2UgICAgOiBCYXNlIGFkZHJlc3Mgb2YgbnZtZW0KKyAgICAgICAgICAgICAgICBvZmZzZXQgIDogT2Zmc2V0CisgICAgICAgICAgICAgICAgYnVmZmVyICA6IFBvaW50ZXIgdG8gc291cmNlIGFkZHJlc3MKKyAgICAgICAgICAgICAgICBzaXplICAgIDogTnVtYmVyIG9mIGJ5dGVzCisgICAgQHJldHVybiAgIC0gU1VDQ0VTUy9GQUlMVVJFCisqKi8KK2ludCBwYWxfbnZtZW1fcmVhZF9ucyhhZGRyX3QgYmFzZSwgdWludDMyX3Qgb2Zmc2V0LCB2b2lkICpidWZmZXIsIGludCBzaXplKQoreworICAgIGlmIChudm1lbV9yZWFkKGJhc2UsIG9mZnNldCwgYnVmZmVyLCBzaXplKSkKKyAgICB7CisgICAgICAgIHJldHVybiBQQUxfU1RBVFVTX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBQQUxfU1RBVFVTX0VSUk9SOworICAgIH0KK30KKworLyoqCisgICAgQGJyaWVmICAgIC0gV3JpdGVzIGludG8gZ2l2ZW4gbm9uLXZvbGF0aWxlIGFkZHJlc3MuCisgICAgQHBhcmFtICAgIC0gYmFzZSAgICA6IEJhc2UgYWRkcmVzcyBvZiBudm1lbQorICAgICAgICAgICAgICAgIG9mZnNldCAgOiBPZmZzZXQKKyAgICAgICAgICAgICAgICBidWZmZXIgIDogUG9pbnRlciB0byBzb3VyY2UgYWRkcmVzcworICAgICAgICAgICAgICAgIHNpemUgICAgOiBOdW1iZXIgb2YgYnl0ZXMKKyAgICBAcmV0dXJuICAgLSBTVUNDRVNTL0ZBSUxVUkUKKyoqLworaW50IHBhbF9udm1lbV93cml0ZV9ucyhhZGRyX3QgYmFzZSwgdWludDMyX3Qgb2Zmc2V0LCB2b2lkICpidWZmZXIsIGludCBzaXplKQoreworICAgIGlmIChudm1lbV93cml0ZShiYXNlLCBvZmZzZXQsIGJ1ZmZlciwgc2l6ZSkpCisgICAgeworICAgICAgICByZXR1cm4gUEFMX1NUQVRVU19TVUNDRVNTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gUEFMX1NUQVRVU19FUlJPUjsKKyAgICB9Cit9CisKKy8qKgorICogICBAYnJpZWYgICAgLSBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCBwZXJpcGhlcmFscyB1c2luZyBTUEkgY29tbWFuZHMKKyAqICAgQHBhcmFtICAgIC0gYWRkciA6IGFkZHJlc3Mgb2YgdGhlIHBlcmlwaGVyYWwKKyAqICAgICAgICAgICAgICAgZGF0YSA6IHJlYWQgYnVmZmVyCisgKiAgICAgICAgICAgICAgIGxlbiAgOiBsZW5ndGggb2YgdGhlIHJlYWQgYnVmZmVyIGluIGJ5dGVzCisgKiAgIEByZXR1cm4gICAtIGVycm9yIHN0YXR1cworKiovCitpbnQgcGFsX3NwaV9yZWFkKGFkZHJfdCBhZGRyLCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBsZW4pCit7CisgICAgcmV0dXJuIDB4RkY7Cit9CisKKy8qKgorICogICBAYnJpZWYgICAgLSBUZXJtaW5hdGVzIHRoZSBzaW11bGF0aW9uIGF0IHRoZSBlbmQgb2YgYWxsIHRlc3RzIGNvbXBsZXRpb24uCisgKiAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIGl0IHB1dCBjcHVzIGludG8gcG93ZXIgZG93biBtb2RlLgorICogICBAcGFyYW0gICAgLSB2b2lkCisgKiAgIEByZXR1cm4gICAtIHZvaWQKKyoqLwordm9pZCBwYWxfdGVybWluYXRlX3NpbXVsYXRpb24odm9pZCkKK3sKKyAgICAvKiBBZGQgbG9naWMgdG8gdGVybWluYXRlIHRoZSBzaW1sdWF0aW9uICovCisKKyAgICB3aGlsZSgxKQorICAgIHsKKyAgICAgICAgYXNtIHZvbGF0aWxlKCJXRkkiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL25zcGUvY3J5cHRvL3BhbF9jcnlwdG9fY29uZmlnLmggYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL25zcGUvY3J5cHRvL3BhbF9jcnlwdG9fY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIxMWZkMQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9jcnlwdG8vcGFsX2NyeXB0b19jb25maWcuaApAQCAtMCwwICsxLDMyMyBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworLyoKKyAqIFxmaWxlIHBhbF9jcnlwdG9fY29uZmlnLmgKKyAqCisgKiBcYnJpZWYgQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBjcnlwdG8gdGVzdHMgKHNldCBvZiBkZWZpbmVzKQorICoKKyAqICBUaGlzIHNldCBvZiBjb21waWxlLXRpbWUgb3B0aW9ucyBtYXkgYmUgdXNlZCB0byBlbmFibGUKKyAqICBvciBkaXNhYmxlIGZlYXR1cmVzIHNlbGVjdGl2ZWx5IGZvciBjcnlwdG8gdGVzdCBzdWl0ZQorICovCisKKyNpZm5kZWYgX1BBTF9DUllQVE9fQ09ORklHX0hfCisjZGVmaW5lIF9QQUxfQ1JZUFRPX0NPTkZJR19IXworLyoqCisgKiBcZGVmIEFSQ0hfVEVTVF9SU0EKKyAqCisgKiBFbmFibGUgdGhlIFJTQSBwdWJsaWMta2V5IGNyeXB0b3N5c3RlbS4KKyAqIEJ5IGRlZmF1bHQgYWxsIHN1cHBvcnRlZCBrZXlzIGFyZSBlbmFibGVkLgorICoKKyAqIENvbW1lbnQgbWFjcm9zIHRvIGRpc2FibGUgdGhlIHR5cGVzCisgKi8KKyNkZWZpbmUgQVJDSF9URVNUX1JTQQorI2RlZmluZSBBUkNIX1RFU1RfUlNBXzEwMjQKKyNkZWZpbmUgQVJDSF9URVNUX1JTQV8yMDQ4CisjZGVmaW5lIEFSQ0hfVEVTVF9SU0FfMzA3MgorCisvKioKKyAqIFxkZWYgIEFSQ0hfVEVTVF9FQ0MKKyAqIFxkZWYgIEFSQ0hfVEVTVF9FQ0NfQ1VSVkVfU0VDUFhYWFIxCisgKgorICogRW5hYmxlIHRoZSBlbGxpcHRpYyBjdXJ2ZQorICogRW5hYmxlIHNwZWNpZmljIGN1cnZlcyB3aXRoaW4gdGhlIEVsbGlwdGljIEN1cnZlCisgKiBtb2R1bGUuICBCeSBkZWZhdWx0IGFsbCBzdXBwb3J0ZWQgY3VydmVzIGFyZSBlbmFibGVkLgorICoKKyAqIFJlcXVpcmVzOiBBUkNIX1RFU1RfRUNDCisgKiBDb21tZW50IG1hY3JvcyB0byBkaXNhYmxlIHRoZSBjdXJ2ZQorICovCisjZGVmaW5lIEFSQ0hfVEVTVF9FQ0MKKyNkZWZpbmUgQVJDSF9URVNUX0VDQ19DVVJWRV9TRUNQMTkyUjEKKyNkZWZpbmUgQVJDSF9URVNUX0VDQ19DVVJWRV9TRUNQMjI0UjEKKyNkZWZpbmUgQVJDSF9URVNUX0VDQ19DVVJWRV9TRUNQMjU2UjEKKyNkZWZpbmUgQVJDSF9URVNUX0VDQ19DVVJWRV9TRUNQMzg0UjEKKworLyoqCisgKiBcZGVmIEFSQ0hfVEVTVF9BRVMKKyAqCisgKiBFbmFibGUgdGhlIEFFUyBibG9jayBjaXBoZXIuCisgKiBCeSBkZWZhdWx0IGFsbCBzdXBwb3J0ZWQga2V5cyBhcmUgZW5hYmxlZC4KKyAqCisgKiBDb21tZW50IG1hY3JvcyB0byBkaXNhYmxlIHRoZSB0eXBlcworICovCisjZGVmaW5lIEFSQ0hfVEVTVF9BRVMKKyNkZWZpbmUgQVJDSF9URVNUX0FFU18xMjgKKyNkZWZpbmUgQVJDSF9URVNUX0FFU18xOTIKKyNkZWZpbmUgQVJDSF9URVNUX0FFU18yNTYKKyNkZWZpbmUgQVJDSF9URVNUX0FFU181MTIKKworLyoqCisgKiBcZGVmICBBUkNIX1RFU1RfREVTCisgKgorICogRW5hYmxlIHRoZSBERVMgYmxvY2sgY2lwaGVyLgorICogQnkgZGVmYXVsdCBhbGwgc3VwcG9ydGVkIGtleXMgYXJlIGVuYWJsZWQuCisgKgorICogQ29tbWVudCBtYWNyb3MgdG8gZGlzYWJsZSB0aGUgdHlwZXMKKyAqLworLy8jZGVmaW5lIEFSQ0hfVEVTVF9ERVMKKy8vI2RlZmluZSBBUkNIX1RFU1RfREVTXzFLRVkKKy8vI2RlZmluZSBBUkNIX1RFU1RfREVTXzJLRVkKKy8vI2RlZmluZSBBUkNIX1RFU1RfREVTXzNLRVkKKworLyoqCisgKiBcZGVmICBBUkNIX1RFU1RfUkFXCisgKgorICogQSAia2V5IiBvZiB0aGlzIHR5cGUgY2Fubm90IGJlIHVzZWQgZm9yIGFueSBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbi4KKyAqIEFwcGxpY2F0aW9ucyBtYXkgdXNlIHRoaXMgdHlwZSB0byBzdG9yZSBhcmJpdHJhcnkgZGF0YSBpbiB0aGUga2V5c3RvcmUuCisgKi8KKyNkZWZpbmUgQVJDSF9URVNUX1JBVworCisvKioKKyAqIFxkZWYgQVJDSF9URVNUX0NJUEVSCisgKgorICogRW5hYmxlIHRoZSBnZW5lcmljIGNpcGhlciBsYXllci4KKyAqLworCisjZGVmaW5lIEFSQ0hfVEVTVF9DSVBFUgorCisvKioKKyAqIFxkZWYgQVJDSF9URVNUX0FSQzQKKyAqCisgKiBFbmFibGUgdGhlIEFSQzQga2V5IHR5cGUuCisgKi8KKy8vI2RlZmluZSBBUkNIX1RFU1RfQVJDNAorCisvKioKKyAqIFxkZWYgQVJDSF9URVNUX0NJUEVSX01PREVfQ1RSCisgKgorICogRW5hYmxlIENvdW50ZXIgQmxvY2sgQ2lwaGVyIG1vZGUgKENUUikgZm9yIHN5bW1ldHJpYyBjaXBoZXJzLgorICoKKyAqIFJlcXVpcmVzOiBBUkNIX1RFU1RfQ0lQRVIKKyAqLworI2RlZmluZSBBUkNIX1RFU1RfQ0lQRVJfTU9ERV9DVFIKKworLyoqCisgKiBcZGVmIEFSQ0hfVEVTVF9DSVBFUl9NT0RFX0NGQgorICoKKyAqIEVuYWJsZSBDaXBoZXIgRmVlZGJhY2sgbW9kZSAoQ0ZCKSBmb3Igc3ltbWV0cmljIGNpcGhlcnMuCisgKgorICogUmVxdWlyZXM6IEFSQ0hfVEVTVF9DSVBFUgorICovCisjZGVmaW5lIEFSQ0hfVEVTVF9DSVBFUl9NT0RFX0NGQgorCisvKioKKyAqIFxkZWYgQVJDSF9URVNUX0NJUEVSX01PREVfQ0JDCisgKgorICogRW5hYmxlIENpcGhlciBCbG9jayBDaGFpbmluZyBtb2RlIChDQkMpIGZvciBzeW1tZXRyaWMgY2lwaGVycy4KKyAqCisgKiBSZXF1aXJlczogQVJDSF9URVNUX0NJUEVSCisgKi8KKyNkZWZpbmUgQVJDSF9URVNUX0NJUEVSX01PREVfQ0JDCisKKy8qKgorICogXGRlZiBBUkNIX1RFU1RfQ1RSX0FFUworICoKKyAqIFJlcXVpcmVzOiBBUkNIX1RFU1RfQ0lQRVIsIEFSQ0hfVEVTVF9BRVMsIEFSQ0hfVEVTVF9DSVBFUl9NT0RFX0NUUgorICovCisjZGVmaW5lIEFSQ0hfVEVTVF9DVFJfQUVTCisKKy8qKgorICogXGRlZiBBUkNIX1RFU1RfQ0JDX0FFUworICoKKyAqIFJlcXVpcmVzOiBBUkNIX1RFU1RfQ0lQRVIsIEFSQ0hfVEVTVF9BRVMsIEFSQ0hfVEVTVF9DSVBFUl9NT0RFX0NCQworICoKKyAqIENvbW1lbnQgbWFjcm9zIHRvIGRpc2FibGUgdGhlIHR5cGVzCisgKi8KKyNkZWZpbmUgQVJDSF9URVNUX0NCQ19BRVMKKyNkZWZpbmUgQVJDSF9URVNUX0NCQ19BRVNfTk9fUEFERElORworCisvKioKKyAqIFxkZWYgQVJDSF9URVNUX0NCQ19OT19QQURESU5HCisgKgorICogUmVxdWlyZXM6IEFSQ0hfVEVTVF9DSVBFUiwgQVJDSF9URVNUX0NJUEVSX01PREVfQ0JDCisgKgorICogQ29tbWVudCBtYWNyb3MgdG8gZGlzYWJsZSB0aGUgdHlwZXMKKyAqLworI2RlZmluZSBBUkNIX1RFU1RfQ0JDX05PX1BBRERJTkcKKworLyoqCisgKiBcZGVmIEFSQ0hfVEVTVF9DRkJfQUVTCisgKgorICogUmVxdWlyZXM6IEFSQ0hfVEVTVF9DSVBFUiwgQVJDSF9URVNUX0FFUywgQVJDSF9URVNUX0NJUEVSX01PREVfQ0ZCCisgKi8KKyNkZWZpbmUgQVJDSF9URVNUX0NGQl9BRVMKKworLyoqCisgKiBcZGVmIEFSQ0hfVEVTVF9QS0NTMVYxNV8qCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIFBLQ1MjMSB2MS41IGVuY29kaW5nLgorICogRW5hYmxlIHN1cHBvcnQgZm9yIFBLQ1MjMSB2MS41IG9wZXJhdGlvbnMuCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgUlNBLU9BRVAKKyAqCisgKiBSZXF1aXJlczogQVJDSF9URVNUX1JTQSwgQVJDSF9URVNUX1BLQ1MxVjE1CisgKgorICogQ29tbWVudCBtYWNyb3MgdG8gZGlzYWJsZSB0aGUgdHlwZXMKKyAqLworI2RlZmluZSBBUkNIX1RFU1RfUEtDUzFWMTUKKyNkZWZpbmUgQVJDSF9URVNUX1JTQV9QS0NTMVYxNV9TSUdOCisjZGVmaW5lIEFSQ0hfVEVTVF9SU0FfUEtDUzFWMTVfU0lHTl9SQVcKKyNkZWZpbmUgQVJDSF9URVNUX1JTQV9QS0NTMVYxNV9DUllQVAorI2RlZmluZSBBUkNIX1RFU1RfUlNBX09BRVAKKworLyoqCisgKiBcZGVmIEFSQ0hfVEVTVF9DQkNfUEtDUzcKKyAqCisgKiBSZXF1aXJlczogQVJDSF9URVNUX0NJUEVSX01PREVfQ0JDCisgKgorICogQ29tbWVudCBtYWNyb3MgdG8gZGlzYWJsZSB0aGUgdHlwZXMKKyAqLworI2RlZmluZSBBUkNIX1RFU1RfQ0JDX1BLQ1M3CisKKy8qKgorICogXGRlZiBBUkNIX1RFU1RfQVNZTU1FVFJJQ19FTkNSWVBUSU9OCisgKgorICogRW5hYmxlIHN1cHBvcnQgZm9yIEFzeW1tZXRyaWMgZW5jcnlwdGlvbiBhbGdvcml0aG1zCisgKi8KKyNkZWZpbmUgQVJDSF9URVNUX0FTWU1NRVRSSUNfRU5DUllQVElPTgorCisvKioKKyAqIFxkZWYgQVJDSF9URVNUX0hBU0gKKyAqCisgKiBFbmFibGUgdGhlIGhhc2ggYWxnb3JpdGhtLgorICovCisjZGVmaW5lIEFSQ0hfVEVTVF9IQVNICisKKy8qKgorICogXGRlZiAgQVJDSF9URVNUX0hNQUMKKyAqCisgKiBUaGUga2V5IHBvbGljeSBkZXRlcm1pbmVzIHdoaWNoIHVuZGVybHlpbmcgaGFzaCBhbGdvcml0aG0gdGhlIGtleSBjYW4gYmUKKyAqIHVzZWQgZm9yLgorICoKKyAqIFJlcXVpcmVzOiBBUkNIX1RFU1RfSEFTSAorICovCisjZGVmaW5lIEFSQ0hfVEVTVF9ITUFDCisKKy8qKgorICogXGRlZiBBUkNIX1RFU1RfTURYCisgKiBcZGVmIEFSQ0hfVEVTVF9TSEFYWFgKKyAqCisgKiBFbmFibGUgdGhlIE1EWCBhbGdvcml0aG0uCisgKiBFbmFibGUgdGhlIFNIQVhYWCBhbGdvcml0aG0uCisgKgorICogUmVxdWlyZXM6IEFSQ0hfVEVTVF9IQVNICisgKgorICogQ29tbWVudCBtYWNyb3MgdG8gZGlzYWJsZSB0aGUgdHlwZXMKKyAqLworLy8jZGVmaW5lIEFSQ0hfVEVTVF9NRDIKKy8vI2RlZmluZSBBUkNIX1RFU1RfTUQ0CisvLyNkZWZpbmUgQVJDSF9URVNUX01ENQorLy8jZGVmaW5lIEFSQ0hfVEVTVF9SSVBFTUQxNjAKKyNkZWZpbmUgQVJDSF9URVNUX1NIQTEKKyNkZWZpbmUgQVJDSF9URVNUX1NIQTIyNAorI2RlZmluZSBBUkNIX1RFU1RfU0hBMjU2CisjZGVmaW5lIEFSQ0hfVEVTVF9TSEEzODQKKyNkZWZpbmUgQVJDSF9URVNUX1NIQTUxMgorLy8jZGVmaW5lIEFSQ0hfVEVTVF9TSEE1MTJfMjI0CisvLyNkZWZpbmUgQVJDSF9URVNUX1NIQTUxMl8yNTYKKy8vI2RlZmluZSBBUkNIX1RFU1RfU0hBM18yMjQKKy8vI2RlZmluZSBBUkNIX1RFU1RfU0hBM18yNTYKKy8vI2RlZmluZSBBUkNIX1RFU1RfU0hBM18zODQKKy8vI2RlZmluZSBBUkNIX1RFU1RfU0hBM181MTIKKworLyoqCisgKiBcZGVmIEFSQ0hfVEVTVF9IS0RGCisgKgorICogRW5hYmxlIHRoZSBIS0RGIGFsZ29yaXRobSAoUkZDIDU4NjkpLgorICoKKyAqIFJlcXVpcmVzOiBBUkNIX1RFU1RfSEFTSAorKi8KKyNkZWZpbmUgQVJDSF9URVNUX0hLREYKKworLyoqCisgKiBcZGVmIEFSQ0hfVEVTVF94TUFDCisgKgorICogRW5hYmxlIHRoZSB4TUFDIChDaXBoZXIvSGFzaC9HLWJhc2VkIE1lc3NhZ2UgQXV0aGVudGljYXRpb24gQ29kZSkgbW9kZSBmb3IgYmxvY2sKKyAqIGNpcGhlcnMuCisgKiBSZXF1aXJlczogQVJDSF9URVNUX0FFUyBvciBBUkNIX1RFU1RfREVTCisgKgorICogQ29tbWVudCBtYWNyb3MgdG8gZGlzYWJsZSB0aGUgdHlwZXMKKyAqLworI2RlZmluZSBBUkNIX1RFU1RfQ01BQworI2RlZmluZSBBUkNIX1RFU1RfR01BQworI2RlZmluZSBBUkNIX1RFU1RfSE1BQworCisvKioKKyAqIFxkZWYgQVJDSF9URVNUX0NDTQorICoKKyAqIEVuYWJsZSB0aGUgQ291bnRlciB3aXRoIENCQy1NQUMgKENDTSkgbW9kZSBmb3IgMTI4LWJpdCBibG9jayBjaXBoZXIuCisgKgorICogUmVxdWlyZXM6IEFSQ0hfVEVTVF9BRVMKKyAqLworI2RlZmluZSBBUkNIX1RFU1RfQ0NNCisKKy8qKgorICogXGRlZiBBUkNIX1RFU1RfR0NNCisgKgorICogRW5hYmxlIHRoZSBHYWxvaXMvQ291bnRlciBNb2RlIChHQ00pIGZvciBBRVMuCisgKgorICogUmVxdWlyZXM6IEFSQ0hfVEVTVF9BRVMKKyAqCisgKi8KKyNkZWZpbmUgQVJDSF9URVNUX0dDTQorCisvKioKKyAqIFxkZWYgQVJDSF9URVNUX1RSVU5DQVRFRF9NQUMKKyAqCisgKiBFbmFibGUgc3VwcG9ydCBmb3IgUkZDIDYwNjYgdHJ1bmNhdGVkIEhNQUMgaW4gU1NMLgorICoKKyAqIENvbW1lbnQgdGhpcyBtYWNybyB0byBkaXNhYmxlIHN1cHBvcnQgZm9yIHRydW5jYXRlZCBITUFDIGluIFNTTAorICovCisjZGVmaW5lIEFSQ0hfVEVTVF9UUlVOQ0FURURfTUFDCisKKworLyoqCisgKiBcZGVmIEFSQ0hfVEVTVF9FQ0RICisgKgorICogRW5hYmxlIHRoZSBlbGxpcHRpYyBjdXJ2ZSBEaWZmaWUtSGVsbG1hbiBsaWJyYXJ5LgorICoKKyAqIFJlcXVpcmVzOiBBUkNIX1RFU1RfRUNDCisgKi8KKyNkZWZpbmUgQVJDSF9URVNUX0VDREgKKworLyoqCisgKiBcZGVmIEFSQ0hfVEVTVF9FQ0RTQQorICoKKyAqIEVuYWJsZSB0aGUgZWxsaXB0aWMgY3VydmUgRFNBIGxpYnJhcnkuCisgKiBSZXF1aXJlczogQVJDSF9URVNUX0VDQworICovCisjZGVmaW5lIEFSQ0hfVEVTVF9FQ0RTQQorCisvKioKKyAqIFxkZWYgQVJDSF9URVNUX0RFVEVSTUlOSVNUSUNfRUNEU0EKKyAqCisgKiBFbmFibGUgZGV0ZXJtaW5pc3RpYyBFQ0RTQSAoUkZDIDY5NzkpLgorKi8KKyNkZWZpbmUgQVJDSF9URVNUX0RFVEVSTUlOSVNUSUNfRUNEU0EKKworI2luY2x1ZGUgInBhbF9jcnlwdG9fY29uZmlnX2NoZWNrLmgiCisKKyNlbmRpZiAvKiBfUEFMX0NSWVBUT19DT05GSUdfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9jcnlwdG8vcGFsX2NyeXB0b19jb25maWdfY2hlY2suaCBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9jcnlwdG8vcGFsX2NyeXB0b19jb25maWdfY2hlY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMThhNzg1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9uc3BlL2NyeXB0by9wYWxfY3J5cHRvX2NvbmZpZ19jaGVjay5oCkBAIC0wLDAgKzEsMjIzIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisvKioKKyAqIFxmaWxlIHBhbF9jcnlwdG9fY29uZmlnX2NoZWNrLmgKKyAqCisgKiBcYnJpZWYgQ29uc2lzdGVuY3kgY2hlY2tzIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMKKyAqCisgKi8KKworI2lmbmRlZiBfUEFMX0NSWVBUT19DT05GSUdfQ0hFQ0tfSF8KKyNkZWZpbmUgX1BBTF9DUllQVE9fQ09ORklHX0NIRUNLX0hfCisKKyNpZiBkZWZpbmVkKEFSQ0hfVEVTVF9SU0FfMTAyNCkgJiYgIWRlZmluZWQoQVJDSF9URVNUX1JTQSkKKyNlcnJvciAiQVJDSF9URVNUX1JTQV8xMDI0IGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoQVJDSF9URVNUX1JTQV8yMDQ4KSAmJiAhZGVmaW5lZChBUkNIX1RFU1RfUlNBKQorI2Vycm9yICJBUkNIX1RFU1RfUlNBXzIwNDggZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChBUkNIX1RFU1RfUlNBXzMwNzIpICYmICFkZWZpbmVkKEFSQ0hfVEVTVF9SU0EpCisjZXJyb3IgIkFSQ0hfVEVTVF9SU0FfMzA3MiBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEFSQ0hfVEVTVF9FQ0NfQ1VSVkVfU0VDUDE5MlIxKSAmJiAhZGVmaW5lZChBUkNIX1RFU1RfRUNDKQorI2Vycm9yICJBUkNIX1RFU1RfRUNDX0NVUlZFX1NFQ1AxOTJSMSBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEFSQ0hfVEVTVF9FQ0NfQ1VSVkVfU0VDUDIyNFIxKSAmJiAhZGVmaW5lZChBUkNIX1RFU1RfRUNDKQorI2Vycm9yICJBUkNIX1RFU1RfRUNDX0NVUlZFX1NFQ1AyMjRSMSBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEFSQ0hfVEVTVF9FQ0NfQ1VSVkVfU0VDUDI1NlIxKSAmJiAhZGVmaW5lZChBUkNIX1RFU1RfRUNDKQorI2Vycm9yICJBUkNIX1RFU1RfRUNDX0NVUlZFX1NFQ1AyNTZSMSBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEFSQ0hfVEVTVF9FQ0NfQ1VSVkVfU0VDUDM4NFIxKSAmJiAhZGVmaW5lZChBUkNIX1RFU1RfRUNDKQorI2Vycm9yICJBUkNIX1RFU1RfRUNDX0NVUlZFX1NFQ1AzODRSMSBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEFSQ0hfVEVTVF9BRVNfMTI4KSAmJiAhZGVmaW5lZChBUkNIX1RFU1RfQUVTKQorI2Vycm9yICJBUkNIX1RFU1RfQUVTXzEyOCBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEFSQ0hfVEVTVF9BRVNfMjU2KSAmJiAhZGVmaW5lZChBUkNIX1RFU1RfQUVTKQorI2Vycm9yICJBUkNIX1RFU1RfQUVTXzI1NiBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEFSQ0hfVEVTVF9BRVNfNTEyKSAmJiAhZGVmaW5lZChBUkNIX1RFU1RfQUVTKQorI2Vycm9yICJBUkNIX1RFU1RfQUVTXzUxMiBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEFSQ0hfVEVTVF9ERVNfMUtFWSkgJiYgIWRlZmluZWQoQVJDSF9URVNUX0RFUykKKyNlcnJvciAiQVJDSF9URVNUX0RFU18xS0VZIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoQVJDSF9URVNUX0RFU18yS0VZKSAmJiAhZGVmaW5lZChBUkNIX1RFU1RfREVTKQorI2Vycm9yICJBUkNIX1RFU1RfREVTXzJLRVkgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChBUkNIX1RFU1RfREVTXzNLRVkpICYmICFkZWZpbmVkKEFSQ0hfVEVTVF9ERVMpCisjZXJyb3IgIkFSQ0hfVEVTVF9ERVNfM0tFWSBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEFSQ0hfVEVTVF9DSVBFUl9NT0RFX0NUUikgJiYgIWRlZmluZWQoQVJDSF9URVNUX0NJUEVSKQorI2Vycm9yICJBUkNIX1RFU1RfQ0lQRVJfTU9ERV9DVFIgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChBUkNIX1RFU1RfQ0lQRVJfTU9ERV9DRkIpICYmICFkZWZpbmVkKEFSQ0hfVEVTVF9DSVBFUikKKyNlcnJvciAiQVJDSF9URVNUX0NJUEVSX01PREVfQ0ZCIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoQVJDSF9URVNUX0NJUEVSX01PREVfQ0JDKSAmJiAhZGVmaW5lZChBUkNIX1RFU1RfQ0lQRVIpCisjZXJyb3IgIkFSQ0hfVEVTVF9DSVBFUl9NT0RFX0NCQyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEFSQ0hfVEVTVF9DVFJfQUVTKSAmJlwKKyAgICAoIWRlZmluZWQoQVJDSF9URVNUX0NJUEVSKSB8fCAhZGVmaW5lZChBUkNIX1RFU1RfQUVTKSB8fCAhZGVmaW5lZChBUkNIX1RFU1RfQ0lQRVJfTU9ERV9DVFIpKQorI2Vycm9yICJBUkNIX1RFU1RfQ1RSX0FFUyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiAoZGVmaW5lZChBUkNIX1RFU1RfQ0JDX0FFUyl8fCBkZWZpbmVkKEFSQ0hfVEVTVF9DQkNfQUVTX05PX1BBRERJTkcpKSAmJlwKKyAgICAoIWRlZmluZWQoQVJDSF9URVNUX0NJUEVSKSB8fCAhZGVmaW5lZChBUkNIX1RFU1RfQUVTKSB8fCAhZGVmaW5lZChBUkNIX1RFU1RfQ0lQRVJfTU9ERV9DQkMpKQorI2Vycm9yICJBUkNIX1RFU1RfQ0JDX0FFUyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiAoZGVmaW5lZChBUkNIX1RFU1RfQ0JDX05PX1BBRERJTkcpKSAmJlwKKyAgICAoIWRlZmluZWQoQVJDSF9URVNUX0NJUEVSKSB8fCFkZWZpbmVkKEFSQ0hfVEVTVF9DSVBFUl9NT0RFX0NCQykpCisjZXJyb3IgIkFSQ0hfVEVTVF9DQkNfTk9fUEFERElORyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEFSQ0hfVEVTVF9DRkJfQUVTKSAmJlwKKyAgICAoIWRlZmluZWQoQVJDSF9URVNUX0NJUEVSKSB8fCAhZGVmaW5lZChBUkNIX1RFU1RfQUVTKSB8fCAhZGVmaW5lZChBUkNIX1RFU1RfQ0lQRVJfTU9ERV9DRkIpKQorI2Vycm9yICJBUkNIX1RFU1RfQ0ZCX0FFUyBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEFSQ0hfVEVTVF9SU0FfUEtDUzFWMTVfU0lHTikgJiZcCisgICAgKCFkZWZpbmVkKEFSQ0hfVEVTVF9SU0EpIHx8ICFkZWZpbmVkKEFSQ0hfVEVTVF9QS0NTMVYxNSkpCisjZXJyb3IgIkFSQ0hfVEVTVF9SU0FfUEtDUzFWMTVfU0lHTiBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEFSQ0hfVEVTVF9SU0FfUEtDUzFWMTVfU0lHTl9SQVcpICYmXAorICAgICghZGVmaW5lZChBUkNIX1RFU1RfUlNBKSB8fCAhZGVmaW5lZChBUkNIX1RFU1RfUEtDUzFWMTUpKQorI2Vycm9yICJBUkNIX1RFU1RfUlNBX1BLQ1MxVjE1X1NJR05fUkFXIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoQVJDSF9URVNUX1JTQV9QS0NTMVYxNV9DUllQVCkgJiZcCisgICAgKCFkZWZpbmVkKEFSQ0hfVEVTVF9SU0EpIHx8ICFkZWZpbmVkKEFSQ0hfVEVTVF9QS0NTMVYxNSkpCisjZXJyb3IgIkFSQ0hfVEVTVF9SU0FfUEtDUzFWMTVfQ1JZUFQgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChBUkNIX1RFU1RfQ0JDX1BLQ1M3KSAmJiAhZGVmaW5lZChBUkNIX1RFU1RfQ0lQRVJfTU9ERV9DQkMpCisjZXJyb3IgIkFSQ0hfVEVTVF9DQkNfUEtDUzcgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChBUkNIX1RFU1RfSE1BQykgJiYgIWRlZmluZWQoQVJDSF9URVNUX0hBU0gpCisjZXJyb3IgIkFSQ0hfVEVTVF9ITUFDIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoQVJDSF9URVNUX01EMikgJiYgIWRlZmluZWQoQVJDSF9URVNUX0hBU0gpCisjZXJyb3IgIkFSQ0hfVEVTVF9NRDIgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChBUkNIX1RFU1RfTUQ0KSAmJiAhZGVmaW5lZChBUkNIX1RFU1RfSEFTSCkKKyNlcnJvciAiQVJDSF9URVNUX01ENCBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEFSQ0hfVEVTVF9NRDUpICYmICFkZWZpbmVkKEFSQ0hfVEVTVF9IQVNIKQorI2Vycm9yICJBUkNIX1RFU1RfTUQ1IGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoQVJDSF9URVNUX1JJUEVNRDE2MCkgJiYgIWRlZmluZWQoQVJDSF9URVNUX0hBU0gpCisjZXJyb3IgIkFSQ0hfVEVTVF9SSVBFTUQxNjAgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChBUkNIX1RFU1RfU0hBMSkgJiYgIWRlZmluZWQoQVJDSF9URVNUX0hBU0gpCisjZXJyb3IgIkFSQ0hfVEVTVF9TSEExIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoQVJDSF9URVNUX1NIQTIyNCkgJiYgIWRlZmluZWQoQVJDSF9URVNUX0hBU0gpCisjZXJyb3IgIkFSQ0hfVEVTVF9TSEEyMjQgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChBUkNIX1RFU1RfU0hBMjU2KSAmJiAhZGVmaW5lZChBUkNIX1RFU1RfSEFTSCkKKyNlcnJvciAiQVJDSF9URVNUX1NIQTI1NiBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEFSQ0hfVEVTVF9TSEE1MTIpICYmICFkZWZpbmVkKEFSQ0hfVEVTVF9IQVNIKQorI2Vycm9yICJBUkNIX1RFU1RfU0hBNTEyIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoQVJDSF9URVNUX1NIQTUxMl8yMjQpICYmICFkZWZpbmVkKEFSQ0hfVEVTVF9IQVNIKQorI2Vycm9yICJBUkNIX1RFU1RfU0hBNTEyXzIyNCBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEFSQ0hfVEVTVF9TSEE1MTJfMjU2KSAmJiAhZGVmaW5lZChBUkNIX1RFU1RfSEFTSCkKKyNlcnJvciAiQVJDSF9URVNUX1NIQTUxMl8yNTYgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChBUkNIX1RFU1RfU0hBM18yMjQpICYmICFkZWZpbmVkKEFSQ0hfVEVTVF9IQVNIKQorI2Vycm9yICJBUkNIX1RFU1RfU0hBM18yMjQgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChBUkNIX1RFU1RfU0hBM18yNTYpICYmICFkZWZpbmVkKEFSQ0hfVEVTVF9IQVNIKQorI2Vycm9yICJBUkNIX1RFU1RfU0hBM18yNTYgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChBUkNIX1RFU1RfU0hBM18zODQpICYmICFkZWZpbmVkKEFSQ0hfVEVTVF9IQVNIKQorI2Vycm9yICJBUkNIX1RFU1RfU0hBM18yNTYgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChBUkNIX1RFU1RfU0hBM181MTIpICYmICFkZWZpbmVkKEFSQ0hfVEVTVF9IQVNIKQorI2Vycm9yICJBUkNIX1RFU1RfU0hBM18yNTYgZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChBUkNIX1RFU1RfSEtERikgJiYgIWRlZmluZWQoQVJDSF9URVNUX0hBU0gpCisjZXJyb3IgIkFSQ0hfVEVTVF9IS0RGIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoQVJDSF9URVNUX0NNQUMpICYmICFkZWZpbmVkKEFSQ0hfVEVTVF9BRVMpCisjZXJyb3IgIkFSQ0hfVEVTVF9DTUFDIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoQVJDSF9URVNUX0dNQUMpICYmICFkZWZpbmVkKEFSQ0hfVEVTVF9BRVMpCisjZXJyb3IgIkFSQ0hfVEVTVF9HTUFDIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoQVJDSF9URVNUX0hNQUMpICYmICFkZWZpbmVkKEFSQ0hfVEVTVF9BRVMpCisjZXJyb3IgIkFSQ0hfVEVTVF9ITUFDIGRlZmluZWQsIGJ1dCBub3QgYWxsIHByZXJlcXVpc2l0ZXMiCisjZW5kaWYKKworI2lmIGRlZmluZWQoQVJDSF9URVNUX0NDTSkgJiYgIWRlZmluZWQoQVJDSF9URVNUX0FFUykKKyNlcnJvciAiQVJDSF9URVNUX0NDTSBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEFSQ0hfVEVTVF9HQ00pICYmICFkZWZpbmVkKEFSQ0hfVEVTVF9BRVMpCisjZXJyb3IgIkFSQ0hfVEVTVF9HQ00gZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChBUkNIX1RFU1RfRUNESCkgJiYgIWRlZmluZWQoQVJDSF9URVNUX0VDQykKKyNlcnJvciAiQVJDSF9URVNUX0VDREggZGVmaW5lZCwgYnV0IG5vdCBhbGwgcHJlcmVxdWlzaXRlcyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChBUkNIX1RFU1RfRUNEU0EpICYmICFkZWZpbmVkKEFSQ0hfVEVTVF9FQ0MpCisjZXJyb3IgIkFSQ0hfVEVTVF9FQ0RTQSBkZWZpbmVkLCBidXQgbm90IGFsbCBwcmVyZXF1aXNpdGVzIgorI2VuZGlmCisKKyNlbmRpZiAvKiBfUEFMX0NSWVBUT19DT05GSUdfQ0hFQ0tfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9jcnlwdG8vcGFsX2NyeXB0b19lbXB0eV9pbnRmLmMgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL25zcGUvY3J5cHRvL3BhbF9jcnlwdG9fZW1wdHlfaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMjhmMzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL25zcGUvY3J5cHRvL3BhbF9jcnlwdG9fZW1wdHlfaW50Zi5jCkBAIC0wLDAgKzEsMzAgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlICJwYWxfY29tbW9uLmgiCisKKy8qKgorICAgIEBicmllZiAgICAtIFRoaXMgQVBJIHdpbGwgY2FsbCB0aGUgcmVxdWVzdGVkIGNyeXB0byBmdW5jdGlvbgorICAgIEBwYXJhbSAgICAtIHR5cGUgICAgOiBmdW5jdGlvbiBjb2RlCisgICAgICAgICAgICAgICAgdmFsaXN0ICA6IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QKKyAgICBAcmV0dXJuICAgLSBlcnJvciBzdGF0dXMKKyoqLworaW50MzJfdCBwYWxfY3J5cHRvX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCkKK3sKKyAgICByZXR1cm4gUEFMX1NUQVRVU19FUlJPUjsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9jcnlwdG8vcGFsX2NyeXB0b19pbnRmLmMgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL25zcGUvY3J5cHRvL3BhbF9jcnlwdG9faW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZjZhYTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL25zcGUvY3J5cHRvL3BhbF9jcnlwdG9faW50Zi5jCkBAIC0wLDAgKzEsMzQwIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisKKyNpbmNsdWRlICJwYWxfY3J5cHRvX2ludGYuaCIKKworI2RlZmluZSAgUEFMX0tFWV9TTE9UX0NPVU5UICAzMgorCisvKioKKyAgICBAYnJpZWYgICAgLSBUaGlzIEFQSSB3aWxsIGNhbGwgdGhlIHJlcXVlc3RlZCBjcnlwdG8gZnVuY3Rpb24KKyAgICBAcGFyYW0gICAgLSB0eXBlICAgIDogZnVuY3Rpb24gY29kZQorICAgICAgICAgICAgICAgIHZhbGlzdCAgOiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0CisgICAgQHJldHVybiAgIC0gZXJyb3Igc3RhdHVzCisqKi8KK2ludDMyX3QgcGFsX2NyeXB0b19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpCit7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgaTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBzaXplLCAqbGVuZ3RoLCBzYWx0X2xlbmd0aCwgbGFiZWxfbGVuZ3RoLCBjaXBoZXJ0ZXh0X3NpemU7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgKmJ1ZmZlciwgKmNpcGhlcnRleHQ7CisgICAgY29uc3QgdWludDhfdCAgICAgICAgICAgKnNhbHQsICpsYWJlbCwgKm5vbmNlLCAqYWRkaXRpb25hbF9kYXRhOworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICpwbGFpbnRleHQ7CisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgc3RhdHVzOworICAgIGNvbnN0IHZvaWQgICAgICAgICAgICAgICpleHRyYTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICBleHRyYV9zaXplLCBjYXBhY2l0eSwgKmdlbl9jYXAsIG5vbmNlX2xlbmd0aCwgYWRkaXRpb25hbF9kYXRhX2xlbmd0aDsKKyAgICBwc2Ffa2V5X2hhbmRsZV90ICAgICAgICBoYW5kbGUsICprZXlfaGFuZGxlLCB0YXJnZXRfaGFuZGxlOworICAgIHBzYV9rZXlfdHlwZV90ICAgICAgICAgIGtleV90eXBlLCAqa2V5X3R5cGVfb3V0OworICAgIHBzYV9rZXlfcG9saWN5X3QgICAgICAgICpwb2xpY3k7CisgICAgcHNhX2tleV91c2FnZV90ICAgICAgICAgdXNhZ2UsICp1c2FnZV9vdXQ7CisgICAgcHNhX2tleV9saWZldGltZV90ICAgICAgKmxpZmV0aW1lX291dDsKKyAgICBwc2FfYWxnb3JpdGhtX3QgICAgICAgICBhbGcsICphbGdfb3V0OworICAgIHBzYV9oYXNoX29wZXJhdGlvbl90ICAgICpoYXNoX29wZXJhdGlvbjsKKyAgICBwc2FfbWFjX29wZXJhdGlvbl90ICAgICAqbWFjX29wZXJhdGlvbjsKKyAgICBwc2FfY2lwaGVyX29wZXJhdGlvbl90ICAqY2lwaGVyX29wZXJhdGlvbjsKKyAgICBwc2FfY3J5cHRvX2dlbmVyYXRvcl90ICAqZ2VuZXJhdG9yOworCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0lOSVQ6CisgICAgICAgICAgICByZXR1cm4gcHNhX2NyeXB0b19pbml0KCk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19HRU5FUkFURV9SQU5ET006CisgICAgICAgICAgICBidWZmZXIgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90Kik7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfZ2VuZXJhdGVfcmFuZG9tKGJ1ZmZlciwgc2l6ZSk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19JTVBPUlRfS0VZOgorICAgICAgICAgICAgaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIGtleV90eXBlID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV90eXBlX3QpOworICAgICAgICAgICAgYnVmZmVyID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCopOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBzdGF0dXMgPSBwc2FfaW1wb3J0X2tleShoYW5kbGUsIGtleV90eXBlLCBidWZmZXIsIHNpemUpOworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0VYUE9SVF9LRVk6CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgYnVmZmVyID0gKHVpbnQ4X3QgKikodmFfYXJnKHZhbGlzdCwgdWludDhfdCopKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgbGVuZ3RoID0gKHNpemVfdCAqKXZhX2FyZyh2YWxpc3QsIHNpemVfdCopOworICAgICAgICAgICAgc3RhdHVzID0gcHNhX2V4cG9ydF9rZXkoaGFuZGxlLCBidWZmZXIsIHNpemUsIGxlbmd0aCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fRVhQT1JUX1BVQkxJQ19LRVk6CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgYnVmZmVyID0gKHVpbnQ4X3QgKikodmFfYXJnKHZhbGlzdCwgdWludDhfdCopKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgbGVuZ3RoID0gKHNpemVfdCAqKXZhX2FyZyh2YWxpc3QsIHNpemVfdCopOworICAgICAgICAgICAgc3RhdHVzID0gcHNhX2V4cG9ydF9wdWJsaWNfa2V5KGhhbmRsZSwgYnVmZmVyLCBzaXplLCBsZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfSU5JVDoKKyAgICAgICAgICAgIHBvbGljeSA9IHZhX2FyZyh2YWxpc3QsIHBzYV9rZXlfcG9saWN5X3QqKTsKKyAgICAgICAgICAgIG1lbXNldChwb2xpY3ksIDAsIHNpemVvZihwc2Ffa2V5X3BvbGljeV90KSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0tFWV9QT0xJQ1lfU0VUX1VTQUdFOgorICAgICAgICAgICAgcG9saWN5ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV9wb2xpY3lfdCopOworICAgICAgICAgICAgdXNhZ2UgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3VzYWdlX3QpOworICAgICAgICAgICAgYWxnID0gdmFfYXJnKHZhbGlzdCwgcHNhX2FsZ29yaXRobV90KTsKKyAgICAgICAgICAgIHBzYV9rZXlfcG9saWN5X3NldF91c2FnZShwb2xpY3ksIHVzYWdlLCBhbGcpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19TRVRfS0VZX1BPTElDWToKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBwb2xpY3kgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3BvbGljeV90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX3NldF9rZXlfcG9saWN5KGhhbmRsZSwgcG9saWN5KTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0RFU1RST1lfS0VZOgorICAgICAgICAgICAgaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIHN0YXR1cyA9IHBzYV9kZXN0cm95X2tleShoYW5kbGUpOworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0dFVF9LRVlfSU5GT1JNQVRJT046CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAga2V5X3R5cGVfb3V0ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV90eXBlX3QqKTsKKyAgICAgICAgICAgIGxlbmd0aCA9IChzaXplX3QgKil2YV9hcmcodmFsaXN0LCBzaXplX3QqKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IHBzYV9nZXRfa2V5X2luZm9ybWF0aW9uKGhhbmRsZSwga2V5X3R5cGVfb3V0LCBsZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0dFVF9LRVlfUE9MSUNZOgorICAgICAgICAgICAgaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIHBvbGljeSA9IHZhX2FyZyh2YWxpc3QsIHBzYV9rZXlfcG9saWN5X3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfZ2V0X2tleV9wb2xpY3koaGFuZGxlLCBwb2xpY3kpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fS0VZX1BPTElDWV9HRVRfVVNBR0U6CisgICAgICAgICAgICBwb2xpY3kgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3BvbGljeV90Kik7CisgICAgICAgICAgICB1c2FnZV9vdXQgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3VzYWdlX3QqKTsKKyAgICAgICAgICAgICp1c2FnZV9vdXQgPSBwc2Ffa2V5X3BvbGljeV9nZXRfdXNhZ2UocG9saWN5KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fS0VZX1BPTElDWV9HRVRfQUxHT1JJVEhNOgorICAgICAgICAgICAgcG9saWN5ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV9wb2xpY3lfdCopOworICAgICAgICAgICAgYWxnX291dCA9IHZhX2FyZyh2YWxpc3QsIHBzYV9hbGdvcml0aG1fdCopOworICAgICAgICAgICAgKmFsZ19vdXQgPSBwc2Ffa2V5X3BvbGljeV9nZXRfYWxnb3JpdGhtKHBvbGljeSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0dFVF9LRVlfTElGRVRJTUU6CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgbGlmZXRpbWVfb3V0ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV9saWZldGltZV90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2dldF9rZXlfbGlmZXRpbWUoaGFuZGxlLCBsaWZldGltZV9vdXQpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fSEFTSF9TRVRVUDoKKyAgICAgICAgICAgIGhhc2hfb3BlcmF0aW9uID0gdmFfYXJnKHZhbGlzdCwgcHNhX2hhc2hfb3BlcmF0aW9uX3QqKTsKKyAgICAgICAgICAgIGFsZyA9IHZhX2FyZyh2YWxpc3QsIHBzYV9hbGdvcml0aG1fdCk7CisgICAgICAgICAgICByZXR1cm4gcHNhX2hhc2hfc2V0dXAoaGFzaF9vcGVyYXRpb24sIGFsZyk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19IQVNIX1VQREFURToKKyAgICAgICAgICAgIGhhc2hfb3BlcmF0aW9uID0gdmFfYXJnKHZhbGlzdCwgcHNhX2hhc2hfb3BlcmF0aW9uX3QqKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9oYXNoX3VwZGF0ZShoYXNoX29wZXJhdGlvbiwgYnVmZmVyLCBzaXplKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0hBU0hfVkVSSUZZOgorICAgICAgICAgICAgaGFzaF9vcGVyYXRpb24gPSB2YV9hcmcodmFsaXN0LCBwc2FfaGFzaF9vcGVyYXRpb25fdCopOworICAgICAgICAgICAgYnVmZmVyID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCopOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICByZXR1cm4gcHNhX2hhc2hfdmVyaWZ5KGhhc2hfb3BlcmF0aW9uLCBidWZmZXIsIHNpemUpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fSEFTSF9GSU5JU0g6CisgICAgICAgICAgICBoYXNoX29wZXJhdGlvbiA9IHZhX2FyZyh2YWxpc3QsIHBzYV9oYXNoX29wZXJhdGlvbl90Kik7CisgICAgICAgICAgICBidWZmZXIgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90Kik7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIGxlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCopOworICAgICAgICAgICAgcmV0dXJuIHBzYV9oYXNoX2ZpbmlzaChoYXNoX29wZXJhdGlvbiwgYnVmZmVyLCBzaXplLCBsZW5ndGgpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fSEFTSF9BQk9SVDoKKyAgICAgICAgICAgIGhhc2hfb3BlcmF0aW9uID0gdmFfYXJnKHZhbGlzdCwgcHNhX2hhc2hfb3BlcmF0aW9uX3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfaGFzaF9hYm9ydChoYXNoX29wZXJhdGlvbik7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19HRU5FUkFURV9LRVk6CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAga2V5X3R5cGUgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3R5cGVfdCk7CisgICAgICAgICAgICBzaXplICAgICA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBleHRyYSAgICA9IHZhX2FyZyh2YWxpc3QsIGNvbnN0IHZvaWQqKTsKKyAgICAgICAgICAgIGV4dHJhX3NpemUgID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfZ2VuZXJhdGVfa2V5KGhhbmRsZSwga2V5X3R5cGUsIHNpemUsIGV4dHJhLCBleHRyYV9zaXplKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0dFTkVSQVRPUl9SRUFEOgorICAgICAgICAgICAgZ2VuZXJhdG9yID0gdmFfYXJnKHZhbGlzdCwgcHNhX2NyeXB0b19nZW5lcmF0b3JfdCopOworICAgICAgICAgICAgYnVmZmVyID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCopOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICByZXR1cm4gcHNhX2dlbmVyYXRvcl9yZWFkKGdlbmVyYXRvciwgYnVmZmVyLCBzaXplKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0tFWV9ERVJJVkFUSU9OOgorICAgICAgICAgICAgZ2VuZXJhdG9yID0gdmFfYXJnKHZhbGlzdCwgcHNhX2NyeXB0b19nZW5lcmF0b3JfdCopOworICAgICAgICAgICAgaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIGFsZyA9IHZhX2FyZyh2YWxpc3QsIHBzYV9hbGdvcml0aG1fdCk7CisgICAgICAgICAgICBzYWx0ID0gdmFfYXJnKHZhbGlzdCwgY29uc3QgdWludDhfdCAqKTsKKyAgICAgICAgICAgIHNhbHRfbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIGxhYmVsID0gdmFfYXJnKHZhbGlzdCwgY29uc3QgdWludDhfdCAqKTsKKyAgICAgICAgICAgIGxhYmVsX2xlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBjYXBhY2l0eSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICByZXR1cm4gcHNhX2tleV9kZXJpdmF0aW9uKGdlbmVyYXRvciwgaGFuZGxlLCBhbGcsIHNhbHQsIHNhbHRfbGVuZ3RoLCBsYWJlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsX2xlbmd0aCwgY2FwYWNpdHkpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fR0VUX0dFTkVSQVRPUl9DQVBBQ0lUWToKKyAgICAgICAgICAgIGdlbmVyYXRvciA9IHZhX2FyZyh2YWxpc3QsIHBzYV9jcnlwdG9fZ2VuZXJhdG9yX3QqKTsKKyAgICAgICAgICAgIGdlbl9jYXAgICA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCopOworICAgICAgICAgICAgcmV0dXJuIHBzYV9nZXRfZ2VuZXJhdG9yX2NhcGFjaXR5KGdlbmVyYXRvciwgZ2VuX2NhcCk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19HRU5FUkFUT1JfSU1QT1JUX0tFWToKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBrZXlfdHlwZSA9IHZhX2FyZyh2YWxpc3QsIHBzYV9rZXlfdHlwZV90KTsKKyAgICAgICAgICAgIHNpemUgICAgID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIGdlbmVyYXRvciA9IHZhX2FyZyh2YWxpc3QsIHBzYV9jcnlwdG9fZ2VuZXJhdG9yX3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfZ2VuZXJhdG9yX2ltcG9ydF9rZXkoaGFuZGxlLCBrZXlfdHlwZSwgc2l6ZSwgZ2VuZXJhdG9yKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0dFTkVSQVRPUl9BQk9SVDoKKyAgICAgICAgICAgIGdlbmVyYXRvciA9IHZhX2FyZyh2YWxpc3QsIHBzYV9jcnlwdG9fZ2VuZXJhdG9yX3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfZ2VuZXJhdG9yX2Fib3J0KGdlbmVyYXRvcik7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19BRUFEX0VOQ1JZUFQ6CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgYWxnID0gdmFfYXJnKHZhbGlzdCwgcHNhX2FsZ29yaXRobV90KTsKKyAgICAgICAgICAgIG5vbmNlID0gdmFfYXJnKHZhbGlzdCwgY29uc3QgdWludDhfdCAqKTsKKyAgICAgICAgICAgIG5vbmNlX2xlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBhZGRpdGlvbmFsX2RhdGEgPSB2YV9hcmcodmFsaXN0LCBjb25zdCB1aW50OF90ICopOworICAgICAgICAgICAgYWRkaXRpb25hbF9kYXRhX2xlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBwbGFpbnRleHQgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90ICopOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0ID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCAqKTsKKyAgICAgICAgICAgIGNpcGhlcnRleHRfc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBsZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfYWVhZF9lbmNyeXB0KGhhbmRsZSwgYWxnLCBub25jZSwgbm9uY2VfbGVuZ3RoLCBhZGRpdGlvbmFsX2RhdGEsCisgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfZGF0YV9sZW5ndGgsIHBsYWludGV4dCwgc2l6ZSwgY2lwaGVydGV4dCwgY2lwaGVydGV4dF9zaXplLCBsZW5ndGgpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fQUVBRF9ERUNSWVBUOgorICAgICAgICAgICAgaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIGFsZyA9IHZhX2FyZyh2YWxpc3QsIHBzYV9hbGdvcml0aG1fdCk7CisgICAgICAgICAgICBub25jZSA9IHZhX2FyZyh2YWxpc3QsIGNvbnN0IHVpbnQ4X3QgKik7CisgICAgICAgICAgICBub25jZV9sZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgYWRkaXRpb25hbF9kYXRhID0gdmFfYXJnKHZhbGlzdCwgY29uc3QgdWludDhfdCAqKTsKKyAgICAgICAgICAgIGFkZGl0aW9uYWxfZGF0YV9sZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgY2lwaGVydGV4dCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QgKik7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0X3NpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgcGxhaW50ZXh0ID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCAqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2FlYWRfZGVjcnlwdChoYW5kbGUsIGFsZywgbm9uY2UsIG5vbmNlX2xlbmd0aCwgYWRkaXRpb25hbF9kYXRhLAorICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2RhdGFfbGVuZ3RoLCBjaXBoZXJ0ZXh0LCBjaXBoZXJ0ZXh0X3NpemUsIHBsYWludGV4dCwgc2l6ZSwgbGVuZ3RoKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX01BQ19TSUdOX1NFVFVQOgorICAgICAgICAgICAgbWFjX29wZXJhdGlvbiA9IHZhX2FyZyh2YWxpc3QsIHBzYV9tYWNfb3BlcmF0aW9uX3QqKTsKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBhbGcgPSB2YV9hcmcodmFsaXN0LCBwc2FfYWxnb3JpdGhtX3QpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9tYWNfc2lnbl9zZXR1cChtYWNfb3BlcmF0aW9uLCBoYW5kbGUsIGFsZyk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19NQUNfVVBEQVRFOgorICAgICAgICAgICAgbWFjX29wZXJhdGlvbiA9IHZhX2FyZyh2YWxpc3QsIHBzYV9tYWNfb3BlcmF0aW9uX3QqKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9tYWNfdXBkYXRlKG1hY19vcGVyYXRpb24sIGJ1ZmZlciwgc2l6ZSk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19NQUNfU0lHTl9GSU5JU0g6CisgICAgICAgICAgICBtYWNfb3BlcmF0aW9uID0gdmFfYXJnKHZhbGlzdCwgcHNhX21hY19vcGVyYXRpb25fdCopOworICAgICAgICAgICAgYnVmZmVyID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCopOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBsZW5ndGggPSAoc2l6ZV90ICopdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX21hY19zaWduX2ZpbmlzaChtYWNfb3BlcmF0aW9uLCBidWZmZXIsIHNpemUsIGxlbmd0aCk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19NQUNfVkVSSUZZX1NFVFVQOgorICAgICAgICAgICAgbWFjX29wZXJhdGlvbiA9IHZhX2FyZyh2YWxpc3QsIHBzYV9tYWNfb3BlcmF0aW9uX3QqKTsKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBhbGcgPSB2YV9hcmcodmFsaXN0LCBwc2FfYWxnb3JpdGhtX3QpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9tYWNfdmVyaWZ5X3NldHVwKG1hY19vcGVyYXRpb24sIGhhbmRsZSwgYWxnKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX01BQ19WRVJJRllfRklOSVNIOgorICAgICAgICAgICAgbWFjX29wZXJhdGlvbiA9IHZhX2FyZyh2YWxpc3QsIHBzYV9tYWNfb3BlcmF0aW9uX3QqKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9tYWNfdmVyaWZ5X2ZpbmlzaChtYWNfb3BlcmF0aW9uLCBidWZmZXIsIHNpemUpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fTUFDX0FCT1JUOgorICAgICAgICAgICAgbWFjX29wZXJhdGlvbiA9IHZhX2FyZyh2YWxpc3QsIHBzYV9tYWNfb3BlcmF0aW9uX3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfbWFjX2Fib3J0KG1hY19vcGVyYXRpb24pOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fQVNZTU1URVJJQ19FTkNSWVBUOgorICAgICAgICAgICAgaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIGFsZyA9IHZhX2FyZyh2YWxpc3QsIHBzYV9hbGdvcml0aG1fdCk7CisgICAgICAgICAgICBwbGFpbnRleHQgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90ICopOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBzYWx0ID0gdmFfYXJnKHZhbGlzdCwgY29uc3QgdWludDhfdCAqKTsKKyAgICAgICAgICAgIHNhbHRfbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIGNpcGhlcnRleHQgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90ICopOworICAgICAgICAgICAgY2lwaGVydGV4dF9zaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIGxlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCopOworICAgICAgICAgICAgcmV0dXJuIHBzYV9hc3ltbWV0cmljX2VuY3J5cHQoaGFuZGxlLCBhbGcsIHBsYWludGV4dCwgc2l6ZSwgc2FsdCwgc2FsdF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGNpcGhlcnRleHQsIGNpcGhlcnRleHRfc2l6ZSwgbGVuZ3RoKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0FTWU1NVEVSSUNfREVDUllQVDoKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBhbGcgPSB2YV9hcmcodmFsaXN0LCBwc2FfYWxnb3JpdGhtX3QpOworICAgICAgICAgICAgcGxhaW50ZXh0ID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCAqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgc2FsdCA9IHZhX2FyZyh2YWxpc3QsIGNvbnN0IHVpbnQ4X3QgKik7CisgICAgICAgICAgICBzYWx0X2xlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0ID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCAqKTsKKyAgICAgICAgICAgIGNpcGhlcnRleHRfc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBsZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfYXN5bW1ldHJpY19kZWNyeXB0KGhhbmRsZSwgYWxnLCBwbGFpbnRleHQsIHNpemUsIHNhbHQsIHNhbHRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0LCBjaXBoZXJ0ZXh0X3NpemUsIGxlbmd0aCk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19DSVBIRVJfRU5DUllQVF9TRVRVUDoKKyAgICAgICAgICAgIGNpcGhlcl9vcGVyYXRpb24gPSAgdmFfYXJnKHZhbGlzdCwgcHNhX2NpcGhlcl9vcGVyYXRpb25fdCAqKTsKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBhbGcgPSB2YV9hcmcodmFsaXN0LCBwc2FfYWxnb3JpdGhtX3QpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cChjaXBoZXJfb3BlcmF0aW9uLCBoYW5kbGUsIGFsZyk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19DSVBIRVJfREVDUllQVF9TRVRVUDoKKyAgICAgICAgICAgIGNpcGhlcl9vcGVyYXRpb24gPSAgdmFfYXJnKHZhbGlzdCwgcHNhX2NpcGhlcl9vcGVyYXRpb25fdCAqKTsKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBhbGcgPSB2YV9hcmcodmFsaXN0LCBwc2FfYWxnb3JpdGhtX3QpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cChjaXBoZXJfb3BlcmF0aW9uLCBoYW5kbGUsIGFsZyk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19DSVBIRVJfR0VORVJBVEVfSVY6CisgICAgICAgICAgICBjaXBoZXJfb3BlcmF0aW9uID0gIHZhX2FyZyh2YWxpc3QsIHBzYV9jaXBoZXJfb3BlcmF0aW9uX3QgKik7CisgICAgICAgICAgICBidWZmZXIgPSB2YV9hcmcodmFsaXN0LCB1aW50OF90Kik7CisgICAgICAgICAgICBzaXplID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90KTsKKyAgICAgICAgICAgIGxlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCopOworICAgICAgICAgICAgcmV0dXJuIHBzYV9jaXBoZXJfZ2VuZXJhdGVfaXYoY2lwaGVyX29wZXJhdGlvbiwgYnVmZmVyLCBzaXplLCBsZW5ndGgpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fQ0lQSEVSX1NFVF9JVjoKKyAgICAgICAgICAgIGNpcGhlcl9vcGVyYXRpb24gPSAgdmFfYXJnKHZhbGlzdCwgcHNhX2NpcGhlcl9vcGVyYXRpb25fdCAqKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgcmV0dXJuIHBzYV9jaXBoZXJfc2V0X2l2KGNpcGhlcl9vcGVyYXRpb24sIGJ1ZmZlciwgc2l6ZSk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19DSVBIRVJfVVBEQVRFOgorICAgICAgICAgICAgY2lwaGVyX29wZXJhdGlvbiA9ICB2YV9hcmcodmFsaXN0LCBwc2FfY2lwaGVyX29wZXJhdGlvbl90ICopOworICAgICAgICAgICAgcGxhaW50ZXh0ID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCAqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgY2lwaGVydGV4dCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QgKik7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0X3NpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgc2l6ZV90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2NpcGhlcl91cGRhdGUoY2lwaGVyX29wZXJhdGlvbiwgcGxhaW50ZXh0LCBzaXplLCBjaXBoZXJ0ZXh0LCBjaXBoZXJ0ZXh0X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0NJUEhFUl9GSU5JU0g6CisgICAgICAgICAgICBjaXBoZXJfb3BlcmF0aW9uID0gIHZhX2FyZyh2YWxpc3QsIHBzYV9jaXBoZXJfb3BlcmF0aW9uX3QgKik7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0ID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCAqKTsKKyAgICAgICAgICAgIGNpcGhlcnRleHRfc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBsZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfY2lwaGVyX2ZpbmlzaChjaXBoZXJfb3BlcmF0aW9uLCBjaXBoZXJ0ZXh0LCBjaXBoZXJ0ZXh0X3NpemUsIGxlbmd0aCk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19DSVBIRVJfQUJPUlQ6CisgICAgICAgICAgICBjaXBoZXJfb3BlcmF0aW9uID0gIHZhX2FyZyh2YWxpc3QsIHBzYV9jaXBoZXJfb3BlcmF0aW9uX3QgKik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2NpcGhlcl9hYm9ydChjaXBoZXJfb3BlcmF0aW9uKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0FTWU1NVEVSSUNfU0lHTjoKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBhbGcgPSB2YV9hcmcodmFsaXN0LCBwc2FfYWxnb3JpdGhtX3QpOworICAgICAgICAgICAgYnVmZmVyID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCopOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0ID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCAqKTsKKyAgICAgICAgICAgIGNpcGhlcnRleHRfc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBsZW5ndGggPSB2YV9hcmcodmFsaXN0LCBzaXplX3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfYXN5bW1ldHJpY19zaWduKGhhbmRsZSwgYWxnLCBidWZmZXIsIHNpemUsIGNpcGhlcnRleHQsIGNpcGhlcnRleHRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19BU1lNTVRFUklDX1ZFUklGWToKKyAgICAgICAgICAgIGhhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBhbGcgPSB2YV9hcmcodmFsaXN0LCBwc2FfYWxnb3JpdGhtX3QpOworICAgICAgICAgICAgYnVmZmVyID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCopOworICAgICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICBjaXBoZXJ0ZXh0ID0gdmFfYXJnKHZhbGlzdCwgdWludDhfdCAqKTsKKyAgICAgICAgICAgIGNpcGhlcnRleHRfc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHNpemVfdCk7CisgICAgICAgICAgICByZXR1cm4gcHNhX2FzeW1tZXRyaWNfdmVyaWZ5KGhhbmRsZSwgYWxnLCBidWZmZXIsIHNpemUsIGNpcGhlcnRleHQsIGNpcGhlcnRleHRfc2l6ZSk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19LRVlfQUdSRUVNRU5UOgorICAgICAgICAgICAgZ2VuZXJhdG9yID0gdmFfYXJnKHZhbGlzdCwgcHNhX2NyeXB0b19nZW5lcmF0b3JfdCopOworICAgICAgICAgICAgaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIHNpemUgPSB2YV9hcmcodmFsaXN0LCBzaXplX3QpOworICAgICAgICAgICAgYWxnID0gdmFfYXJnKHZhbGlzdCwgcHNhX2FsZ29yaXRobV90KTsKKyAgICAgICAgICAgIHJldHVybiBwc2Ffa2V5X2FncmVlbWVudChnZW5lcmF0b3IsIGhhbmRsZSwgYnVmZmVyLCBzaXplLCBhbGcpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fQUxMT0NBVEVfS0VZOgorICAgICAgICAgICAga2V5X2hhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90ICopdmFfYXJnKHZhbGlzdCwgaW50Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2FsbG9jYXRlX2tleShrZXlfaGFuZGxlKTsKKyAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0NPUFlfS0VZOgorICAgICAgICAgICAgaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QpdmFfYXJnKHZhbGlzdCwgaW50KTsKKyAgICAgICAgICAgIHRhcmdldF9oYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgcG9saWN5ID0gdmFfYXJnKHZhbGlzdCwgcHNhX2tleV9wb2xpY3lfdCopOworICAgICAgICAgICAgcmV0dXJuIHBzYV9jb3B5X2tleShoYW5kbGUsIHRhcmdldF9oYW5kbGUsIHBvbGljeSk7CisgICAgICAgIGNhc2UgUEFMX0NSWVBUT19GUkVFOgorICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IFBBTF9LRVlfU0xPVF9DT1VOVDsgaSsrKQorICAgICAgICAgICAgICAgIHBzYV9kZXN0cm95X2tleShpKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFBBTF9TVEFUVVNfVU5TVVBQT1JURURfRlVOQzsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL25zcGUvY3J5cHRvL3BhbF9jcnlwdG9faW50Zi5oIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9uc3BlL2NyeXB0by9wYWxfY3J5cHRvX2ludGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWRhYmZhCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9uc3BlL2NyeXB0by9wYWxfY3J5cHRvX2ludGYuaApAQCAtMCwwICsxLDc2IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZuZGVmIF9QQUxfQ1JZUFRPX0hfCisjZGVmaW5lIF9QQUxfQ1JZUFRPX0hfCisKKyNpbmNsdWRlICJwYWxfY29tbW9uLmgiCisKK2VudW0gY3J5cHRvX2Z1bmN0aW9uX2NvZGUgeworICAgIFBBTF9DUllQVE9fSU5JVCAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorICAgIFBBTF9DUllQVE9fR0VORVJBVEVfUkFORE9NICAgICAgICAgID0gMHgyLAorICAgIFBBTF9DUllQVE9fSU1QT1JUX0tFWSAgICAgICAgICAgICAgID0gMHgzLAorICAgIFBBTF9DUllQVE9fRVhQT1JUX0tFWSAgICAgICAgICAgICAgID0gMHg0LAorICAgIFBBTF9DUllQVE9fRVhQT1JUX1BVQkxJQ19LRVkgICAgICAgID0gMHg1LAorICAgIFBBTF9DUllQVE9fREVTVFJPWV9LRVkgICAgICAgICAgICAgID0gMHg2LAorICAgIFBBTF9DUllQVE9fR0VUX0tFWV9JTkZPICAgICAgICAgICAgID0gMHg3LAorICAgIFBBTF9DUllQVE9fS0VZX1BPTElDWV9JTklUICAgICAgICAgID0gMHg4LAorICAgIFBBTF9DUllQVE9fS0VZX1BPTElDWV9TRVRfVVNBR0UgICAgID0gMHg5LAorICAgIFBBTF9DUllQVE9fS0VZX1BPTElDWV9HRVRfVVNBR0UgICAgID0gMHhBLAorICAgIFBBTF9DUllQVE9fS0VZX1BPTElDWV9HRVRfQUxHT1JJVEhNID0gMHhCLAorICAgIFBBTF9DUllQVE9fU0VUX0tFWV9QT0xJQ1kgICAgICAgICAgID0gMHhDLAorICAgIFBBTF9DUllQVE9fR0VUX0tFWV9QT0xJQ1kgICAgICAgICAgID0gMHhELAorICAgIFBBTF9DUllQVE9fR0VUX0tFWV9JTkZPUk1BVElPTiAgICAgID0gMHhFLAorICAgIFBBTF9DUllQVE9fR0VUX0tFWV9MSUZFVElNRSAgICAgICAgID0gMHhGLAorICAgIFBBTF9DUllQVE9fSEFTSF9TRVRVUCAgICAgICAgICAgICAgID0gMHgxMSwKKyAgICBQQUxfQ1JZUFRPX0hBU0hfVVBEQVRFICAgICAgICAgICAgICA9IDB4MTIsCisgICAgUEFMX0NSWVBUT19IQVNIX1ZFUklGWSAgICAgICAgICAgICAgPSAweDEzLAorICAgIFBBTF9DUllQVE9fSEFTSF9GSU5JU0ggICAgICAgICAgICAgID0gMHgxNCwKKyAgICBQQUxfQ1JZUFRPX0hBU0hfQUJPUlQgICAgICAgICAgICAgICA9IDB4MTUsCisgICAgUEFMX0NSWVBUT19HRU5FUkFURV9LRVkgICAgICAgICAgICAgPSAweDE2LAorICAgIFBBTF9DUllQVE9fR0VORVJBVE9SX1JFQUQgICAgICAgICAgID0gMHgxNywKKyAgICBQQUxfQ1JZUFRPX0tFWV9ERVJJVkFUSU9OICAgICAgICAgICA9IDB4MTgsCisgICAgUEFMX0NSWVBUT19HRVRfR0VORVJBVE9SX0NBUEFDSVRZICAgPSAweDE5LAorICAgIFBBTF9DUllQVE9fR0VORVJBVE9SX0lNUE9SVF9LRVkgICAgID0gMHgxQSwKKyAgICBQQUxfQ1JZUFRPX0dFTkVSQVRPUl9BQk9SVCAgICAgICAgICA9IDB4MUIsCisgICAgUEFMX0NSWVBUT19BRUFEX0VOQ1JZUFQgICAgICAgICAgICAgPSAweDFDLAorICAgIFBBTF9DUllQVE9fQUVBRF9ERUNSWVBUICAgICAgICAgICAgID0gMHgxRCwKKyAgICBQQUxfQ1JZUFRPX01BQ19TSUdOX1NFVFVQICAgICAgICAgICA9IDB4MUUsCisgICAgUEFMX0NSWVBUT19NQUNfVVBEQVRFICAgICAgICAgICAgICAgPSAweDFGLAorICAgIFBBTF9DUllQVE9fTUFDX1NJR05fRklOSVNIICAgICAgICAgID0gMHgyMCwKKyAgICBQQUxfQ1JZUFRPX01BQ19WRVJJRllfU0VUVVAgICAgICAgICA9IDB4MjEsCisgICAgUEFMX0NSWVBUT19NQUNfVkVSSUZZX0ZJTklTSCAgICAgICAgPSAweDIyLAorICAgIFBBTF9DUllQVE9fTUFDX0FCT1JUICAgICAgICAgICAgICAgID0gMHgyMywKKyAgICBQQUxfQ1JZUFRPX0FTWU1NVEVSSUNfRU5DUllQVCAgICAgICA9IDB4MjQsCisgICAgUEFMX0NSWVBUT19BU1lNTVRFUklDX0RFQ1JZUFQgICAgICAgPSAweDI1LAorICAgIFBBTF9DUllQVE9fQ0lQSEVSX0VOQ1JZUFRfU0VUVVAgICAgID0gMHgyNiwKKyAgICBQQUxfQ1JZUFRPX0NJUEhFUl9ERUNSWVBUX1NFVFVQICAgICA9IDB4MkEsCisgICAgUEFMX0NSWVBUT19DSVBIRVJfR0VORVJBVEVfSVYgICAgICAgPSAweDJCLAorICAgIFBBTF9DUllQVE9fQ0lQSEVSX1NFVF9JViAgICAgICAgICAgID0gMHgyQywKKyAgICBQQUxfQ1JZUFRPX0NJUEhFUl9VUERBVEUgICAgICAgICAgICA9IDB4MkQsCisgICAgUEFMX0NSWVBUT19DSVBIRVJfRklOSVNIICAgICAgICAgICAgPSAweDJFLAorICAgIFBBTF9DUllQVE9fQ0lQSEVSX0FCT1JUICAgICAgICAgICAgID0gMHgyRiwKKyAgICBQQUxfQ1JZUFRPX0FTWU1NVEVSSUNfU0lHTiAgICAgICAgICA9IDB4MzAsCisgICAgUEFMX0NSWVBUT19BU1lNTVRFUklDX1ZFUklGWSAgICAgICAgPSAweDMxLAorICAgIFBBTF9DUllQVE9fS0VZX0FHUkVFTUVOVCAgICAgICAgICAgID0gMHgzMiwKKyAgICBQQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSAgICAgICAgICAgICA9IDB4MzMsCisgICAgUEFMX0NSWVBUT19DT1BZX0tFWSAgICAgICAgICAgICAgICAgPSAweDM0LAorICAgIFBBTF9DUllQVE9fRlJFRSAgICAgICAgICAgICAgICAgICAgID0gMHhGRSwKK307CisKK2ludDMyX3QgcGFsX2NyeXB0b19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpOworI2VuZGlmIC8qIF9QQUxfQ1JZUFRPX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fY3J5cHRvLmMgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fY3J5cHRvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUyYmRiYQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9jcnlwdG8uYwpAQCAtMCwwICsxLDM0NiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInBhbF9hdHRlc3RhdGlvbl9jcnlwdG8uaCIKKworc3RhdGljIHVpbnQzMl90ICBwdWJsaWNfa2V5X3JlZ2lzdGVyZWQgPSAwOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyB1c2VmdWxfYnVmX2hlYWQoc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFtb3VudCkKK3sKKyAgICByZXR1cm4gVXNlZnVsQnVmX0hlYWQoYnVmLCBhbW91bnQpOworfQorCitzdGF0aWMgdWludDMyX3QgY2hlY2tfaGFzaF9zaXplcyh2b2lkKQoreworICAgIGlmIChUX0NPU0VfQ1JZUFRPX1NIQTI1Nl9TSVpFICE9IFBTQV9IQVNIX1NJWkUoUFNBX0FMR19TSEFfMjU2KSkKKyAgICB7CisgICAgICAgIHJldHVybiBQQUxfQVRURVNUX0hBU0hfRkFJTDsKKyAgICB9CisKKyAgICByZXR1cm4gUEFMX0FUVEVTVF9TVUNDRVNTOworfQorCitzdGF0aWMgcHNhX2VjY19jdXJ2ZV90IGF0dGVzdF9tYXBfZWxsaXB0aWNfY3VydmVfdHlwZShpbnQzMl90IGNvc2VfY3VydmUpCit7CisgICAgcHNhX2VjY19jdXJ2ZV90IHBzYV9jdXJ2ZTsKKworICAgIC8qRml4TWU6IE1hcHBpbmcgaXMgbm90IGNvbXBsZXRlLCBtaXNzaW5nIG9uZXM6IFAzODQsIFA1MjEsIEVEMjU1MTksIEVENDQ4ICovCisgICAgc3dpdGNoIChjb3NlX2N1cnZlKQorICAgIHsKKyAgICBjYXNlIFBfMjU2OgorICAgICAgICBwc2FfY3VydmUgPSBQU0FfRUNDX0NVUlZFX1NFQ1AyNTZSMTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcHNhX2N1cnZlID0gVVNIUlRfTUFYOworICAgIH0KKworICAgIHJldHVybiBwc2FfY3VydmU7Cit9CisKK3N0YXRpYyBwc2FfYWxnb3JpdGhtX3QgY29zZV9oYXNoX2FsZ19pZF90b19wc2EoaW50MzJfdCBjb3NlX2hhc2hfYWxnX2lkKQoreworICAgIHBzYV9hbGdvcml0aG1fdCBzdGF0dXM7CisKKyAgICBzd2l0Y2ggKGNvc2VfaGFzaF9hbGdfaWQpCisgICAgeworICAgIGNhc2UgQ09TRV9BTEdfU0hBMjU2X1BST1BSSUVUQVJZOgorICAgICAgICBzdGF0dXMgPSBQU0FfQUxHX1NIQV8yNTY7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN0YXR1cyA9IFBTQV9BTEdfTUQ0OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50MzJfdCBoYXNoX2FsZ19pZF9mcm9tX3NpZ19hbGdfaWQoaW50MzJfdCBjb3NlX3NpZ19hbGdfaWQpCit7CisgICAgc3dpdGNoIChjb3NlX3NpZ19hbGdfaWQpCisgICAgeworICAgICAgICBjYXNlIENPU0VfQUxHT1JJVEhNX0VTMjU2OgorICAgICAgICAgICAgcmV0dXJuIENPU0VfQUxHX1NIQTI1Nl9QUk9QUklFVEFSWTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBJTlQzMl9NQVg7CisgICAgfQorfQorCitpbnQzMl90IHBhbF9jb3NlX2NyeXB0b19oYXNoX3N0YXJ0KHN0cnVjdCBwYWxfY29zZV9jcnlwdG9faGFzaCAqaGFzaF9jdHgsIGludDMyX3QgY29zZV9oYXNoX2FsZ19pZCkKK3sKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgICBjb3NlX3JldCA9IFBBTF9BVFRFU1RfU1VDQ0VTUzsKKyAgICBwc2Ffc3RhdHVzX3QgICAgICAgICAgICAgICAgICAgICBwc2FfcmV0OworICAgIHN0cnVjdCBwYWxfY29zZV9wc2FfY3J5cHRvX2hhc2ggKnBzYV9oYXNoX2N0eDsKKworICAgIGNvc2VfcmV0ID0gY2hlY2tfaGFzaF9zaXplcygpOworICAgIGlmIChjb3NlX3JldCkKKyAgICB7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgaWYgKHNpemVvZihzdHJ1Y3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2gpIDwgc2l6ZW9mKHN0cnVjdCBwYWxfY29zZV9wc2FfY3J5cHRvX2hhc2gpKQorICAgIHsKKyAgICAgICAgY29zZV9yZXQgPSBQQUxfQVRURVNUX0hBU0hfRkFJTDsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBwc2FfaGFzaF9jdHggPSAoc3RydWN0IHBhbF9jb3NlX3BzYV9jcnlwdG9faGFzaCAqKWhhc2hfY3R4OworICAgIHBzYV9yZXQgPSBwc2FfaGFzaF9zZXR1cCgmcHNhX2hhc2hfY3R4LT5vcGVyYXRpb24sIGNvc2VfaGFzaF9hbGdfaWRfdG9fcHNhKGNvc2VfaGFzaF9hbGdfaWQpKTsKKworICAgIGlmIChwc2FfcmV0ID09IFBBTF9BVFRFU1RfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIHBzYV9oYXNoX2N0eC0+c3RhdHVzID0gUEFMX0FUVEVTVF9TVUNDRVNTOworICAgICAgICBjb3NlX3JldCA9IFBBTF9BVFRFU1RfU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZSBpZiAocHNhX3JldCA9PSBQU0FfRVJST1JfTk9UX1NVUFBPUlRFRCkKKyAgICB7CisgICAgICAgIGNvc2VfcmV0ID0gUEFMX0FUVEVTVF9IQVNIX1VOU1VQUE9SVEVEOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb3NlX3JldCA9IFBBTF9BVFRFU1RfSEFTSF9GQUlMOworICAgIH0KKworZXJyb3I6CisgICAgcmV0dXJuIGNvc2VfcmV0OworfQorCit2b2lkIHBhbF9jb3NlX2NyeXB0b19oYXNoX3VwZGF0ZShzdHJ1Y3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2ggKmhhc2hfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGRhdGFfdG9faGFzaCkKK3sKKyAgICBzdHJ1Y3QgcGFsX2Nvc2VfcHNhX2NyeXB0b19oYXNoICpwc2FfaGFzaF9jdHg7CisKKyAgICBpZiAoc2l6ZW9mKHN0cnVjdCBwYWxfY29zZV9jcnlwdG9faGFzaCkgPCBzaXplb2Yoc3RydWN0IHBhbF9jb3NlX3BzYV9jcnlwdG9faGFzaCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcHNhX2hhc2hfY3R4ID0gKHN0cnVjdCBwYWxfY29zZV9wc2FfY3J5cHRvX2hhc2ggKiloYXNoX2N0eDsKKworICAgIGlmIChwc2FfaGFzaF9jdHgtPnN0YXR1cyA9PSBQQUxfQVRURVNUX1NVQ0NFU1MpCisgICAgeworICAgICAgICBpZiAoZGF0YV90b19oYXNoLnB0ciAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBwc2FfaGFzaF9jdHgtPnN0YXR1cyA9IHBzYV9oYXNoX3VwZGF0ZSgmcHNhX2hhc2hfY3R4LT5vcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3RvX2hhc2gucHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90b19oYXNoLmxlbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBJbnRlbnRpb25hbGx5IGRvIG5vdGhpbmcsIGp1c3QgY29tcHV0aW5nIHRoZSBzaXplIG9mIHRoZSB0b2tlbiAqLworICAgICAgICB9CisgICAgfQorfQorCitpbnQzMl90IHBhbF9jb3NlX2NyeXB0b19oYXNoX2ZpbmlzaChzdHJ1Y3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2ggKmhhc2hfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1ZiBidWZmZXJfdG9faG9sZF9yZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgKmhhc2hfcmVzdWx0KQoreworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgIGNvc2VfcmV0ID0gUEFMX0FUVEVTVF9TVUNDRVNTOworICAgIHBzYV9zdGF0dXNfdCAgICAgICAgICAgICAgICAgICAgIHBzYV9yZXQ7CisgICAgc3RydWN0IHBhbF9jb3NlX3BzYV9jcnlwdG9faGFzaCAqcHNhX2hhc2hfY3R4OworCisgICAgaWYgKHNpemVvZihzdHJ1Y3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2gpIDwgc2l6ZW9mKHN0cnVjdCBwYWxfY29zZV9wc2FfY3J5cHRvX2hhc2gpKQorICAgIHsKKyAgICAgICAgY29zZV9yZXQgPSBQQUxfQVRURVNUX0hBU0hfRkFJTDsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBwc2FfaGFzaF9jdHggPSAoc3RydWN0IHBhbF9jb3NlX3BzYV9jcnlwdG9faGFzaCAqKWhhc2hfY3R4OworCisgICAgaWYgKHBzYV9oYXNoX2N0eC0+c3RhdHVzID09IFBBTF9BVFRFU1RfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIHBzYV9yZXQgPSBwc2FfaGFzaF9maW5pc2goJnBzYV9oYXNoX2N0eC0+b3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl90b19ob2xkX3Jlc3VsdC5wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX3RvX2hvbGRfcmVzdWx0LmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKGhhc2hfcmVzdWx0LT5sZW4pKTsKKworICAgICAgICBpZiAocHNhX3JldCA9PSBQQUxfQVRURVNUX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGhhc2hfcmVzdWx0LT5wdHIgPSBidWZmZXJfdG9faG9sZF9yZXN1bHQucHRyOworICAgICAgICAgICAgY29zZV9yZXQgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHBzYV9yZXQgPT0gUFNBX0VSUk9SX0JVRkZFUl9UT09fU01BTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvc2VfcmV0ID0gUEFMX0FUVEVTVF9IQVNIX0JVRkZFUl9TSVpFOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgY29zZV9yZXQgPSBQQUxfQVRURVNUX0hBU0hfRkFJTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb3NlX3JldCA9IFBBTF9BVFRFU1RfSEFTSF9GQUlMOworICAgIH0KKworZXJyb3I6CisgICAgcmV0dXJuIGNvc2VfcmV0OworfQorCitpbnQgcGFsX2NyZWF0ZV9zaGEyNTYoc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGJ5dGVzX3RvX2hhc2gsIHN0cnVjdCBxX3VzZWZ1bF9idWYgYnVmZmVyX2Zvcl9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyAqaGFzaCkKK3sKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBQQUxfQVRURVNUX1NVQ0NFU1M7CisgICAgc3RydWN0IHBhbF9jb3NlX2NyeXB0b19oYXNoICAgaGFzaF9jdHg7CisKKyAgICBzdGF0dXMgPSBwYWxfY29zZV9jcnlwdG9faGFzaF9zdGFydCgmaGFzaF9jdHgsIENPU0VfQUxHX1NIQTI1Nl9QUk9QUklFVEFSWSk7CisgICAgaWYgKHN0YXR1cykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIHBhbF9jb3NlX2NyeXB0b19oYXNoX3VwZGF0ZSgmaGFzaF9jdHgsIGJ5dGVzX3RvX2hhc2gpOworICAgIHN0YXR1cyA9IHBhbF9jb3NlX2NyeXB0b19oYXNoX2ZpbmlzaCgmaGFzaF9jdHgsIGJ1ZmZlcl9mb3JfaGFzaCwgaGFzaCk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCit1aW50MzJfdCBwYWxfY29tcHV0ZV9oYXNoKGludDMyX3QgY29zZV9hbGdfaWQsIHN0cnVjdCBxX3VzZWZ1bF9idWYgYnVmZmVyX2Zvcl9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgKmhhc2gsIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBwcm90ZWN0ZWRfaGVhZGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHBheWxvYWQpCit7CisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgIHN0YXR1czsKKyAgICBRQ0JPUkVuY29kZUNvbnRleHQgICAgICAgICAgY2Jvcl9lbmNvZGVfY3R4OworICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyAgICAgICB0YnNfZmlyc3RfcGFydDsKKyAgICBRQ0JPUkVycm9yICAgICAgICAgICAgICAgICAgcWNib3JfcmVzdWx0OworICAgIHN0cnVjdCBwYWxfY29zZV9jcnlwdG9faGFzaCBoYXNoX2N0eCA9IHt7MH19OworICAgIGludDMyX3QgICAgICAgICAgICAgICAgICAgICBoYXNoX2FsZ19pZDsKKyAgICBVc2VmdWxCdWZfTUFLRV9TVEFDS19VQiAgICAoYnVmZmVyX2Zvcl9UQlNfZmlyc3RfcGFydCwgVF9DT1NFX1NJWkVfT0ZfVEJTKTsKKworICAgIC8qIFRoaXMgYnVpbGRzIHRoZSBDQk9SLWZvcm1hdCB0by1iZS1zaWduZWQgYnl0ZXMgKi8KKyAgICBRQ0JPUkVuY29kZV9Jbml0KCZjYm9yX2VuY29kZV9jdHgsIGJ1ZmZlcl9mb3JfVEJTX2ZpcnN0X3BhcnQpOworICAgIFFDQk9SRW5jb2RlX09wZW5BcnJheSgmY2Jvcl9lbmNvZGVfY3R4KTsKKyAgICAvKiBjb250ZXh0ICovCisgICAgUUNCT1JFbmNvZGVfQWRkU1pTdHJpbmcoJmNib3JfZW5jb2RlX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1NFX1NJR19DT05URVhUX1NUUklOR19TSUdOQVRVUkUxKTsKKyAgICAvKiBib2R5X3Byb3RlY3RlZCAqLworICAgIFFDQk9SRW5jb2RlX0FkZEJ5dGVzKCZjYm9yX2VuY29kZV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkX2hlYWRlcnMpOworICAgIC8qIHNpZ25fcHJvdGVjdGVkICovCisgICAgUUNCT1JFbmNvZGVfQWRkQnl0ZXMoJmNib3JfZW5jb2RlX2N0eCwgTlVMTF9VU0VGVUxfQlVGX0MpOworICAgIC8qIGV4dGVybmFsX2FhZCAqLworICAgIFFDQk9SRW5jb2RlX0FkZEJ5dGVzKCZjYm9yX2VuY29kZV9jdHgsIE5VTExfVVNFRlVMX0JVRl9DKTsKKyAgICAvKiBmYWtlIHBheWxvYWQgKi8KKyAgICBRQ0JPUkVuY29kZV9BZGRCeXRlcygmY2Jvcl9lbmNvZGVfY3R4LCBOVUxMX1VTRUZVTF9CVUZfQyk7CisgICAgUUNCT1JFbmNvZGVfQ2xvc2VBcnJheSgmY2Jvcl9lbmNvZGVfY3R4KTsKKworICAgIC8qIEdldCB0aGUgcmVzdWx0IGFuZCBjb252ZXJ0IGl0IHRvIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyByZXByZXNlbnRhdGlvbiAqLworICAgIHFjYm9yX3Jlc3VsdCA9IFFDQk9SRW5jb2RlX0ZpbmlzaCgmY2Jvcl9lbmNvZGVfY3R4LCAmdGJzX2ZpcnN0X3BhcnQpOworICAgIGlmIChxY2Jvcl9yZXN1bHQpCisgICAgeworICAgICAgICAvKiBNYWlubHkgbWVhbnMgdGhhdCB0aGUgcHJvdGVjdGVkX2hlYWRlcnMgd2VyZSB0b28gYmlnCisgICAgICAgICAod2hpY2ggc2hvdWxkIG5ldmVyIGhhcHBlbikgKi8KKyAgICAgICAgc3RhdHVzID0gUEFMX0FUVEVTVF9FUlJfU0lHTl9TVFJVQ1Q7CisgICAgICAgIGdvdG8gRG9uZTsKKyAgICB9CisKKyAgICAvKiBTdGFydCB0aGUgaGFzaGluZyAqLworICAgIGhhc2hfYWxnX2lkID0gaGFzaF9hbGdfaWRfZnJvbV9zaWdfYWxnX2lkKGNvc2VfYWxnX2lkKTsKKworICAgIC8qIERvbid0IGNoZWNrIGhhc2hfYWxnX2lkIGZvciBmYWlsdXJlLiBwYWxfY29zZV9jcnlwdG9faGFzaF9zdGFydCgpCisgICAgICogd2lsbCBoYW5kbGUgaXQgcHJvcGVybHkKKyAgICAgKi8KKyAgICBzdGF0dXMgPSBwYWxfY29zZV9jcnlwdG9faGFzaF9zdGFydCgmaGFzaF9jdHgsIGhhc2hfYWxnX2lkKTsKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICBnb3RvIERvbmU7CisKKyAgICAvKiBIYXNoIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBUQlMuIFRha2UgYWxsIGJ1dCB0aGUgbGFzdCB0d28KKyAgICAgKiBieXRlcy4gVGhlIGxhc3QgdHdvIGJ5dGVzIGFyZSB0aGUgZmFrZSBwYXlsb2FkIGZyb20gYWJvdmUuIEl0CisgICAgICogaXMgcmVwbGFjZWQgYnkgdGhlIHJlYWwgcGF5bG9hZCB3aGljaCBpcyBoYXNoZWQgbmV4dC4gVGhlIGZha2UKKyAgICAgKiBwYXlsb2FkIGlzIG5lZWRlZCBzbyB0aGUgYXJyYXkgY291bnQgaXMgcmlnaHQuIFRoaXMgaXMgb25lIG9mCisgICAgICogdGhlIG1haW4gdGhpbmdzIHRoYXQgbWFrZSBpdCBwb3NzaWJsZSB0byBpbXBsZW1lbnQgd2l0aCBvbmUKKyAgICAgKiBidWZmZXIgZm9yIHRoZSB3aG9sZSBjb3NlIHNpZ24xLgorICAgICAqLworICAgIHBhbF9jb3NlX2NyeXB0b19oYXNoX3VwZGF0ZSgmaGFzaF9jdHgsIHVzZWZ1bF9idWZfaGVhZCh0YnNfZmlyc3RfcGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YnNfZmlyc3RfcGFydC5sZW4gLSAyKSk7CisKKyAgICAvKiBIYXNoIHRoZSBwYXlsb2FkICovCisgICAgcGFsX2Nvc2VfY3J5cHRvX2hhc2hfdXBkYXRlKCZoYXNoX2N0eCwgcGF5bG9hZCk7CisKKyAgICAvKiBGaW5pc2ggdGhlIGhhc2ggYW5kIHNldCB1cCB0byByZXR1cm4gaXQgKi8KKyAgICBzdGF0dXMgPSBwYWxfY29zZV9jcnlwdG9faGFzaF9maW5pc2goJmhhc2hfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX2Zvcl9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCk7CisKK0RvbmU6CisgICAgcmV0dXJuIHN0YXR1czsKK30KKwordWludDMyX3QgcGFsX2ltcG9ydF9hdHRlc3Rfa2V5KGludDMyX3QgYWxnKQoreworICAgIHBzYV9rZXlfdHlwZV90ICAgYXR0ZXN0X2tleV90eXBlOworICAgIHNpemVfdCAgICAgICAgICAgcHVibGljX2tleV9zaXplOworICAgIHBzYV9zdGF0dXNfdCAgICAgc3RhdHVzID0gUFNBX1NVQ0NFU1M7CisgICAgcHNhX2tleV9wb2xpY3lfdCBwb2xpY3k7CisgICAgcHNhX2VjY19jdXJ2ZV90ICBwc2FfY3VydmU7CisgICAgcHNhX2tleV9oYW5kbGVfdCBwdWJsaWNfa2V5X2hhbmRsZTsKKworICAgIC8qIE1hcHBpbmcgb2YgQ09TRSBjdXJ2ZSB0eXBlIHRvIFBTQSBjdXJ2ZSB0eXBlcyAqLworICAgIHBzYV9jdXJ2ZSA9IGF0dGVzdF9tYXBfZWxsaXB0aWNfY3VydmVfdHlwZShQXzI1Nik7CisgICAgaWYgKHBzYV9jdXJ2ZSA9PSBVU0hSVF9NQVgpCisgICAgICAgIHJldHVybiBQQUxfQVRURVNUX0VSUk9SOworCisgICAgLyogU2V0dXAgdGhlIGtleSBwb2xpY3kgZm9yIHB1YmxpYyBrZXkgKi8KKyAgICBwb2xpY3kgPSBwc2Ffa2V5X3BvbGljeV9pbml0KCk7CisgICAgcHNhX2tleV9wb2xpY3lfc2V0X3VzYWdlKCZwb2xpY3ksIFBTQV9LRVlfVVNBR0VfVkVSSUZZLCBhbGcpOworCisgICAgc3RhdHVzID0gcHNhX2FsbG9jYXRlX2tleSgmcHVibGljX2tleV9oYW5kbGUpOworICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICBzdGF0dXMgPSBwc2Ffc2V0X2tleV9wb2xpY3kocHVibGljX2tleV9oYW5kbGUsICZwb2xpY3kpOworICAgIGlmIChzdGF0dXMgIT0gUFNBX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICBhdHRlc3Rfa2V5X3R5cGUgPSBQU0FfS0VZX1RZUEVfRUNDX1BVQkxJQ19LRVkocHNhX2N1cnZlKTsKKworICAgIC8qIFJlZ2lzdGVyIHB1YmxpYyBrZXkgdG8gY3J5cHRvIHNlcnZpY2UgKi8KKyAgICBwdWJsaWNfa2V5X3NpemUgPSBhdHRlc3Rfa2V5LnB1Ynhfa2V5X3NpemUgKyBhdHRlc3Rfa2V5LnB1Ynlfa2V5X3NpemU7CisKKyAgICBzdGF0dXMgPSBwc2FfaW1wb3J0X2tleShwdWJsaWNfa2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ZXN0X2tleV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdWludDhfdCAqKSZhdHRlc3RfcHVibGljX2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljX2tleV9zaXplICsgMSk7CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisKK3VpbnQzMl90IHBhbF9jcnlwdG9fcHViX2tleV92ZXJpZnkoaW50MzJfdCBjb3NlX2FsZ29yaXRobV9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHRva2VuX2hhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBzaWduYXR1cmUpCit7CisgICAgdWludDMyX3Qgc3RhdHVzID0gUEFMX0FUVEVTVF9TVUNDRVNTOworCisgICAgaWYgKCFwdWJsaWNfa2V5X3JlZ2lzdGVyZWQpCisgICAgeworICAgICAgICBzdGF0dXMgPSBwYWxfaW1wb3J0X2F0dGVzdF9rZXkoY29zZV9hbGdvcml0aG1faWQpOworICAgICAgICBpZiAoc3RhdHVzICE9IFBBTF9BVFRFU1RfU1VDQ0VTUykKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICAgICAgcHVibGljX2tleV9yZWdpc3RlcmVkID0gMTsKKyAgICB9CisKKy8qCisgKiBFbmFibGUgdGhlIHZlcmlmeSBmdW5jdGlvbiB3aGVuIFRydXN0ZWQgRmlybWFyZSAtIE0gU3VwcG9ydHMKKworICogIFZlcmlmeSB0aGUgc2lnbmF0dXJlIGEgaGFzaCBvciBzaG9ydCBtZXNzYWdlIHVzaW5nIGEgcHVibGljIGtleS4KKyAgICBzdGF0dXMgPSBwc2FfYXN5bW1ldHJpY192ZXJpZnkocHVibGljX2tleV9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3NlX2FsZ29yaXRobV9pZCwgdG9rZW5faGFzaC5wdHIsIHRva2VuX2hhc2gubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlLnB0ciwgc2lnbmF0dXJlLmxlbik7CisqLworICAgIHJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fY3J5cHRvLmggYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fY3J5cHRvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ2M2FkMQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9jcnlwdG8uaApAQCAtMCwwICsxLDEwMiBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2luY2x1ZGUgInBhbF9jb21tb24uaCIKKyNpbmNsdWRlICJwYWxfYXR0ZXN0YXRpb25fZWF0LmgiCisKKyNkZWZpbmUgQVRURVNUX1BVQkxJQ19LRVlfU0xPVCAgICAgICAgICAgIDQKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgdWludDhfdCAgKnB1Ynhfa2V5OworICAgIHVpbnQzMl90ICBwdWJ4X2tleV9zaXplOworICAgIHVpbnQ4X3QgICpwdWJ5X2tleTsKKyAgICB1aW50MzJfdCAgcHVieV9rZXlfc2l6ZTsKK30gZWNjX2tleV90OworCitzdHJ1Y3QgZWNjX3B1YmxpY19rZXlfdCB7CisgICAgY29uc3QgdWludDhfdCBhOworICAgIHVpbnQ4X3QgcHVibGljX2tleVtdOyAvKiBYLWNvb3JkaW5hdGUgfHwgWS1jb29yZGluYXRlICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGVjY19wdWJsaWNfa2V5X3QgYXR0ZXN0X3B1YmxpY19rZXkgPSB7CisgICAgIC8qIENvbnN0YW50IGJ5dGUgKi8KKyAgICAgMHgwNCwKKyAgICAgLyogWC1jb29yZGluYXRlICovCisgICAgIHsweDc5LCAweEVCLCAweEE5LCAweDBFLCAweDhCLCAweEY0LCAweDUwLCAweEE2LAorICAgICAgMHg3NSwgMHgxNSwgMHg3NiwgMHhBRCwgMHg0NSwgMHg5OSwgMHhCMCwgMHg3QSwKKyAgICAgIDB4REYsIDB4OTMsIDB4OEQsIDB4QTMsIDB4QkIsIDB4MEIsIDB4RDEsIDB4N0QsCisgICAgICAweDAwLCAweDM2LCAweEVELCAweDQ5LCAweEEyLCAweEQwLCAweEZDLCAweDNGLAorICAgICAvKiBZLWNvb3JkaW5hdGUgKi8KKyAgICAgIDB4QkYsIDB4Q0QsIDB4RkEsIDB4ODksIDB4NTYsIDB4QjUsIDB4NjgsIDB4QkYsCisgICAgICAweERCLCAweDg2LCAweDczLCAweEU2LCAweDQ4LCAweEQ4LCAweEI1LCAweDhELAorICAgICAgMHg5MiwgMHg5OSwgMHg1NSwgMHhCMSwgMHg0QSwgMHgyNiwgMHhDMywgMHgwOCwKKyAgICAgIDB4MEYsIDB4MzQsIDB4MTEsIDB4N0QsIDB4OTcsIDB4MUQsIDB4NjgsIDB4NjR9LAorfTsKKworc3RydWN0IHBhbF9jb3NlX2NyeXB0b19oYXNoIHsKKyAgICAvKiBDYW4ndCBwdXQgdGhlIGFjdHVhbCBzaXplIGhlcmUgd2l0aG91dCBjcmVhdGluZyBkZXBlbmRlY3kgb24KKyAgICAgKiBhY3R1YWwgaGFzaCBpbXBsZW1lbnRhdGlvbiwgc28gdGhpcyBpcyBhIGZhaXJseSBsYXJnZSBhbmQKKyAgICAgKiBhY2NvbW1vZGF0aW5nIHNpemUuCisgICAgICovCisgICAgdWludDhfdCBieXRlc1sxMjhdOworfTsKKworc3RydWN0IHBhbF9jb3NlX3BzYV9jcnlwdG9faGFzaCB7CisgICAgcHNhX3N0YXR1c190ICAgICAgICAgc3RhdHVzOworICAgIHBzYV9oYXNoX29wZXJhdGlvbl90IG9wZXJhdGlvbjsKK307CisKK3N0YXRpYyBjb25zdCB1aW50OF90IGluaXRpYWxfYXR0ZXN0YXRpb25fcHVibGljX3hfa2V5W10gPQoreworICAgIDB4NzksIDB4RUIsIDB4QTksIDB4MEUsIDB4OEIsIDB4RjQsIDB4NTAsIDB4QTYsCisgICAgMHg3NSwgMHgxNSwgMHg3NiwgMHhBRCwgMHg0NSwgMHg5OSwgMHhCMCwgMHg3QSwKKyAgICAweERGLCAweDkzLCAweDhELCAweEEzLCAweEJCLCAweDBCLCAweEQxLCAweDdELAorICAgIDB4MDAsIDB4MzYsIDB4RUQsIDB4NDksIDB4QTIsIDB4RDAsIDB4RkMsIDB4M0YKK307CisKK3N0YXRpYyBjb25zdCB1aW50OF90IGluaXRpYWxfYXR0ZXN0YXRpb25fcHVibGljX3lfa2V5W10gPQoreworICAgIDB4QkYsIDB4Q0QsIDB4RkEsIDB4ODksIDB4NTYsIDB4QjUsIDB4NjgsIDB4QkYsCisgICAgMHhEQiwgMHg4NiwgMHg3MywgMHhFNiwgMHg0OCwgMHhEOCwgMHhCNSwgMHg4RCwKKyAgICAweDkyLCAweDk5LCAweDU1LCAweEIxLCAweDRBLCAweDI2LCAweEMzLCAweDA4LAorICAgIDB4MEYsIDB4MzQsIDB4MTEsIDB4N0QsIDB4OTcsIDB4MUQsIDB4NjgsIDB4NjQKK307CisKKy8qIEluaXRpYWxpemUgdGhlIHN0cnVjdHVyZSB3aXRoIGdpdmVuIHB1YmxpYyBrZXkgKi8KK3N0YXRpYyBjb25zdCBlY2Nfa2V5X3QgYXR0ZXN0X2tleSA9IHsKKyAgICAgICAgKHVpbnQ4X3QgKilpbml0aWFsX2F0dGVzdGF0aW9uX3B1YmxpY194X2tleSwKKyAgICAgICAgc2l6ZW9mKGluaXRpYWxfYXR0ZXN0YXRpb25fcHVibGljX3hfa2V5KSwKKyAgICAgICAgKHVpbnQ4X3QgKilpbml0aWFsX2F0dGVzdGF0aW9uX3B1YmxpY195X2tleSwKKyAgICAgICAgc2l6ZW9mKGluaXRpYWxfYXR0ZXN0YXRpb25fcHVibGljX3lfa2V5KQorfTsKKworaW50MzJfdCBwYWxfY29zZV9jcnlwdG9faGFzaF9zdGFydChzdHJ1Y3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2ggKmhhc2hfY3R4LCBpbnQzMl90IGNvc2VfaGFzaF9hbGdfaWQpOwordm9pZCBwYWxfY29zZV9jcnlwdG9faGFzaF91cGRhdGUoc3RydWN0IHBhbF9jb3NlX2NyeXB0b19oYXNoICpoYXNoX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBkYXRhX3RvX2hhc2gpOworaW50MzJfdCBwYWxfY29zZV9jcnlwdG9faGFzaF9maW5pc2goc3RydWN0IHBhbF9jb3NlX2NyeXB0b19oYXNoICpoYXNoX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWYgYnVmZmVyX3RvX2hvbGRfcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jICpoYXNoX3Jlc3VsdCk7CitpbnQgcGFsX2NyZWF0ZV9zaGEyNTYoc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGJ5dGVzX3RvX2hhc2gsIHN0cnVjdCBxX3VzZWZ1bF9idWYgYnVmZmVyX2Zvcl9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyAqaGFzaCk7Cit1aW50MzJfdCBwYWxfY29tcHV0ZV9oYXNoKGludDMyX3QgY29zZV9hbGdfaWQsIHN0cnVjdCBxX3VzZWZ1bF9idWYgYnVmZmVyX2Zvcl9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgKmhhc2gsIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBwcm90ZWN0ZWRfaGVhZGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHBheWxvYWQpOwordWludDMyX3QgcGFsX2ltcG9ydF9hdHRlc3Rfa2V5KGludDMyX3QgYWxnKTsKK3VpbnQzMl90IHBhbF9jcnlwdG9fcHViX2tleV92ZXJpZnkoaW50MzJfdCBjb3NlX2FsZ29yaXRobV9pZCwgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHRva2VuX2hhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBzaWduYXR1cmUpOworCisKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9lYXQuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9lYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzhmZGM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2VhdC5jCkBAIC0wLDAgKzEsNDkxIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAicGFsX2F0dGVzdGF0aW9uX2NyeXB0by5oIgorCit1aW50MzJfdCAgICBtYW5kYXRvcnlfY2xhaW1zID0gMDsKK3VpbnQzMl90ICAgIG1hbmRhcm90eV9zd19jb21wb25lbnRzID0gMDsKK2Jvb2xfdCAgICAgIHN3X2NvbXBvbmVudF9wcmVzZW50ID0gMDsKKworc3RhdGljIGludCBwYWxfZW5jb2RlX2Nvc2Vfa2V5KHN0cnVjdCBxX3VzZWZ1bF9idWZfYyAqY29zZV9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1ZiBidWZmZXJfZm9yX2Nvc2Vfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyB4X2NvcmQsIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyB5X2NvcmQpCit7CisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU7CisgICAgUUNCT1JFcnJvciAgICAgICAgICAgICAgICBxY2Jvcl9yZXN1bHQ7CisgICAgUUNCT1JFbmNvZGVDb250ZXh0ICAgICAgICBjYm9yX2VuY29kZV9jdHg7CisgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgICBjb3NlX2N1cnZlX2lkID0gUF8yNTY7CisgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jICAgICAgIGVuY29kZWRfa2V5X2lkOworCisgICAgLyogR2V0IHRoZSBwdWJsaWMga2V5IHggYW5kIHkgKi8KKyAgICAvKiBFbmNvZGUgaXQgaW50byBhIENPU0VfS2V5IHN0cnVjdHVyZSAqLworICAgIFFDQk9SRW5jb2RlX0luaXQoJmNib3JfZW5jb2RlX2N0eCwgYnVmZmVyX2Zvcl9jb3NlX2tleSk7CisgICAgUUNCT1JFbmNvZGVfT3Blbk1hcCgmY2Jvcl9lbmNvZGVfY3R4KTsKKyAgICBRQ0JPUkVuY29kZV9BZGRJbnQ2NFRvTWFwTigmY2Jvcl9lbmNvZGVfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPU0VfS0VZX0NPTU1PTl9LVFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09TRV9LRVlfVFlQRV9FQzIpOworICAgIFFDQk9SRW5jb2RlX0FkZEludDY0VG9NYXBOKCZjYm9yX2VuY29kZV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09TRV9LRVlfUEFSQU1fQ1JWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvc2VfY3VydmVfaWQpOworICAgIFFDQk9SRW5jb2RlX0FkZEJ5dGVzVG9NYXBOKCZjYm9yX2VuY29kZV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09TRV9LRVlfUEFSQU1fWF9DT09SRElOQVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhfY29yZCk7CisgICAgUUNCT1JFbmNvZGVfQWRkQnl0ZXNUb01hcE4oJmNib3JfZW5jb2RlX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1NFX0tFWV9QQVJBTV9ZX0NPT1JESU5BVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeV9jb3JkKTsKKyAgICBRQ0JPUkVuY29kZV9DbG9zZU1hcCgmY2Jvcl9lbmNvZGVfY3R4KTsKKworICAgIHFjYm9yX3Jlc3VsdCA9IFFDQk9SRW5jb2RlX0ZpbmlzaCgmY2Jvcl9lbmNvZGVfY3R4LCAmZW5jb2RlZF9rZXlfaWQpOworICAgIGlmIChxY2Jvcl9yZXN1bHQgIT0gUUNCT1JfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIC8qIE1haW5seSBtZWFucyB0aGF0IHRoZSBDT1NFX0tleSB3YXMgdG9vIGJpZyBmb3IgYnVmZmVyX2Zvcl9jb3NlX2tleSAqLworICAgICAgICByZXR1cm5fdmFsdWUgPSBQQUxfQVRURVNUX0VSUl9QUk9URUNURURfSEVBREVSUzsKKyAgICAgICAgZ290byBEb25lOworICAgIH0KKworICAgIC8qIEZpbmlzaCB1cCBhbmQgcmV0dXJuICovCisgICAgKmNvc2Vfa2V5ID0gZW5jb2RlZF9rZXlfaWQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUEFMX0FUVEVTVF9TVUNDRVNTOworCitEb25lOgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKKworc3RhdGljIGludCBnZXRfaXRlbXNfaW5fbWFwKFFDQk9SRGVjb2RlQ29udGV4dCAqZGVjb2RlX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0ZW1zX3RvX2dldF90ICppdGVtX2xpc3QpCit7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgaXRlbV9pbmRleDsKKyAgICBRQ0JPUkl0ZW0gICAgICAgICAgICAgICBpdGVtOworICAgIHN0cnVjdCBpdGVtc190b19nZXRfdCAgKml0ZW1fcHRyID0gaXRlbV9saXN0OworCisgICAgLyogaW5pdGlhbGl6ZSB0aGUgZGF0YSB0eXBlIG9mIGFsbCBpdGVtcyBpbiB0aGUgbGlzdCAqLworICAgIHdoaWxlIChpdGVtX3B0ci0+bGFiZWwgIT0gMCkKKyAgICB7CisgICAgICAgIGl0ZW1fcHRyLT5pdGVtLnVEYXRhVHlwZSA9IFFDQk9SX1RZUEVfTk9ORTsKKyAgICAgICAgaXRlbV9wdHIrKzsKKyAgICB9CisKKyAgICBRQ0JPUkRlY29kZV9HZXROZXh0KGRlY29kZV9jb250ZXh0LCAmaXRlbSk7CisgICAgaWYgKGl0ZW0udURhdGFUeXBlICE9IFFDQk9SX1RZUEVfTUFQKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFBBTF9BVFRFU1RfRVJST1I7CisgICAgfQorCisgICAgZm9yIChpdGVtX2luZGV4ID0gaXRlbS52YWwudUNvdW50OyBpdGVtX2luZGV4ICE9IDA7IGl0ZW1faW5kZXgtLSkKKyAgICB7CisgICAgICAgIGlmIChRQ0JPUkRlY29kZV9HZXROZXh0KGRlY29kZV9jb250ZXh0LCAmaXRlbSkgIT0gUUNCT1JfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFBBTF9BVFRFU1RfVE9LRU5fRVJSX0NCT1JfRk9STUFUVElORzsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXRlbS51TGFiZWxUeXBlICE9IFFDQk9SX1RZUEVfSU5UNjQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaXRlbV9wdHIgPSBpdGVtX2xpc3Q7CisgICAgICAgIHdoaWxlIChpdGVtX3B0ci0+bGFiZWwgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGl0ZW0ubGFiZWwuaW50NjQgPT0gaXRlbV9wdHItPmxhYmVsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGl0ZW1fcHRyLT5pdGVtID0gaXRlbTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGl0ZW1fcHRyKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gUEFMX0FUVEVTVF9TVUNDRVNTOworfQorCitzdGF0aWMgaW50IGdldF9pdGVtX2luX21hcChRQ0JPUkRlY29kZUNvbnRleHQgKmRlY29kZV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBsYWJlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFFDQk9SSXRlbSAqaXRlbSkKK3sKKyAgICBzdHJ1Y3QgaXRlbXNfdG9fZ2V0X3QgICBpdGVtX2xpc3RbMl07CisKKyAgICBpdGVtX2xpc3RbMF0ubGFiZWwgPSBsYWJlbDsKKyAgICBpdGVtX2xpc3RbMV0ubGFiZWwgPSAwOworCisgICAgaWYgKGdldF9pdGVtc19pbl9tYXAoZGVjb2RlX2NvbnRleHQsIGl0ZW1fbGlzdCkpCisgICAgeworICAgICAgICByZXR1cm4gUEFMX0FUVEVTVF9FUlJPUjsKKyAgICB9CisKKyAgICBpZiAoaXRlbV9saXN0WzBdLml0ZW0udURhdGFUeXBlID09IFFDQk9SX1RZUEVfTk9ORSkKKyAgICB7CisgICAgICAgIHJldHVybiBQQUxfQVRURVNUX1RPS0VOX0VSUl9DQk9SX0ZPUk1BVFRJTkc7CisgICAgfQorCisgICAgKml0ZW0gPSBpdGVtX2xpc3RbMF0uaXRlbTsKKworICAgIHJldHVybiBQQUxfQVRURVNUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfdW5wcm90ZWN0ZWRfaGVhZGVycyhRQ0JPUkRlY29kZUNvbnRleHQgKmRlY29kZV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyAqY2hpbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbG9vcF9iYWNrKQoreworICAgIHN0cnVjdCBpdGVtc190b19nZXRfdCAgIGl0ZW1fbGlzdFszXTsKKworICAgIGl0ZW1fbGlzdFswXS5sYWJlbCA9IENPU0VfSEVBREVSX1BBUkFNX0tJRDsKKyAgICBpdGVtX2xpc3RbMV0ubGFiZWwgPSBUX0NPU0VfU0hPUlRfQ0lSQ1VJVF9MQUJFTDsKKyAgICBpdGVtX2xpc3RbMl0ubGFiZWwgPSAwOworICAgICpsb29wX2JhY2sgPSBmYWxzZTsKKworICAgIGlmIChnZXRfaXRlbXNfaW5fbWFwKGRlY29kZV9jb250ZXh0LCBpdGVtX2xpc3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFBBTF9BVFRFU1RfRVJST1I7CisgICAgfQorCisgICAgaWYgKGl0ZW1fbGlzdFsxXS5pdGVtLnVEYXRhVHlwZSA9PSBRQ0JPUl9UWVBFX1RSVUUpCisgICAgeworICAgICAgICAqbG9vcF9iYWNrID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoaXRlbV9saXN0WzBdLml0ZW0udURhdGFUeXBlICE9IFFDQk9SX1RZUEVfQllURV9TVFJJTkcpCisgICAgeworICAgICAgICByZXR1cm4gUEFMX0FUVEVTVF9UT0tFTl9FUlJfQ0JPUl9GT1JNQVRUSU5HOworICAgIH0KKworICAgICpjaGlsZCA9IGl0ZW1fbGlzdFswXS5pdGVtLnZhbC5zdHJpbmc7CisKKyAgICByZXR1cm4gUEFMX0FUVEVTVF9TVUNDRVNTOworfQorCitzdGF0aWMgaW50IHBhcnNlX3Byb3RlY3RlZF9oZWFkZXJzKHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBwcm90ZWN0ZWRfaGVhZGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqYWxnX2lkKQoreworICAgIFFDQk9SRGVjb2RlQ29udGV4dCAgZGVjb2RlX2NvbnRleHQ7CisgICAgUUNCT1JJdGVtICAgICAgICAgICBpdGVtOworCisgICAgUUNCT1JEZWNvZGVfSW5pdCgmZGVjb2RlX2NvbnRleHQsIHByb3RlY3RlZF9oZWFkZXJzLCAwKTsKKworICAgIGlmIChnZXRfaXRlbV9pbl9tYXAoJmRlY29kZV9jb250ZXh0LCBDT1NFX0hFQURFUl9QQVJBTV9BTEcsICZpdGVtKSkKKyAgICB7CisgICAgICAgIHJldHVybiBQQUxfQVRURVNUX0VSUk9SOworICAgIH0KKworICAgIGlmIChRQ0JPUkRlY29kZV9GaW5pc2goJmRlY29kZV9jb250ZXh0KSkKKyAgICB7CisgICAgICAgIHJldHVybiBQQUxfQVRURVNUX0VSUk9SOworICAgIH0KKworICAgIGlmICgoaXRlbS51RGF0YVR5cGUgIT0gUUNCT1JfVFlQRV9JTlQ2NCkgfHwgKGl0ZW0udmFsLmludDY0ID4gSU5UMzJfTUFYKSkKKyAgICB7CisgICAgICAgIHJldHVybiBQQUxfQVRURVNUX0VSUk9SOworICAgIH0KKworICAgICphbGdfaWQgPSAoaW50MzJfdClpdGVtLnZhbC5pbnQ2NDsKKworICAgIHJldHVybiBQQUxfQVRURVNUX1NVQ0NFU1M7Cit9CisKKy8qKgorICAgIEBicmllZiAgICAtIFRoaXMgQVBJIHdpbGwgdmVyaWZ5IHRoZSBjbGFpbXMKKyAgICBAcGFyYW0gICAgLSBkZWNvZGVfY29udGV4dCAgICAgIDogVGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBjaGFsbGVuZ2UKKyAgICAgICAgICAgICAgICBpdGVtICAgICAgICAgICAgICAgIDogY29udGV4dCBmb3IgZGVjb2RpbmcgdGhlIGRhdGEgaXRlbXMKKyAgICAgICAgICAgICAgICBjb21wbGV0ZWRfY2hhbGxlbmdlIDogQnVmZmVyIGNvbnRhaW5pbmcgdGhlIGNoYWxsZW5nZQorICAgIEByZXR1cm4gICAtIGVycm9yIHN0YXR1cworKiovCitzdGF0aWMgaW50IHBhcnNlX2NsYWltcyhRQ0JPUkRlY29kZUNvbnRleHQgKmRlY29kZV9jb250ZXh0LCBRQ0JPUkl0ZW0gaXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGNvbXBsZXRlZF9jaGFsbGVuZ2UpCit7CisgICAgaW50IGksIGNvdW50ID0gMDsKKyAgICBpbnQgc3RhdHVzID0gUEFMX0FUVEVTVF9TVUNDRVNTOworCisgICAgLyogUGFyc2UgZWFjaCBjbGFpbSBhbmQgdmFsaWRhdGUgdGhlaXIgZGF0YSB0eXBlICovCisgICAgd2hpbGUgKHN0YXR1cyA9PSBQQUxfQVRURVNUX1NVQ0NFU1MpCisgICAgeworICAgICAgICBzdGF0dXMgPSBRQ0JPUkRlY29kZV9HZXROZXh0KGRlY29kZV9jb250ZXh0LCAmaXRlbSk7CisgICAgICAgIGlmIChzdGF0dXMgIT0gUEFMX0FUVEVTVF9TVUNDRVNTKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgbWFuZGF0b3J5X2NsYWltcyB8PSAxIDw8IChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAtIGl0ZW0ubGFiZWwuaW50NjQpOworICAgICAgICBpZiAoaXRlbS51TGFiZWxUeXBlID09IFFDQk9SX1RZUEVfSU5UNjQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpdGVtLmxhYmVsLmludDY0ID09IEVBVF9DQk9SX0FSTV9MQUJFTF9OT05DRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaXRlbS51RGF0YVR5cGUgPT0gUUNCT1JfVFlQRV9CWVRFX1NUUklORykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIEdpdmVuIGNoYWxsZW5nZSB2cyBjaGFsbGVuZ2UgaW4gdG9rZW4gKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKFVzZWZ1bEJ1Zl9Db21wYXJlKGl0ZW0udmFsLnN0cmluZywgY29tcGxldGVkX2NoYWxsZW5nZSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUEFMX0FUVEVTVF9UT0tFTl9DSEFMTEVOR0VfTUlTTUFUQ0g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBBTF9BVFRFU1RfVE9LRU5fTk9UX1NVUFBPUlRFRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGl0ZW0ubGFiZWwuaW50NjQgPT0gRUFUX0NCT1JfQVJNX0xBQkVMX0JPT1RfU0VFRCB8fAorICAgICAgICAgICAgICAgICAgICAgaXRlbS5sYWJlbC5pbnQ2NCA9PSBFQVRfQ0JPUl9BUk1fTEFCRUxfSU1QTEVNRU5UQVRJT05fSUQgfHwKKyAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubGFiZWwuaW50NjQgPT0gRUFUX0NCT1JfQVJNX0xBQkVMX1VFSUQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGl0ZW0udURhdGFUeXBlICE9IFFDQk9SX1RZUEVfQllURV9TVFJJTkcpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQQUxfQVRURVNUX1RPS0VOX0VSUl9DQk9SX0ZPUk1BVFRJTkc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChpdGVtLmxhYmVsLmludDY0ID09IEVBVF9DQk9SX0FSTV9MQUJFTF9PUklHSU5BVElPTiB8fAorICAgICAgICAgICAgICAgICAgICAgaXRlbS5sYWJlbC5pbnQ2NCA9PSBFQVRfQ0JPUl9BUk1fTEFCRUxfUFJPRklMRV9ERUZJTklUSU9OIHx8CisgICAgICAgICAgICAgICAgICAgICBpdGVtLmxhYmVsLmludDY0ID09IEVBVF9DQk9SX0FSTV9MQUJFTF9IV19WRVJTSU9OKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpdGVtLnVEYXRhVHlwZSAhPSBRQ0JPUl9UWVBFX1RFWFRfU1RSSU5HKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUEFMX0FUVEVTVF9UT0tFTl9FUlJfQ0JPUl9GT1JNQVRUSU5HOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS5sYWJlbC5pbnQ2NCA9PSBFQVRfQ0JPUl9BUk1fTEFCRUxfQ0xJRU5UX0lEIHx8CisgICAgICAgICAgICAgICAgICAgICBpdGVtLmxhYmVsLmludDY0ID09IEVBVF9DQk9SX0FSTV9MQUJFTF9TRUNVUklUWV9MSUZFQ1lDTEUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGl0ZW0udURhdGFUeXBlICE9IFFDQk9SX1RZUEVfSU5UNjQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQQUxfQVRURVNUX1RPS0VOX0VSUl9DQk9SX0ZPUk1BVFRJTkc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChpdGVtLmxhYmVsLmludDY0ID09IEVBVF9DQk9SX0FSTV9MQUJFTF9TV19DT01QT05FTlRTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpdGVtLnVEYXRhVHlwZSAhPSBRQ0JPUl9UWVBFX0FSUkFZKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUEFMX0FUVEVTVF9UT0tFTl9FUlJfQ0JPUl9GT1JNQVRUSU5HOworCisgICAgICAgICAgICAgICAgc3dfY29tcG9uZW50X3ByZXNlbnQgPSAxOworICAgICAgICAgICAgICAgIHN0YXR1cyA9IFFDQk9SRGVjb2RlX0dldE5leHQoZGVjb2RlX2NvbnRleHQsICZpdGVtKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IFBBTF9BVFRFU1RfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBjb3VudCA9IGl0ZW0udmFsLnVDb3VudDsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IGNvdW50OyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtYW5kYXJvdHlfc3dfY29tcG9uZW50cyB8PSAxIDw8IGl0ZW0ubGFiZWwuaW50NjQ7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0ubGFiZWwuaW50NjQgPT0gRUFUX0NCT1JfU1dfQ09NUE9ORU5UX01FQVNVUkVNRU5UKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0udURhdGFUeXBlICE9IFFDQk9SX1RZUEVfQllURV9TVFJJTkcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBBTF9BVFRFU1RfVE9LRU5fRVJSX0NCT1JfRk9STUFUVElORzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpdGVtLmxhYmVsLmludDY0ID09IEVBVF9DQk9SX1NXX0NPTVBPTkVOVF9NRUFTVVJFTUVOVF9ERVNDKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS51RGF0YVR5cGUgIT0gUUNCT1JfVFlQRV9URVhUX1NUUklORykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUEFMX0FUVEVTVF9UT0tFTl9FUlJfQ0JPUl9GT1JNQVRUSU5HOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0ZW0ubGFiZWwuaW50NjQgPT0gRUFUX0NCT1JfU1dfQ09NUE9ORU5UX1ZFUlNJT04pCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnVEYXRhVHlwZSAhPSBRQ0JPUl9UWVBFX1RFWFRfU1RSSU5HKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQQUxfQVRURVNUX1RPS0VOX0VSUl9DQk9SX0ZPUk1BVFRJTkc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS5sYWJlbC5pbnQ2NCA9PSBFQVRfQ0JPUl9TV19DT01QT05FTlRfU0lHTkVSX0lEKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS51RGF0YVR5cGUgIT0gUUNCT1JfVFlQRV9CWVRFX1NUUklORykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUEFMX0FUVEVTVF9UT0tFTl9FUlJfQ0JPUl9GT1JNQVRUSU5HOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0ZW0ubGFiZWwuaW50NjQgPT0gRUFUX0NCT1JfU1dfQ09NUE9ORU5UX0VQT0NIKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS51RGF0YVR5cGUgIT0gUUNCT1JfVFlQRV9JTlQ2NCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUEFMX0FUVEVTVF9UT0tFTl9FUlJfQ0JPUl9GT1JNQVRUSU5HOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0ZW0ubGFiZWwuaW50NjQgPT0gRUFUX0NCT1JfU1dfQ09NUE9ORU5UX1RZUEUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnVEYXRhVHlwZSAhPSBRQ0JPUl9UWVBFX1RFWFRfU1RSSU5HKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQQUxfQVRURVNUX1RPS0VOX0VSUl9DQk9SX0ZPUk1BVFRJTkc7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGNvdW50KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBRQ0JPUkRlY29kZV9HZXROZXh0KGRlY29kZV9jb250ZXh0LCAmaXRlbSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IFBBTF9BVFRFU1RfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUEFMX0FUVEVTVF9UT0tFTl9FUlJfQ0JPUl9GT1JNQVRUSU5HOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBUb0RvOiBBZGQgb3RoZXIgY2xhaW0gdHlwZXMgKi8KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzdGF0dXMgPT0gUUNCT1JfRVJSX0hJVF9FTkQpCisgICAgICAgIHJldHVybiBQQUxfQVRURVNUX1NVQ0NFU1M7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gUEFMX0FUVEVTVF9UT0tFTl9FUlJfQ0JPUl9GT1JNQVRUSU5HOworfQorCisvKioKKyAgICBAYnJpZWYgICAgLSBUaGlzIEFQSSB3aWxsIHZlcmlmeSB0aGUgYXR0ZXN0YXRpb24gdG9rZW4KKyAgICBAcGFyYW0gICAgLSBjaGFsbGVuZ2UgICAgICAgOiBUaGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGNoYWxsZW5nZQorICAgICAgICAgICAgICAgIGNoYWxsZW5nZV9zaXplICA6IFNpemUgb2YgdGhlIGNoYWxsZW5nZSBidWZmZXIKKyAgICAgICAgICAgICAgICB0b2tlbiAgICAgICAgICAgOiBUaGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGF0dGVzdGF0aW9uIHRva2VuCisgICAgICAgICAgICAgICAgdG9rZW5fc2l6ZSAgICAgIDogU2l6ZSBvZiB0aGUgdG9rZW4gYnVmZmVyCisgICAgQHJldHVybiAgIC0gZXJyb3Igc3RhdHVzCisqKi8KK2ludDMyX3QgcGFsX2luaXRpYWxfYXR0ZXN0X3ZlcmlmeV90b2tlbih1aW50OF90ICpjaGFsbGVuZ2UsIHVpbnQzMl90IGNoYWxsZW5nZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnRva2VuLCB1aW50MzJfdCB0b2tlbl9zaXplKQoreworICAgIGludDMyX3QgICAgICAgICAgICAgc3RhdHVzID0gUEFMX0FUVEVTVF9TVUNDRVNTOworICAgIGJvb2wgICAgICAgICAgICAgICAgc2hvcnRfY2lyY3VpdDsKKyAgICBpbnQzMl90ICAgICAgICAgICAgIGNvc2VfYWxnb3JpdGhtX2lkOworICAgIFFDQk9SSXRlbSAgICAgICAgICAgaXRlbTsKKyAgICBRQ0JPUkRlY29kZUNvbnRleHQgIGRlY29kZV9jb250ZXh0OworICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBjb21wbGV0ZWRfY2hhbGxlbmdlOworICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBjb21wbGV0ZWRfdG9rZW47CisgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHBheWxvYWQ7CisgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHNpZ25hdHVyZTsKKyAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgcHJvdGVjdGVkX2hlYWRlcnM7CisgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGtpZDsKKyAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgeF9jb3JkOworICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyB5X2NvcmQ7CisgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGNvc2Vfa2V5X3RvX2hhc2g7CisgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGtleV9oYXNoOworICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyB0b2tlbl9oYXNoOworICAgIFVTRUZVTF9CVUZfTUFLRV9TVEFDS19VQihidWZfdG9faG9sZF94X2Nvb3JkLCBUX0NPU0VfQ1JZUFRPX0VDX1AyNTZfQ09PUkRfU0laRSk7CisgICAgVVNFRlVMX0JVRl9NQUtFX1NUQUNLX1VCKGJ1Zl90b19ob2xkX3lfY29vcmQsIFRfQ09TRV9DUllQVE9fRUNfUDI1Nl9DT09SRF9TSVpFKTsKKyAgICBVU0VGVUxfQlVGX01BS0VfU1RBQ0tfVUIoYnVmZmVyX2Zvcl9raWQsIFRfQ09TRV9DUllQVE9fU0hBMjU2X1NJWkUpOworICAgIFVTRUZVTF9CVUZfTUFLRV9TVEFDS19VQihidWZmZXJfZm9yX2Nvc2Vfa2V5LCBNQVhfRU5DT0RFRF9DT1NFX0tFWV9TSVpFKTsKKyAgICBVU0VGVUxfQlVGX01BS0VfU1RBQ0tfVUIoYnVmZmVyX2Zvcl9lbmNvZGVkX2tleSwgTUFYX0VOQ09ERURfQ09TRV9LRVlfU0laRSk7CisgICAgVVNFRlVMX0JVRl9NQUtFX1NUQUNLX1VCKGJ1ZmZlcl9mb3JfdG9rZW5faGFzaCwgVF9DT1NFX0NSWVBUT19TSEEyNTZfU0laRSk7CisKKyAgICBraWQucHRyID0gYnVmZmVyX2Zvcl9lbmNvZGVkX2tleS5wdHI7CisKKyAgICBtZW1jcHkoYnVmX3RvX2hvbGRfeF9jb29yZC5wdHIsIChjb25zdCB2b2lkICopYXR0ZXN0X2tleS5wdWJ4X2tleSwgYXR0ZXN0X2tleS5wdWJ4X2tleV9zaXplKTsKKyAgICBtZW1jcHkoYnVmX3RvX2hvbGRfeV9jb29yZC5wdHIsIChjb25zdCB2b2lkICopYXR0ZXN0X2tleS5wdWJ5X2tleSwgYXR0ZXN0X2tleS5wdWJ5X2tleV9zaXplKTsKKworICAgIC8qIFVwZGF0ZSBzaXplICovCisgICAgYnVmX3RvX2hvbGRfeF9jb29yZC5sZW4gPSBhdHRlc3Rfa2V5LnB1Ynhfa2V5X3NpemU7CisgICAgYnVmX3RvX2hvbGRfeV9jb29yZC5sZW4gPSBhdHRlc3Rfa2V5LnB1Ynlfa2V5X3NpemU7CisKKyAgICB4X2NvcmQucHRyID0gYnVmX3RvX2hvbGRfeF9jb29yZC5wdHI7CisgICAgeF9jb3JkLmxlbiA9IGJ1Zl90b19ob2xkX3hfY29vcmQubGVuOworICAgIHlfY29yZC5wdHIgPSBidWZfdG9faG9sZF95X2Nvb3JkLnB0cjsKKyAgICB5X2NvcmQubGVuID0gYnVmX3RvX2hvbGRfeV9jb29yZC5sZW47CisKKyAgICAvKiBDb25zdHJ1Y3QgdGhlIHRva2VuIGJ1ZmZlciBmb3IgdmFsaWRhdGlvbiAqLworICAgIGNvbXBsZXRlZF90b2tlbi5wdHIgPSB0b2tlbjsKKyAgICBjb21wbGV0ZWRfdG9rZW4ubGVuID0gdG9rZW5fc2l6ZTsKKworICAgIC8qIENvbnN0cnVjdCB0aGUgY2hhbGxlbmdlIGJ1ZmZlciBmb3IgdmFsaWRhdGlvbiAqLworICAgIGNvbXBsZXRlZF9jaGFsbGVuZ2UucHRyID0gY2hhbGxlbmdlOworICAgIGNvbXBsZXRlZF9jaGFsbGVuZ2UubGVuID0gY2hhbGxlbmdlX3NpemU7CisKKy8qCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHwgIENCT1IgQXJyYXkgVHlwZSAgICAgIHwKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgfCAgUHJvdGVjdGVkIEhlYWRlcnMgICAgfAorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB8ICBVbnByb3RlY3RlZCBIZWFkZXJzICB8CisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHwgIFBheWxvYWQgICAgICAgICAgICAgIHwKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgfCAgU2lnbmF0dXJlICAgICAgICAgICAgfAorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBkZWNvcmRlciAqLworICAgIFFDQk9SRGVjb2RlX0luaXQoJmRlY29kZV9jb250ZXh0LCBjb21wbGV0ZWRfdG9rZW4sIFFDQk9SX0RFQ09ERV9NT0RFX05PUk1BTCk7CisKKyAgICAvKiBHZXQgdGhlIEhlYWRlciAqLworICAgIFFDQk9SRGVjb2RlX0dldE5leHQoJmRlY29kZV9jb250ZXh0LCAmaXRlbSk7CisKKyAgICAvKiBDaGVjayB0aGUgQ0JPUiBBcnJheSB0eXBlLiBDaGVjayBpZiB0aGUgY291bnQgaXMgNC4KKyAgICAgKiBPbmx5IENPU0VfU0lHTjEgaXMgc3VwcG9ydGVkIG5vdy4KKyAgICAgKi8KKyAgICBpZiAoaXRlbS51RGF0YVR5cGUgIT0gUUNCT1JfVFlQRV9BUlJBWSB8fCBpdGVtLnZhbC51Q291bnQgIT0gNCB8fAorICAgICAgICFRQ0JPUkRlY29kZV9Jc1RhZ2dlZCgmZGVjb2RlX2NvbnRleHQsICZpdGVtLCBDQk9SX1RBR19DT1NFX1NJR04xKSkKKyAgICAgICAgcmV0dXJuIFBBTF9BVFRFU1RfVE9LRU5fRVJSX0NCT1JfRk9STUFUVElORzsKKworICAgIC8qIEdldCB0aGUgbmV4dCBoZWFkZXJzICovCisgICAgUUNCT1JEZWNvZGVfR2V0TmV4dCgmZGVjb2RlX2NvbnRleHQsICZpdGVtKTsKKyAgICBpZiAoaXRlbS51RGF0YVR5cGUgIT0gUUNCT1JfVFlQRV9CWVRFX1NUUklORykKKyAgICAgICAgcmV0dXJuIFBBTF9BVFRFU1RfVE9LRU5fRVJSX0NCT1JfRk9STUFUVElORzsKKworICAgIHByb3RlY3RlZF9oZWFkZXJzID0gaXRlbS52YWwuc3RyaW5nOworCisgICAgLyogUGFyc2UgdGhlIHByb3RlY3RlZCBoZWFkZXJzIGFuZCBjaGVjayB0aGUgZGF0YSB0eXBlIGFuZCB2YWx1ZSovCisgICAgc3RhdHVzID0gcGFyc2VfcHJvdGVjdGVkX2hlYWRlcnMocHJvdGVjdGVkX2hlYWRlcnMsICZjb3NlX2FsZ29yaXRobV9pZCk7CisgICAgaWYgKHN0YXR1cyAhPSBQQUxfQVRURVNUX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBzdGF0dXM7CisKKyAgICAvKiBQYXJzZSB0aGUgdW5wcm90ZWN0ZWQgaGVhZGVycyBhbmQgY2hlY2sgdGhlIGRhdGEgdHlwZSBhbmQgdmFsdWUgKi8KKyAgICBzaG9ydF9jaXJjdWl0ID0gZmFsc2U7CisgICAgc3RhdHVzID0gcGFyc2VfdW5wcm90ZWN0ZWRfaGVhZGVycygmZGVjb2RlX2NvbnRleHQsICZraWQsICZzaG9ydF9jaXJjdWl0KTsKKyAgICBpZiAoc3RhdHVzICE9IFBBTF9BVFRFU1RfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIC8qIEVuY29kZSB0aGUgZ2l2ZW4gcHVibGljIGtleSAqLworICAgIHN0YXR1cyA9IHBhbF9lbmNvZGVfY29zZV9rZXkoJmNvc2Vfa2V5X3RvX2hhc2gsIGJ1ZmZlcl9mb3JfY29zZV9rZXksIHhfY29yZCwgeV9jb3JkKTsKKyAgICBpZiAoc3RhdHVzICE9IFBBTF9BVFRFU1RfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIC8qIENyZWF0ZSBoYXNoIG9mIHRoZSBnaXZlbiBwdWJsaWMga2V5ICovCisgICAgc3RhdHVzID0gcGFsX2NyZWF0ZV9zaGEyNTYoY29zZV9rZXlfdG9faGFzaCwgYnVmZmVyX2Zvcl9raWQsICZrZXlfaGFzaCk7CisgICAgaWYgKHN0YXR1cyAhPSBQU0FfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIC8qIENvbXBhcmUgdGhlIGhhc2ggb2YgdGhlIHB1YmxpYyBrZXkgaW4gdG9rZW4gYW5kIGhhc2ggb2YgdGhlIGdpdmVuIHB1YmxpYyBrZXkgKi8KKyAgICBpZiAoa2lkLmxlbiAhPSBrZXlfaGFzaC5sZW4pCisgICAgeworICAgICAgICByZXR1cm4gUEFMX0FUVEVTVF9IQVNIX0xFTkdUSF9NSVNNQVRDSDsKKyAgICB9CisKKyAgICBpZiAobWVtY21wKGtpZC5wdHIsIGtleV9oYXNoLnB0ciwga2lkLmxlbikgIT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBQQUxfQVRURVNUX0hBU0hfTUlTTUFUQ0g7CisgICAgfQorCisgICAgLyogR2V0IHRoZSBwYXlsb2FkICovCisgICAgUUNCT1JEZWNvZGVfR2V0TmV4dCgmZGVjb2RlX2NvbnRleHQsICZpdGVtKTsKKyAgICBpZiAoaXRlbS51RGF0YVR5cGUgIT0gUUNCT1JfVFlQRV9CWVRFX1NUUklORykKKyAgICAgICAgcmV0dXJuIFBBTF9BVFRFU1RfVE9LRU5fRVJSX0NCT1JfRk9STUFUVElORzsKKworICAgIHBheWxvYWQgPSBpdGVtLnZhbC5zdHJpbmc7CisKKyAgICAvKiBHZXQgdGhlIGRpZ2l0YWwgc2lnbmF0dXJlICovCisgICAgUUNCT1JEZWNvZGVfR2V0TmV4dCgmZGVjb2RlX2NvbnRleHQsICZpdGVtKTsKKyAgICBpZiAoaXRlbS51RGF0YVR5cGUgIT0gUUNCT1JfVFlQRV9CWVRFX1NUUklORykKKyAgICAgICAgcmV0dXJuIFBBTF9BVFRFU1RfVE9LRU5fRVJSX0NCT1JfRk9STUFUVElORzsKKworICAgIHNpZ25hdHVyZSA9IGl0ZW0udmFsLnN0cmluZzsKKworICAgIC8qIENvbXB1dGUgdGhlIGhhc2ggZnJvbSB0aGUgdG9rZW4gKi8KKyAgICBzdGF0dXMgPSBwYWxfY29tcHV0ZV9oYXNoKGNvc2VfYWxnb3JpdGhtX2lkLCBidWZmZXJfZm9yX3Rva2VuX2hhc2gsICZ0b2tlbl9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkX2hlYWRlcnMsIHBheWxvYWQpOworICAgIGlmIChzdGF0dXMgIT0gUEFMX0FUVEVTVF9TVUNDRVNTKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgLyogVmVyaWZ5IHRoZSBzaWduYXR1cmUgKi8KKyAgICBzdGF0dXMgPSBwYWxfY3J5cHRvX3B1Yl9rZXlfdmVyaWZ5KGNvc2VfYWxnb3JpdGhtX2lkLCB0b2tlbl9oYXNoLCBzaWduYXR1cmUpOworICAgIGlmIChzdGF0dXMgIT0gUEFMX0FUVEVTVF9TVUNDRVNTKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgRGVjb2RlciBhbmQgdmFsaWRhdGUgdGhlIHBheWxvYWQgZm9ybWF0ICovCisgICAgUUNCT1JEZWNvZGVfSW5pdCgmZGVjb2RlX2NvbnRleHQsIHBheWxvYWQsIFFDQk9SX0RFQ09ERV9NT0RFX05PUk1BTCk7CisgICAgc3RhdHVzID0gUUNCT1JEZWNvZGVfR2V0TmV4dCgmZGVjb2RlX2NvbnRleHQsICZpdGVtKTsKKyAgICBpZiAoc3RhdHVzICE9IFBBTF9BVFRFU1RfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIGlmIChpdGVtLnVEYXRhVHlwZSAhPSBRQ0JPUl9UWVBFX01BUCkKKyAgICAgICAgcmV0dXJuIFBBTF9BVFRFU1RfVE9LRU5fRVJSX0NCT1JfRk9STUFUVElORzsKKworICAgIC8qIFBhcnNlIHRoZSBwYXlsb2FkIGFuZCBjaGVjayB0aGUgZGF0YSB0eXBlIG9mIGVhY2ggY2xhaW0gKi8KKyAgICBzdGF0dXMgPSBwYXJzZV9jbGFpbXMoJmRlY29kZV9jb250ZXh0LCBpdGVtLCBjb21wbGV0ZWRfY2hhbGxlbmdlKTsKKyAgICBpZiAoc3RhdHVzICE9IFBBTF9BVFRFU1RfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIGlmICgobWFuZGF0b3J5X2NsYWltcyAmIE1BTkRBVE9SWV9DTEFJTV9XSVRIX1NXX0NPTVApID09IE1BTkRBVE9SWV9DTEFJTV9XSVRIX1NXX0NPTVApCisgICAgeworICAgICAgICBpZiAoKG1hbmRhcm90eV9zd19jb21wb25lbnRzICYgTUFOREFUT1JZX1NXX0NPTVApICE9IE1BTkRBVE9SWV9TV19DT01QKQorICAgICAgICAgICAgcmV0dXJuIFBBTF9BVFRFU1RfVE9LRU5fTk9UX0FMTF9NQU5EQVRPUllfQ0xBSU1TOworICAgIH0KKyAgICBlbHNlIGlmICgobWFuZGF0b3J5X2NsYWltcyAmIE1BTkRBVE9SWV9DTEFJTV9OT19TV19DT01QKSAhPSBNQU5EQVRPUllfQ0xBSU1fTk9fU1dfQ09NUCkKKyAgICB7CisgICAgICAgIHJldHVybiBQQUxfQVRURVNUX1RPS0VOX05PVF9BTExfTUFOREFUT1JZX0NMQUlNUzsKKyAgICB9CisKKyAgICByZXR1cm4gUEFMX0FUVEVTVF9TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2VhdC5oIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2VhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMGM1NDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fZWF0LmgKQEAgLTAsMCArMSwxNzAgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlICJxY2Jvci5oIgorI2luY2x1ZGUgInBhbF9jb21tb24uaCIKKyNpbmNsdWRlICJwc2EvY3J5cHRvLmgiCisKKyNkZWZpbmUgUEFMX0FUVEVTVF9NSU5fRVJST1IgICAgICAgICAgICAgIDMwCisKKy8qIE5JU1QgUC0yNTYgYWxzbyBrbm93biBhcyBzZWNwMjU2cjEgKi8KKyNkZWZpbmUgUF8yNTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBDT1NFX0hFQURFUl9QQVJBTV9BTEcgICAgICAgICAgICAgMQorI2RlZmluZSBDT1NFX0hFQURFUl9QQVJBTV9LSUQgICAgICAgICAgICAgNAorCisjZGVmaW5lIENPU0VfS0VZX0NPTU1PTl9LVFkgICAgICAgICAgICAgICAxCisjZGVmaW5lIENPU0VfS0VZX1RZUEVfRUMyICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENPU0VfS0VZX1BBUkFNX0NSViAgICAgICAgICAgICAgIC0xCisjZGVmaW5lIENPU0VfS0VZX1BBUkFNX1hfQ09PUkRJTkFURSAgICAgIC0yCisjZGVmaW5lIENPU0VfS0VZX1BBUkFNX1lfQ09PUkRJTkFURSAgICAgIC0zCisjZGVmaW5lIENPU0VfQUxHT1JJVEhNX0VTMjU2ICAgICAgICAgICAgIC03CisjZGVmaW5lIENPU0VfQUxHX1NIQTI1Nl9QUk9QUklFVEFSWSAgICAgIC03MjAwMAorCisvKioKKyAqIFRoZSBzaXplIG9mIFggYW5kIFkgY29vcmRpbmF0ZSBpbiAyIHBhcmFtZXRlciBzdHlsZSBFQyBwdWJsaWMKKyAqIGtleS4gRm9ybWF0IGlzIGFzIGRlZmluZWQgaW4gW0NPU0UgKFJGQyA4MTUyKV0KKyAqIChodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjODE1MikgYW5kIFtTRUMgMTogRWxsaXB0aWMgQ3VydmUKKyAqIENyeXB0b2dyYXBoeV0oaHR0cDovL3d3dy5zZWNnLm9yZy9zZWMxLXYyLnBkZikuCisgKgorICogVGhpcyBzaXplIGlzIHdlbGwta25vd24gYW5kIGRvY3VtZW50ZWQgaW4gcHVibGljIHN0YW5kYXJkcy4KKyAqLworI2RlZmluZSBUX0NPU0VfQ1JZUFRPX0VDX1AyNTZfQ09PUkRfU0laRSAgMzIKKyNkZWZpbmUgVF9DT1NFX0NSWVBUT19TSEEyNTZfU0laRSAgICAgICAgIDMyCisKKyNkZWZpbmUgTUFYX0VOQ09ERURfQ09TRV9LRVlfU0laRSBcCisgICAgMSArIC8qIDEgYnl0ZSB0byBlbmNvZGUgbWFwICovIFwKKyAgICAyICsgLyogMiBieXRlcyB0byBlbmNvZGUga2V5IHR5cGUgKi8gXAorICAgIDIgKyAvKiAyIGJ5dGVzIHRvIGVuY29kZSBjdXJ2ZSAqLyBcCisgICAgMiAqIC8qIHRoZSBYIGFuZCBZIGNvb3JkaW5hdGVzIGF0IDMyIGJ5dGVzIGVhY2ggKi8gXAorICAgICAgICAoVF9DT1NFX0NSWVBUT19FQ19QMjU2X0NPT1JEX1NJWkUgKyAxICsgMikKKyNkZWZpbmUgVVNFRlVMX0JVRl9NQUtFX1NUQUNLX1VCIFVzZWZ1bEJ1Zl9NQUtFX1NUQUNLX1VCCisKKyNkZWZpbmUgQ09TRV9TSUdfQ09OVEVYVF9TVFJJTkdfU0lHTkFUVVJFMSAiU2lnbmF0dXJlMSIKKworLyogUHJpdmF0ZSB2YWx1ZS4gSW50ZW50aW9uYWxseSBub3QgZG9jdW1lbnRlZCBmb3IgRG94eWdlbi4KKyAqIFRoaXMgaXMgdGhlIHNpemUgYWxsb2NhdGVkIGZvciB0aGUgZW5jb2RlZCBwcm90ZWN0ZWQgaGVhZGVycy4gIEl0CisgKiBuZWVkcyB0byBiZSBiaWcgZW5vdWdoIGZvciBtYWtlX3Byb3RlY3RlZF9oZWFkZXIoKSB0byBzdWNjZWVkLiBJdAorICogY3VycmVudGx5IHNpemVkIGZvciBvbmUgaGVhZGVyIHdpdGggYW4gYWxnb3JpdGhtIElEIHVwIHRvIDMyIGJpdHMKKyAqIGxvbmcgLS0gb25lIGJ5dGUgZm9yIHRoZSB3cmFwcGluZyBtYXAsIG9uZSBieXRlIGZvciB0aGUgbGFiZWwsIDUKKyAqIGJ5dGVzIGZvciB0aGUgSUQuIElmIHRoaXMgaXMgbWFkZSBhY2NpZGVudGlhbGx5IHRvbyBzbWFsbCwgUUNCT1Igd2lsbAorICogb25seSByZXR1cm4gYW4gZXJyb3IsIGFuZCBub3Qgb3ZlcnJ1biBhbnkgYnVmZmVycy4KKyAqCisgKiA5IGV4dHJhIGJ5dGVzIGFyZSBhZGRlZCwgcm91bmRpbmcgaXQgdXAgdG8gMTYgdG90YWwsIGluIGNhc2Ugc29tZQorICogb3RoZXIgcHJvdGVjdGVkIGhlYWRlciBpcyB0byBiZSBhZGRlZC4KKyAqLworI2RlZmluZSBUX0NPU0VfU0lHTjFfTUFYX1BST1RfSEVBREVSICgxKzErNSs5KQorCisvKioKKyAqIFRoaXMgaXMgdGhlIHNpemUgb2YgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIENCT1IgZW5jb2RlZCBUQlMKKyAqIGJ5dGVzLiBJdCBpcyBhcm91bmQgMjAgYnl0ZXMuIFNlZSBjcmVhdGVfdGJzX2hhc2goKS4KKyAqLworI2RlZmluZSBUX0NPU0VfU0laRV9PRl9UQlMgXAorICAgIDEgKyAvKiBGb3Igb3BlbmluZyB0aGUgYXJyYXkgKi8gXAorICAgIHNpemVvZihDT1NFX1NJR19DT05URVhUX1NUUklOR19TSUdOQVRVUkUxKSArIC8qICJTaWduYXR1cmUxIiAqLyBcCisgICAgMiArIC8qIE92ZXJoZWFkIGZvciBlbmNvZGluZyBzdHJpbmcgKi8gXAorICAgIFRfQ09TRV9TSUdOMV9NQVhfUFJPVF9IRUFERVIgKyAvKiBlbnRpcmUgcHJvdGVjdGVkIGhlYWRlcnMgKi8gXAorICAgIDMgKiAoIC8qIDMgTlVMTCBic3RycyBmb3IgZmllbGRzIG5vdCB1c2VkICovIFwKKyAgICAgICAgMSAvKiBzaXplIG9mIGEgTlVMTCBic3RyICovICBcCisgICAgKQorCisvKgorIENCT1IgTGFiZWwgZm9yIHByb3ByaWV0YXJ5IGhlYWRlciBpbmRpY2F0aW5nIHNob3J0LWNpcmN1aXQKKyBzaWduaW5nIHdhcyB1c2VkLiBKdXN0IGEgcmFuZG9tIG51bWJlciBpbiB0aGUgcHJvcHJpZXRhcnkKKyBsYWJlbCBzcGFjZSAqLworI2RlZmluZSBUX0NPU0VfU0hPUlRfQ0lSQ1VJVF9MQUJFTCAgICAgICAgICAgICAgKC04Njc1MzA5KQorCisjZGVmaW5lIEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFICAgICAgICAgICAgICAgICAoLTc1MDAwKQorI2RlZmluZSBFQVRfQ0JPUl9BUk1fTEFCRUxfUFJPRklMRV9ERUZJTklUSU9OICAgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFIC0gMCkKKyNkZWZpbmUgRUFUX0NCT1JfQVJNX0xBQkVMX0NMSUVOVF9JRCAgICAgICAgICAgIChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAtIDEpCisjZGVmaW5lIEVBVF9DQk9SX0FSTV9MQUJFTF9TRUNVUklUWV9MSUZFQ1lDTEUgICAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgLSAyKQorI2RlZmluZSBFQVRfQ0JPUl9BUk1fTEFCRUxfSU1QTEVNRU5UQVRJT05fSUQgICAgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFIC0gMykKKyNkZWZpbmUgRUFUX0NCT1JfQVJNX0xBQkVMX0JPT1RfU0VFRCAgICAgICAgICAgIChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAtIDQpCisjZGVmaW5lIEVBVF9DQk9SX0FSTV9MQUJFTF9IV19WRVJTSU9OICAgICAgICAgICAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgLSA1KQorI2RlZmluZSBFQVRfQ0JPUl9BUk1fTEFCRUxfU1dfQ09NUE9ORU5UUyAgICAgICAgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFIC0gNikKKyNkZWZpbmUgRUFUX0NCT1JfQVJNX0xBQkVMX05PX1NXX0NPTVBPTkVOVFMgICAgIChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAtIDcpCisjZGVmaW5lIEVBVF9DQk9SX0FSTV9MQUJFTF9OT05DRSAgICAgICAgICAgICAgICAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgLSA4KQorI2RlZmluZSBFQVRfQ0JPUl9BUk1fTEFCRUxfVUVJRCAgICAgICAgICAgICAgICAgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFIC0gOSkKKyNkZWZpbmUgRUFUX0NCT1JfQVJNX0xBQkVMX09SSUdJTkFUSU9OICAgICAgICAgIChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAtIDEwKQorCisjZGVmaW5lIENCT1JfQVJNX1RPVEFMX0NMQUlNX0lOU1RBTkNFICAgICAgICAgICAxMAorCisjZGVmaW5lIEVBVF9DQk9SX1NXX0NPTVBPTkVOVF9UWVBFICAgICAgICAgICAgICAoMXUpCisjZGVmaW5lIEVBVF9DQk9SX1NXX0NPTVBPTkVOVF9NRUFTVVJFTUVOVCAgICAgICAoMnUpCisjZGVmaW5lIEVBVF9DQk9SX1NXX0NPTVBPTkVOVF9FUE9DSCAgICAgICAgICAgICAoM3UpCisjZGVmaW5lIEVBVF9DQk9SX1NXX0NPTVBPTkVOVF9WRVJTSU9OICAgICAgICAgICAoNHUpCisjZGVmaW5lIEVBVF9DQk9SX1NXX0NPTVBPTkVOVF9TSUdORVJfSUQgICAgICAgICAoNXUpCisjZGVmaW5lIEVBVF9DQk9SX1NXX0NPTVBPTkVOVF9NRUFTVVJFTUVOVF9ERVNDICAoNnUpCisKKyNkZWZpbmUgTUFOREFUT1JZX0NMQUlNX1dJVEhfU1dfQ09NUCAgICAgICAgICAgKDEgPDwgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEVBVF9DQk9SX0FSTV9MQUJFTF9OT05DRSkgICAgICAgICAgICAgIHwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPDwgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEVBVF9DQk9SX0FSTV9MQUJFTF9VRUlEKSAgICAgICAgICAgICAgIHwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPDwgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEVBVF9DQk9SX0FSTV9MQUJFTF9JTVBMRU1FTlRBVElPTl9JRCkgIHwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPDwgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEVBVF9DQk9SX0FSTV9MQUJFTF9DTElFTlRfSUQpICAgICAgICAgIHwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPDwgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEVBVF9DQk9SX0FSTV9MQUJFTF9TRUNVUklUWV9MSUZFQ1lDTEUpIHwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPDwgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEVBVF9DQk9SX0FSTV9MQUJFTF9CT09UX1NFRUQpICAgICAgICAgIHwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPDwgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEVBVF9DQk9SX0FSTV9MQUJFTF9TV19DT01QT05FTlRTKSkKKworI2RlZmluZSBNQU5EQVRPUllfQ0xBSU1fTk9fU1dfQ09NUCAgICAgICAgICAgICAoMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX05PTkNFKSAgICAgICAgICAgICAgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX1VFSUQpICAgICAgICAgICAgICAgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX0lNUExFTUVOVEFUSU9OX0lEKSAgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX0NMSUVOVF9JRCkgICAgICAgICAgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX1NFQ1VSSVRZX0xJRkVDWUNMRSkgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX0JPT1RfU0VFRCkgICAgICAgICAgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX05PX1NXX0NPTVBPTkVOVFMpKQorCisjZGVmaW5lIE1BTkRBVE9SWV9TV19DT01QICAgICAgICAgICAgICAgICAgICAgICgxIDw8IEVBVF9DQk9SX1NXX0NPTVBPTkVOVF9NRUFTVVJFTUVOVCAgICAgIHwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPDwgRUFUX0NCT1JfU1dfQ09NUE9ORU5UX1NJR05FUl9JRCkKKworI2RlZmluZSBOVUxMX1VTRUZVTF9CVUZfQyAgTlVMTFVzZWZ1bEJ1ZkMKKworZW51bSBhdHRlc3RhdGlvbl9lcnJvcl9jb2RlIHsKKyAgICBQQUxfQVRURVNUX1NVQ0NFU1MgPSAwLAorICAgIFBBTF9BVFRFU1RfVE9LRU5fRVJSX0NCT1JfRk9STUFUVElORyA9IFBBTF9BVFRFU1RfTUlOX0VSUk9SLAorICAgIFBBTF9BVFRFU1RfVE9LRU5fQ0hBTExFTkdFX01JU01BVENILAorICAgIFBBTF9BVFRFU1RfVE9LRU5fTk9UX1NVUFBPUlRFRCwKKyAgICBQQUxfQVRURVNUX1RPS0VOX05PVF9BTExfTUFOREFUT1JZX0NMQUlNUywKKyAgICBQQUxfQVRURVNUX0hBU0hfTEVOR1RIX01JU01BVENILAorICAgIFBBTF9BVFRFU1RfSEFTSF9NSVNNQVRDSCwKKyAgICBQQUxfQVRURVNUX0hBU0hfRkFJTCwKKyAgICBQQUxfQVRURVNUX0hBU0hfVU5TVVBQT1JURUQsCisgICAgUEFMX0FUVEVTVF9IQVNIX0JVRkZFUl9TSVpFLAorICAgIFBBTF9BVFRFU1RfRVJSX1BST1RFQ1RFRF9IRUFERVJTLAorICAgIFBBTF9BVFRFU1RfRVJSX1NJR05fU1RSVUNULAorICAgIFBBTF9BVFRFU1RfRVJST1IsCit9OworCitzdHJ1Y3QgaXRlbXNfdG9fZ2V0X3QgeworICAgIGludDY0X3QgbGFiZWw7CisgICAgUUNCT1JJdGVtIGl0ZW07Cit9OworCitpbnQzMl90IHBhbF9pbml0aWFsX2F0dGVzdF92ZXJpZnlfdG9rZW4odWludDhfdCAqY2hhbGxlbmdlLCB1aW50MzJfdCBjaGFsbGVuZ2Vfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICp0b2tlbiwgdWludDMyX3QgdG9rZW5fc2l6ZSk7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fZW1wdHlfaW50Zi5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2VtcHR5X2ludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWYzZjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2VtcHR5X2ludGYuYwpAQCAtMCwwICsxLDMwIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSAicGFsX2NvbW1vbi5oIgorCisvKioKKyAgICBAYnJpZWYgICAgLSBUaGlzIEFQSSB3aWxsIGNhbGwgdGhlIHJlcXVlc3RlZCBhdHRlc3RhdGlvbiBmdW5jdGlvbgorICAgIEBwYXJhbSAgICAtIHR5cGUgICAgOiBmdW5jdGlvbiBjb2RlCisgICAgICAgICAgICAgICAgdmFsaXN0ICA6IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QKKyAgICBAcmV0dXJuICAgLSBlcnJvciBzdGF0dXMKKyoqLworaW50MzJfdCBwYWxfYXR0ZXN0YXRpb25fZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KQoreworICAgIHJldHVybiBQQUxfU1RBVFVTX0VSUk9SOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9pbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ5OWY3NAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9pbnRmLmMKQEAgLTAsMCArMSw1NCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworCisjaW5jbHVkZSAicGFsX2F0dGVzdGF0aW9uX2ludGYuaCIKKworLyoqCisgICAgQGJyaWVmICAgIC0gVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgYXR0ZXN0YXRpb24gZnVuY3Rpb24KKyAgICBAcGFyYW0gICAgLSB0eXBlICAgIDogZnVuY3Rpb24gY29kZQorICAgICAgICAgICAgICAgIHZhbGlzdCAgOiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0CisgICAgQHJldHVybiAgIC0gZXJyb3Igc3RhdHVzCisqKi8KK2ludDMyX3QgcGFsX2F0dGVzdGF0aW9uX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCkKK3sKKyAgICB1aW50OF90ICAgICAqY2hhbGxlbmdlLCAqdG9rZW47CisgICAgdWludDMyX3QgICAgY2hhbGxlbmdlX3NpemUsICp0b2tlbl9zaXplLCB2ZXJpZnlfdG9rZW5fc2l6ZTsKKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgUEFMX0lOSVRJQUxfQVRURVNUX0dFVF9UT0tFTjoKKyAgICAgICAgICAgIGNoYWxsZW5nZSA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIGNoYWxsZW5nZV9zaXplID0gdmFfYXJnKHZhbGlzdCwgdWludDMyX3QpOworICAgICAgICAgICAgdG9rZW4gPSB2YV9hcmcodmFsaXN0LCB1aW50OF90Kik7CisgICAgICAgICAgICB0b2tlbl9zaXplID0gdmFfYXJnKHZhbGlzdCwgdWludDMyX3QqKTsKKyAgICAgICAgICAgIHJldHVybiBwc2FfaW5pdGlhbF9hdHRlc3RfZ2V0X3Rva2VuKGNoYWxsZW5nZSwgY2hhbGxlbmdlX3NpemUsIHRva2VuLCB0b2tlbl9zaXplKTsKKyAgICAgICAgY2FzZSBQQUxfSU5JVElBTF9BVFRFU1RfR0VUX1RPS0VOX1NJWkU6CisgICAgICAgICAgICBjaGFsbGVuZ2Vfc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHVpbnQzMl90KTsKKyAgICAgICAgICAgIHRva2VuX3NpemUgPSB2YV9hcmcodmFsaXN0LCB1aW50MzJfdCopOworICAgICAgICAgICAgcmV0dXJuIHBzYV9pbml0aWFsX2F0dGVzdF9nZXRfdG9rZW5fc2l6ZShjaGFsbGVuZ2Vfc2l6ZSwgdG9rZW5fc2l6ZSk7CisgICAgICAgIGNhc2UgUEFMX0lOSVRJQUxfQVRURVNUX1ZFUklGWV9UT0tFTjoKKyAgICAgICAgICAgIGNoYWxsZW5nZSA9IHZhX2FyZyh2YWxpc3QsIHVpbnQ4X3QqKTsKKyAgICAgICAgICAgIGNoYWxsZW5nZV9zaXplID0gdmFfYXJnKHZhbGlzdCwgdWludDMyX3QpOworICAgICAgICAgICAgdG9rZW4gPSB2YV9hcmcodmFsaXN0LCB1aW50OF90Kik7CisgICAgICAgICAgICB2ZXJpZnlfdG9rZW5fc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHVpbnQzMl90KTsKKyAgICAgICAgICAgIHJldHVybiBwYWxfaW5pdGlhbF9hdHRlc3RfdmVyaWZ5X3Rva2VuKGNoYWxsZW5nZSwgY2hhbGxlbmdlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiwgdmVyaWZ5X3Rva2VuX3NpemUpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFBBTF9TVEFUVVNfVU5TVVBQT1JURURfRlVOQzsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25faW50Zi5oIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2ludGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmY2ZWU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2ludGYuaApAQCAtMCwwICsxLDMwIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaWZuZGVmIF9QQUxfSU5JVElBTF9BVFRFU1RBVElPTl9IXworI2RlZmluZSBfUEFMX0lOSVRJQUxfQVRURVNUQVRJT05fSF8KKworI2luY2x1ZGUgInBhbF9hdHRlc3RhdGlvbl9jcnlwdG8uaCIKKworZW51bSBhdHRlc3RhdGlvbl9mdW5jdGlvbl9jb2RlIHsKKyAgICBQQUxfSU5JVElBTF9BVFRFU1RfR0VUX1RPS0VOICAgICAgICA9IDB4MSwKKyAgICBQQUxfSU5JVElBTF9BVFRFU1RfR0VUX1RPS0VOX1NJWkUgICA9IDB4MiwKKyAgICBQQUxfSU5JVElBTF9BVFRFU1RfVkVSSUZZX1RPS0VOICAgICA9IDB4MywKK307CisKK2ludDMyX3QgcGFsX2F0dGVzdGF0aW9uX2Z1bmN0aW9uKGludCB0eXBlLCB2YV9saXN0IHZhbGlzdCk7CisjZW5kaWYgLyogX1BBTF9JTklUSUFMX0FUVEVTVEFUSU9OX0hfICovCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL25zcGUvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3BhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2VfZW1wdHlfaW50Zi5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9uc3BlL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS9wYWxfaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlX2VtcHR5X2ludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzNjZmE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9uc3BlL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS9wYWxfaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlX2VtcHR5X2ludGYuYwpAQCAtMCwwICsxLDMwIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSAicGFsX2NvbW1vbi5oIgorCisvKioKKyAgICBAYnJpZWYgICAgLSBUaGlzIEFQSSB3aWxsIGNhbGwgdGhlIHJlcXVlc3RlZCBpbnRlcm5hbCB0cnVzdGVkIHN0b3JhZ2UgZnVuY3Rpb24KKyAgICBAcGFyYW0gICAgLSB0eXBlICAgIDogZnVuY3Rpb24gY29kZQorICAgICAgICAgICAgICAgIHZhbGlzdCAgOiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0CisgICAgQHJldHVybiAgIC0gZXJyb3Igc3RhdHVzCisqKi8KK3VpbnQzMl90IHBhbF9pdHNfZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KQoreworICAgIHJldHVybiBQQUxfU1RBVFVTX0VSUk9SOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9uc3BlL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS9wYWxfaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlX2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvcGFsX2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZV9pbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYwNGFiMAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvcGFsX2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZV9pbnRmLmMKQEAgLTAsMCArMSw2MCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworCisjaW5jbHVkZSAicGFsX2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZV9pbnRmLmgiCisKKy8qKgorICAgIEBicmllZiAgICAtIFRoaXMgQVBJIHdpbGwgY2FsbCB0aGUgcmVxdWVzdGVkIGludGVybmFsIHRydXN0ZWQgc3RvcmFnZSBmdW5jdGlvbgorICAgIEBwYXJhbSAgICAtIHR5cGUgICAgOiBmdW5jdGlvbiBjb2RlCisgICAgICAgICAgICAgICAgdmFsaXN0ICA6IHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QKKyAgICBAcmV0dXJuICAgLSBlcnJvciBzdGF0dXMKKyoqLwordWludDMyX3QgcGFsX2l0c19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpCit7CisgICAgcHNhX2l0c191aWRfdCAgICAgICAgICAgdWlkOworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGRhdGFfbGVuZ3RoLCBvZmZzZXQ7CisgICAgY29uc3Qgdm9pZCAgICAgICAgICAgICAgKnBfd3JpdGVfZGF0YTsKKyAgICB2b2lkICAgICAgICAgICAgICAgICAgICAqcF9yZWFkX2RhdGE7CisgICAgcHNhX2l0c19jcmVhdGVfZmxhZ3NfdCAgaXRzX2NyZWF0ZV9mbGFnczsKKyAgICBzdHJ1Y3QgcHNhX2l0c19pbmZvX3QgICAqaXRzX3BfaW5mbzsKKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgY2FzZSBQQUxfSVRTX1NFVDoKKyAgICAgICAgdWlkID0gdmFfYXJnKHZhbGlzdCwgcHNhX2l0c191aWRfdCk7CisgICAgICAgIGRhdGFfbGVuZ3RoID0gdmFfYXJnKHZhbGlzdCwgdWludDMyX3QpOworICAgICAgICBwX3dyaXRlX2RhdGEgPSB2YV9hcmcodmFsaXN0LCBjb25zdCB2b2lkKik7CisgICAgICAgIGl0c19jcmVhdGVfZmxhZ3MgPSB2YV9hcmcodmFsaXN0LCBwc2FfaXRzX2NyZWF0ZV9mbGFnc190KTsKKyAgICAgICAgcmV0dXJuIHBzYV9pdHNfc2V0KHVpZCwgZGF0YV9sZW5ndGgsIHBfd3JpdGVfZGF0YSwgaXRzX2NyZWF0ZV9mbGFncyk7CisgICAgY2FzZSBQQUxfSVRTX0dFVDoKKyAgICAgICAgdWlkID0gdmFfYXJnKHZhbGlzdCwgcHNhX2l0c191aWRfdCk7CisgICAgICAgIG9mZnNldCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQzMl90KTsKKyAgICAgICAgZGF0YV9sZW5ndGggPSB2YV9hcmcodmFsaXN0LCB1aW50MzJfdCk7CisgICAgICAgIHBfcmVhZF9kYXRhID0gdmFfYXJnKHZhbGlzdCwgdm9pZCopOworICAgICAgICByZXR1cm4gcHNhX2l0c19nZXQodWlkLCBvZmZzZXQsIGRhdGFfbGVuZ3RoLCBwX3JlYWRfZGF0YSk7CisgICAgY2FzZSBQQUxfSVRTX0dFVF9JTkZPOgorICAgICAgICB1aWQgPSB2YV9hcmcodmFsaXN0LCBwc2FfaXRzX3VpZF90KTsKKyAgICAgICAgaXRzX3BfaW5mbyA9IHZhX2FyZyh2YWxpc3QsIHN0cnVjdCBwc2FfaXRzX2luZm9fdCopOworICAgICAgICByZXR1cm4gcHNhX2l0c19nZXRfaW5mbyh1aWQsIGl0c19wX2luZm8pOworICAgIGNhc2UgUEFMX0lUU19SRU1PVkU6CisgICAgICAgIHVpZCA9IHZhX2FyZyh2YWxpc3QsIHBzYV9pdHNfdWlkX3QpOworICAgICAgICByZXR1cm4gcHNhX2l0c19yZW1vdmUodWlkKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gUEFMX1NUQVRVU19VTlNVUFBPUlRFRF9GVU5DOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UvcGFsX2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZV9pbnRmLmggYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL25zcGUvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3BhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2VfaW50Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYjZhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL25zcGUvaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlL3BhbF9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2VfaW50Zi5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpZm5kZWYgX1BBTF9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfSU5URl9IXworI2RlZmluZSBfUEFMX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9JTlRGX0hfCisKKyNpbmNsdWRlICJwYWxfY29tbW9uLmgiCisKK2VudW0gaXRzX2Z1bmN0aW9uX2NvZGUgeworICAgIFBBTF9JVFNfU0VUICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorICAgIFBBTF9JVFNfR0VUICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyLAorICAgIFBBTF9JVFNfR0VUX0lORk8gICAgICAgICAgICAgICAgICAgID0gMHgzLAorICAgIFBBTF9JVFNfUkVNT1ZFICAgICAgICAgICAgICAgICAgICAgID0gMHg0LAorfTsKKwordWludDMyX3QgcGFsX2l0c19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpOworI2VuZGlmIC8qIF9QQUxfSU5URVJOQUxfVFJVU1RFRF9TVE9SQUdFX0lOVEZfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9wcm90ZWN0ZWRfc3RvcmFnZS9wYWxfcHJvdGVjdGVkX3N0b3JhZ2VfZW1wdHlfaW50Zi5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9uc3BlL3Byb3RlY3RlZF9zdG9yYWdlL3BhbF9wcm90ZWN0ZWRfc3RvcmFnZV9lbXB0eV9pbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU5YjEzZAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvbnNwZS9wcm90ZWN0ZWRfc3RvcmFnZS9wYWxfcHJvdGVjdGVkX3N0b3JhZ2VfZW1wdHlfaW50Zi5jCkBAIC0wLDAgKzEsMzAgQEAKKy8qKiBAZmlsZQorICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKiovCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlICJwYWxfY29tbW9uLmgiCisKKy8qKgorICAgIEBicmllZiAgICAtIFRoaXMgQVBJIHdpbGwgY2FsbCB0aGUgcmVxdWVzdGVkIHByb3RlY3RlZCBzdG9yYWdlIGZ1bmN0aW9uCisgICAgQHBhcmFtICAgIC0gdHlwZSAgICA6IGZ1bmN0aW9uIGNvZGUKKyAgICAgICAgICAgICAgICB2YWxpc3QgIDogdmFyaWFibGUgYXJndW1lbnQgbGlzdAorICAgIEByZXR1cm4gICAtIGVycm9yIHN0YXR1cworKiovCit1aW50MzJfdCBwYWxfcHNfZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KQoreworICAgIHJldHVybiBQQUxfU1RBVFVTX0VSUk9SOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9uc3BlL3Byb3RlY3RlZF9zdG9yYWdlL3BhbF9wcm90ZWN0ZWRfc3RvcmFnZV9pbnRmLmMgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL25zcGUvcHJvdGVjdGVkX3N0b3JhZ2UvcGFsX3Byb3RlY3RlZF9zdG9yYWdlX2ludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDI0MTUzCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9uc3BlL3Byb3RlY3RlZF9zdG9yYWdlL3BhbF9wcm90ZWN0ZWRfc3RvcmFnZV9pbnRmLmMKQEAgLTAsMCArMSw3NSBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworCisjaW5jbHVkZSAicGFsX3Byb3RlY3RlZF9zdG9yYWdlX2ludGYuaCIKKworLyoqCisgICAgQGJyaWVmICAgIC0gVGhpcyBBUEkgd2lsbCBjYWxsIHRoZSByZXF1ZXN0ZWQgcHJvdGVjdGVkIHN0b3JhZ2UgZnVuY3Rpb24KKyAgICBAcGFyYW0gICAgLSB0eXBlICAgIDogZnVuY3Rpb24gY29kZQorICAgICAgICAgICAgICAgIHZhbGlzdCAgOiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0CisgICAgQHJldHVybiAgIC0gZXJyb3Igc3RhdHVzCisqKi8KK3VpbnQzMl90IHBhbF9wc19mdW5jdGlvbihpbnQgdHlwZSwgdmFfbGlzdCB2YWxpc3QpCit7CisgICAgcHNhX3BzX3VpZF90ICAgICAgICAgICAgdWlkOworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGRhdGFfbGVuZ3RoLCBzaXplLCBvZmZzZXQ7CisgICAgY29uc3Qgdm9pZCAgICAgICAgICAgICAgKnBfd3JpdGVfZGF0YTsKKyAgICB2b2lkICAgICAgICAgICAgICAgICAgICAqcF9yZWFkX2RhdGE7CisgICAgcHNhX3BzX2NyZWF0ZV9mbGFnc190ICAgcHNfY3JlYXRlX2ZsYWdzOworICAgIHN0cnVjdCBwc2FfcHNfaW5mb190ICAgICpwc19wX2luZm87CisKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICBjYXNlIFBBTF9QU19TRVQ6CisgICAgICAgICB1aWQgPSB2YV9hcmcodmFsaXN0LCBwc2FfcHNfdWlkX3QpOworICAgICAgICAgZGF0YV9sZW5ndGggPSB2YV9hcmcodmFsaXN0LCB1aW50MzJfdCk7CisgICAgICAgICBwX3dyaXRlX2RhdGEgPSB2YV9hcmcodmFsaXN0LCBjb25zdCB2b2lkKik7CisgICAgICAgICBwc19jcmVhdGVfZmxhZ3MgPSB2YV9hcmcodmFsaXN0LCBwc2FfcHNfY3JlYXRlX2ZsYWdzX3QpOworICAgICAgICAgcmV0dXJuIHBzYV9wc19zZXQodWlkLCBkYXRhX2xlbmd0aCwgcF93cml0ZV9kYXRhLCBwc19jcmVhdGVfZmxhZ3MpOworICAgICBjYXNlIFBBTF9QU19HRVQ6CisgICAgICAgICB1aWQgPSB2YV9hcmcodmFsaXN0LCBwc2FfcHNfdWlkX3QpOworICAgICAgICAgb2Zmc2V0ID0gdmFfYXJnKHZhbGlzdCwgdWludDMyX3QpOworICAgICAgICAgZGF0YV9sZW5ndGggPSB2YV9hcmcodmFsaXN0LCB1aW50MzJfdCk7CisgICAgICAgICBwX3JlYWRfZGF0YSA9IHZhX2FyZyh2YWxpc3QsIHZvaWQqKTsKKyAgICAgICAgIHJldHVybiBwc2FfcHNfZ2V0KHVpZCwgb2Zmc2V0LCBkYXRhX2xlbmd0aCwgcF9yZWFkX2RhdGEpOworICAgICBjYXNlIFBBTF9QU19HRVRfSU5GTzoKKyAgICAgICAgIHVpZCA9IHZhX2FyZyh2YWxpc3QsIHBzYV9wc191aWRfdCk7CisgICAgICAgICBwc19wX2luZm8gPSB2YV9hcmcodmFsaXN0LCBzdHJ1Y3QgcHNhX3BzX2luZm9fdCopOworICAgICAgICAgcmV0dXJuIHBzYV9wc19nZXRfaW5mbyh1aWQsIHBzX3BfaW5mbyk7CisgICAgIGNhc2UgUEFMX1BTX1JFTU9WRToKKyAgICAgICAgIHVpZCA9IHZhX2FyZyh2YWxpc3QsIHBzYV9wc191aWRfdCk7CisgICAgICAgICByZXR1cm4gcHNhX3BzX3JlbW92ZSh1aWQpOworICAgICBjYXNlIFBBTF9QU19DUkVBVEU6CisgICAgICAgICB1aWQgPSB2YV9hcmcodmFsaXN0LCBwc2FfcHNfdWlkX3QpOworICAgICAgICAgc2l6ZSA9IHZhX2FyZyh2YWxpc3QsIHVpbnQzMl90KTsKKyAgICAgICAgIHBzX2NyZWF0ZV9mbGFncyA9IHZhX2FyZyh2YWxpc3QsIHBzYV9wc19jcmVhdGVfZmxhZ3NfdCk7CisgICAgICAgICByZXR1cm4gcHNhX3BzX2NyZWF0ZSh1aWQsIHNpemUsIHBzX2NyZWF0ZV9mbGFncyk7CisgICAgIGNhc2UgUEFMX1BTX1NFVF9FWFRFTkRFRDoKKyAgICAgICAgIHVpZCA9IHZhX2FyZyh2YWxpc3QsIHBzYV9wc191aWRfdCk7CisgICAgICAgICBvZmZzZXQgPSB2YV9hcmcodmFsaXN0LCB1aW50MzJfdCk7CisgICAgICAgICBkYXRhX2xlbmd0aCA9IHZhX2FyZyh2YWxpc3QsIHVpbnQzMl90KTsKKyAgICAgICAgIHBfd3JpdGVfZGF0YSA9IHZhX2FyZyh2YWxpc3QsIGNvbnN0IHZvaWQqKTsKKyAgICAgICAgIHJldHVybiBwc2FfcHNfc2V0X2V4dGVuZGVkKHVpZCwgb2Zmc2V0LCBkYXRhX2xlbmd0aCwgcF93cml0ZV9kYXRhKTsKKyAgICAgY2FzZSBQQUxfUFNfR0VUX1NVUFBPUlQ6CisgICAgICAgICByZXR1cm4gcHNhX3BzX2dldF9zdXBwb3J0KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFBBTF9TVEFUVVNfVU5TVVBQT1JURURfRlVOQzsKKyAgICB9CisKKyAgICByZXR1cm4gUEFMX1NUQVRVU19VTlNVUFBPUlRFRF9GVU5DOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9uc3BlL3Byb3RlY3RlZF9zdG9yYWdlL3BhbF9wcm90ZWN0ZWRfc3RvcmFnZV9pbnRmLmggYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL25zcGUvcHJvdGVjdGVkX3N0b3JhZ2UvcGFsX3Byb3RlY3RlZF9zdG9yYWdlX2ludGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzM4Y2RmCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9uc3BlL3Byb3RlY3RlZF9zdG9yYWdlL3BhbF9wcm90ZWN0ZWRfc3RvcmFnZV9pbnRmLmgKQEAgLTAsMCArMSwzNCBAQAorLyoqIEBmaWxlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqKi8KKworI2lmbmRlZiBfUEFMX1BST1RFQ1RFRF9TVE9SQUdFX0lOVEZfSF8KKyNkZWZpbmUgX1BBTF9QUk9URUNURURfU1RPUkFHRV9JTlRGX0hfCisKKyNpbmNsdWRlICJwYWxfY29tbW9uLmgiCisKK2VudW0gcHNfZnVuY3Rpb25fY29kZSB7CisgICAgUEFMX1BTX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEsCisgICAgUEFMX1BTX0dFVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIsCisgICAgUEFMX1BTX0dFVF9JTkZPICAgICAgICAgICAgICAgICAgICAgPSAweDMsCisgICAgUEFMX1BTX1JFTU9WRSAgICAgICAgICAgICAgICAgICAgICAgPSAweDQsCisgICAgUEFMX1BTX0NSRUFURSAgICAgICAgICAgICAgICAgICAgICAgPSAweDUsCisgICAgUEFMX1BTX1NFVF9FWFRFTkRFRCAgICAgICAgICAgICAgICAgPSAweDYsCisgICAgUEFMX1BTX0dFVF9TVVBQT1JUICAgICAgICAgICAgICAgICAgPSAweDcsCit9OworCit1aW50MzJfdCBwYWxfcHNfZnVuY3Rpb24oaW50IHR5cGUsIHZhX2xpc3QgdmFsaXN0KTsKKyNlbmRpZiAvKiBfUEFMX1BST1RFQ1RFRF9TVE9SQUdFX0lOVEZfSF8gKi8KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvcmVmZXJlbmNlX2xvZ3MvYXR0ZXN0YXRpb24udHh0IGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9yZWZlcmVuY2VfbG9ncy9hdHRlc3RhdGlvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGM5MTgwOQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvcmVmZXJlbmNlX2xvZ3MvYXR0ZXN0YXRpb24udHh0CkBAIC0wLDAgKzEsMzYgQEAKKyoqKioqIFBTQSBBcmNoaXRlY3R1cmUgVGVzdCBTdWl0ZSAtIFZlcnNpb24gMC44ICoqKioqDQorDQorUnVubmluZy4uIEF0dGVzdGF0aW9uIFN1aXRlDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorVEVTVDogODAxIHwgREVTQ1JJUFRJT046IFRlc3RpbmcgaW5pdGlhbCBhdHRlc3RhdGlvbiBBUElzDQorW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUNCitbQ2hlY2sgMV0gVGVzdCBwc2FfaW5pdGlhbF9hdHRlc3RhdGlvbl9nZXRfdG9rZW4gd2l0aCBDaGFsbGVuZ2UgMzINCitbQ2hlY2sgMl0gVGVzdCBwc2FfaW5pdGlhbF9hdHRlc3RhdGlvbl9nZXRfdG9rZW4gd2l0aCBDaGFsbGVuZ2UgNDgNCitbQ2hlY2sgM10gVGVzdCBwc2FfaW5pdGlhbF9hdHRlc3RhdGlvbl9nZXRfdG9rZW4gd2l0aCBDaGFsbGVuZ2UgNjQNCitbQ2hlY2sgNF0gVGVzdCBwc2FfaW5pdGlhbF9hdHRlc3RhdGlvbl9nZXRfdG9rZW4gd2l0aCB6ZXJvIGNoYWxsZW5nZSBzaXplDQorW0NoZWNrIDVdIFRlc3QgcHNhX2luaXRpYWxfYXR0ZXN0YXRpb25fZ2V0X3Rva2VuIHdpdGggc21hbGwgY2hhbGxlbmdlIHNpemUNCitbQ2hlY2sgNl0gVGVzdCBwc2FfaW5pdGlhbF9hdHRlc3RhdGlvbl9nZXRfdG9rZW4gd2l0aCBpbnZhbGlkIGNoYWxsZW5nZSBzaXplDQorW0NoZWNrIDddIFRlc3QgcHNhX2luaXRpYWxfYXR0ZXN0YXRpb25fZ2V0X3Rva2VuIHdpdGggbGFyZ2UgY2hhbGxlbmdlIHNpemUNCitbQ2hlY2sgOF0gVGVzdCBwc2FfaW5pdGlhbF9hdHRlc3RhdGlvbl9nZXRfdG9rZW4gd2l0aCB6ZXJvIGFzIHRva2VuIHNpemUNCitbQ2hlY2sgOV0gVGVzdCBwc2FfaW5pdGlhbF9hdHRlc3RhdGlvbl9nZXRfdG9rZW4gd2l0aCBzbWFsbCB0b2tlbiBzaXplDQorW0NoZWNrIDEwXSBUZXN0IHBzYV9pbml0aWFsX2F0dGVzdGF0aW9uX2dldF90b2tlbl9zaXplIHdpdGggQ2hhbGxlbmdlIDMyDQorW0NoZWNrIDExXSBUZXN0IHBzYV9pbml0aWFsX2F0dGVzdGF0aW9uX2dldF90b2tlbl9zaXplIHdpdGggQ2hhbGxlbmdlIDQ4DQorW0NoZWNrIDEyXSBUZXN0IHBzYV9pbml0aWFsX2F0dGVzdGF0aW9uX2dldF90b2tlbl9zaXplIHdpdGggQ2hhbGxlbmdlIDY0DQorW0NoZWNrIDEzXSBUZXN0IHBzYV9pbml0aWFsX2F0dGVzdGF0aW9uX2dldF90b2tlbl9zaXplIHdpdGggemVybyBjaGFsbGVuZ2Ugc2l6ZQ0KK1tDaGVjayAxNF0gVGVzdCBwc2FfaW5pdGlhbF9hdHRlc3RhdGlvbl9nZXRfdG9rZW5fc2l6ZSB3aXRoIHNtYWxsIGNoYWxsZW5nZSBzaXplDQorW0NoZWNrIDE1XSBUZXN0IHBzYV9pbml0aWFsX2F0dGVzdGF0aW9uX2dldF90b2tlbl9zaXplIHdpdGggaW52YWxpZCBjaGFsbGVuZ2Ugc2l6ZQ0KK1tDaGVjayAxNl0gVGVzdCBwc2FfaW5pdGlhbF9hdHRlc3RhdGlvbl9nZXRfdG9rZW5fc2l6ZSB3aXRoIGxhcmdlIGNoYWxsZW5nZSBzaXplDQorVEVTVCBSRVNVTFQ6IFBBU1NFRA0KKw0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyoqKioqKioqKioqKiBBdHRlc3RhdGlvbiBTdWl0ZSBSZXBvcnQgKioqKioqKioqKg0KK1RPVEFMIFRFU1RTICAgICA6IDENCitUT1RBTCBQQVNTRUQgICAgOiAxDQorVE9UQUwgU0lNIEVSUk9SIDogMA0KK1RPVEFMIEZBSUxFRCAgICA6IDANCitUT1RBTCBTS0lQUEVEICAgOiAwDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorRW50ZXJpbmcgc3RhbmRieS4uDQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9yZWZlcmVuY2VfbG9ncy9jcnlwdG8udHh0IGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9yZWZlcmVuY2VfbG9ncy9jcnlwdG8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM5NzQzYWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL3JlZmVyZW5jZV9sb2dzL2NyeXB0by50eHQKQEAgLTAsMCArMSw0MDMgQEAKKyoqKioqIFBTQSBBcmNoaXRlY3R1cmUgVGVzdCBTdWl0ZSAtIFZlcnNpb24gMC44ICoqKioqDQorDQorUnVubmluZy4uIENyeXB0byBTdWl0ZQ0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KK1RFU1Q6IDIwMSB8IERFU0NSSVBUSU9OOiBUZXN0aW5nIHBzYV9jcnlwdG9faW5pdCBBUEk6IEJhc2ljDQorW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUNCitbQ2hlY2sgMV0gVGVzdCBjYWxsaW5nIGNyeXB0byBmdW5jdGlvbnMgYmVmb3JlIHBzYV9jcnlwdG9faW5pdA0KK1tDaGVjayAyXSBUZXN0IHBzYV9jcnlwdG9faW5pdA0KK1tDaGVjayAzXSBUZXN0IG11bHRpcGxlIHBzYV9jcnlwdG9faW5pdA0KK1RFU1QgUkVTVUxUOiBQQVNTRUQNCisNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCitURVNUOiAyMDIgfCBERVNDUklQVElPTjogVGVzdGluZyBjcnlwdG8ga2V5IG1hbmFnZW1lbnQgQVBJcw0KK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlDQorW0NoZWNrIDFdIFRlc3QgcHNhX2ltcG9ydF9rZXkgMTYgQnl0ZSBBRVMNCitbQ2hlY2sgMl0gVGVzdCBwc2FfaW1wb3J0X2tleSAyNCBCeXRlIEFFUw0KK1tDaGVjayAzXSBUZXN0IHBzYV9pbXBvcnRfa2V5IDMyIEJ5dGUgQUVTDQorW0NoZWNrIDRdIFRlc3QgcHNhX2ltcG9ydF9rZXkgd2l0aCBERVMgNjQgYml0IGtleQ0KK1tDaGVjayA1XSBUZXN0IHBzYV9pbXBvcnRfa2V5IHdpdGggVHJpcGxlIERFUyAyLUtleQ0KK1tDaGVjayA2XSBUZXN0IHBzYV9pbXBvcnRfa2V5IHdpdGggVHJpcGxlIERFUyAzLUtleQ0KK1tDaGVjayA3XSBUZXN0IHBzYV9pbXBvcnRfa2V5IHdpdGgga2V5IGRhdGEgZ3JlYXRlciB0aGFuIHRoZSBhbGdvcml0aG0gc2l6ZQ0KK1tDaGVjayA4XSBUZXN0IHBzYV9pbXBvcnRfa2V5IHdpdGggaW5jb3JyZWN0IGtleSBkYXRhIHNpemUNCitbQ2hlY2sgOV0gVGVzdCBwc2FfaW1wb3J0X2tleSB3aXRoIGluY29ycmVjdCBrZXkgdHlwZQ0KK1tDaGVjayAxMF0gVGVzdCBwc2FfaW1wb3J0X2tleSB3aXRoIGFscmVhZHkgb2NjdXBpZWQga2V5IHNsb3QNCitbQ2hlY2sgMTFdIFRlc3QgcHNhX2ltcG9ydF9rZXkgd2l0aCBpbnZhbGlkIGtleSBzbG90DQorW0NoZWNrIDEyXSBUZXN0IHBzYV9pbXBvcnRfa2V5IHdpdGggemVybyBrZXkgc2xvdA0KK1RFU1QgUkVTVUxUOiBQQVNTRUQNCisNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCitURVNUOiAyMDMgfCBERVNDUklQVElPTjogVGVzdGluZyBjcnlwdG8ga2V5IG1hbmFnZW1lbnQgQVBJcw0KK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlDQorW0NoZWNrIDFdIFRlc3QgcHNhX2V4cG9ydF9rZXkgMTYgQnl0ZSBBRVMNCitbQ2hlY2sgMl0gVGVzdCBwc2FfZXhwb3J0X2tleSAyNCBCeXRlIEFFUw0KK1tDaGVjayAzXSBUZXN0IHBzYV9leHBvcnRfa2V5IDMyIEJ5dGUgQUVTDQorW0NoZWNrIDRdIFRlc3QgcHNhX2V4cG9ydF9rZXkgd2l0aCBERVMgNjQgYml0IGtleQ0KK1tDaGVjayA1XSBUZXN0IHBzYV9leHBvcnRfa2V5IHdpdGggVHJpcGxlIERFUyAyLUtleQ0KK1tDaGVjayA2XSBUZXN0IHBzYV9leHBvcnRfa2V5IHdpdGggVHJpcGxlIERFUyAzLUtleQ0KK1tDaGVjayA3XSBUZXN0IHBzYV9leHBvcnRfa2V5IHdpdGgga2V5IHBvbGljeSB2ZXJpZnkNCitbQ2hlY2sgOF0gVGVzdCBwc2FfZXhwb3J0X2tleSB3aXRoIGludmFsaWQga2V5IHNsb3QNCitbQ2hlY2sgOV0gVGVzdCBwc2FfZXhwb3J0X2tleSB3aXRoIHplcm8ga2V5IHNsb3QNCitbQ2hlY2sgMTBdIFRlc3QgcHNhX2V4cG9ydF9rZXkgd2l0aCBsZXNzIGJ1ZmZlciBzaXplDQorW0NoZWNrIDExXSBUZXN0IHBzYV9leHBvcnRfa2V5IHdpdGggZW1wdHkga2V5IHNsb3QNCitURVNUIFJFU1VMVDogUEFTU0VEDQorDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorVEVTVDogMjA0IHwgREVTQ1JJUFRJT046IFRlc3RpbmcgY3J5cHRvIGtleSBtYW5hZ2VtZW50IEFQSXMNCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQ0KK1tDaGVjayAxXSBUZXN0IHBzYV9leHBvcnRfcHVibGljX2tleSAxNiBCeXRlIEFFUw0KK1tDaGVjayAyXSBUZXN0IHBzYV9leHBvcnRfcHVibGljX2tleSAyNCBCeXRlIEFFUw0KK1tDaGVjayAzXSBUZXN0IHBzYV9leHBvcnRfcHVibGljX2tleSAzMiBCeXRlIEFFUw0KK1tDaGVjayA0XSBUZXN0IHBzYV9leHBvcnRfcHVibGljX2tleSB3aXRoIERFUyA2NCBiaXQga2V5DQorW0NoZWNrIDVdIFRlc3QgcHNhX2V4cG9ydF9wdWJsaWNfa2V5IHdpdGggVHJpcGxlIERFUyAyLUtleQ0KK1tDaGVjayA2XSBUZXN0IHBzYV9leHBvcnRfcHVibGljX2tleSB3aXRoIFRyaXBsZSBERVMgMy1LZXkNCitURVNUIFJFU1VMVDogUEFTU0VEDQorDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorVEVTVDogMjA1IHwgREVTQ1JJUFRJT046IFRlc3RpbmcgY3J5cHRvIGtleSBtYW5hZ2VtZW50IEFQSXMNCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQ0KK1tDaGVjayAxXSBUZXN0IHBzYV9kZXN0cm95X2tleSAxNiBCeXRlIEFFUw0KK1tDaGVjayAyXSBUZXN0IHBzYV9kZXN0cm95X2tleSAyNCBCeXRlIEFFUw0KK1tDaGVjayAzXSBUZXN0IHBzYV9kZXN0cm95X2tleSAzMiBCeXRlIEFFUw0KK1tDaGVjayA0XSBUZXN0IHBzYV9kZXN0cm95X2tleSB3aXRoIERFUyA2NCBiaXQga2V5DQorW0NoZWNrIDVdIFRlc3QgcHNhX2Rlc3Ryb3lfa2V5IHdpdGggVHJpcGxlIERFUyAyLUtleQ0KK1tDaGVjayA2XSBUZXN0IHBzYV9kZXN0cm95X2tleSB3aXRoIFRyaXBsZSBERVMgMy1LZXkNCitbQ2hlY2sgN10gVGVzdCBwc2FfZGVzdHJveV9rZXkgd2l0aCBpbnZhbGlkIGtleSBzbG90DQorW0NoZWNrIDhdIFRlc3QgcHNhX2Rlc3Ryb3lfa2V5IHdpdGggemVybyBrZXkgc2xvdA0KK1tDaGVjayA5XSBUZXN0IHBzYV9kZXN0cm95X2tleSB3aXRoIGVtcHR5IGtleSBzbG90DQorVEVTVCBSRVNVTFQ6IFBBU1NFRA0KKw0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KK1RFU1Q6IDIwNiB8IERFU0NSSVBUSU9OOiBUZXN0aW5nIGNyeXB0byBrZXkgbWFuYWdlbWVudCBBUElzDQorW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUNCitbQ2hlY2sgMV0gVGVzdCBwc2FfZ2V0X2tleV9pbmZvcm1hdGlvbiAxNiBCeXRlIEFFUw0KK1tDaGVjayAyXSBUZXN0IHBzYV9nZXRfa2V5X2luZm9ybWF0aW9uIDI0IEJ5dGUgQUVTDQorW0NoZWNrIDNdIFRlc3QgcHNhX2dldF9rZXlfaW5mb3JtYXRpb24gMzIgQnl0ZSBBRVMNCitbQ2hlY2sgNF0gVGVzdCBwc2FfZ2V0X2tleV9pbmZvcm1hdGlvbiB3aXQgREWmW0NoZWNrIDVdIFRlc3QgcHNhX2dldF9rZXlfaW5mb3JtYXRpb24gd2l0aCBUcmlwbGUgREVTIDItS2V5DQorW0NoZWNrIDZdIFRlc3QgcHNhX2dldF9rZXlfaW5mb3JtYXRpb24gd2l0aCBUcmlwbGUgREVTIDMtS2V5DQorW0NoZWNrIDddIFRlc3QgcHNhX2dldF9rZXlfaW5mb3JtYXRpb24gd2l0aCBpbnZhbGlkIGtleSBzbG90DQorW0NoZWNrIDhdIFRlc3QgcHNhX2dldF9rZXlfaW5mb3JtYXRpb24gd2l0aCB6ZXJvIGtleSBzbG90DQorW0NoZWNrIDldIFRlc3QgcHNhX2dldF9rZXlfaW5mb3JtYXRpb24gd2l0aCBlbXB0eSBrZXkgc2xvdA0KK1RFU1QgUkVTVUxUOiBQQVNTRUQNCisNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCitURVNUOiAyMDcgfCBERVNDUklQVElPTjogVGVzdGluZyBjcnlwdG8ga2V5IG1hbmFnZW1lbnQgQVBJcw0KK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlDQorW0NoZWNrIDFdIFRlc3QgcHNhX3NldF9rZXlfcG9saWN5IDE2IEJ5dGUgQUVTDQorW0NoZWNrIDJdIFRlc3QgcHNhX3NldF9rZXlfcG9saWN5IDI0IEJ5dGUgQUVTDQorW0NoZWNrIDNdIFRlc3QgcHNhX3NldF9rZXlfcG9saWN5IDMyIEJ5dGUgQUVTDQorW0NoZWNrIDRdIFRlc3QgcHNhX3NldF9rZXlfcG9saWN5IHdpdGggREVTIDY0IGJpdCBrZXkNCitbQ2hlY2sgNV0gVGVzdCBwc2Ffc2V0X2tleV9wb2xpY3kgd2l0aCBUcmlwbGUgREVTIDItS2V5DQorW0NoZWNrIDZdIFRlc3QgcHNhX3NldF9rZXlfcG9saWN5IHdpdGggVHJpcGxlIERFUyAzLUtleQ0KK1tDaGVjayA3XSBUZXN0IHBzYV9zZXRfa2V5X3BvbGljeSB3aXRoIGFscmVhZHkgb2NjdXBpZWQga2V5IHNsb3QNCitbQ2hlY2sgOF0gVGVzdCBwc2Ffc2V0X2tleV9wb2xpY3kgd2l0aCBpbnZhbGlkIGtleSBzbG90DQorW0NoZWNrIDldIFRlc3QgcHNhX3NldF9rZXlfcG9saWN5IHdpdGggemVybyBrZXkgc2xvdA0KK1tDaGVjayAxMF0gVGVzdCBwc2Ffc2V0X2tleV9wb2xpY3kgd2l0aCBpbnZhbGlkIHVzYWdlDQorVEVTVCBSRVNVTFQ6IFBBU1NFRA0KKw0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KK1RFU1Q6IDIwOCB8IERFU0NSSVBUSU9OOiBUZXN0aW5nIGNyeXB0byBrZXkgbWFuYWdlbWVudCBBUElzDQorW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUNCitbQ2hlY2sgMV0gVGVzdCBwc2FfZ2V0X2tleV9wb2xpY3kgMTYgQnl0ZSBBRVMNCitbQ2hlY2sgMl0gVGVzdCBwc2FfZ2V0X2tleV9wb2xpY3kgMjQgQnl0ZSBBRVMNCitbQ2hlY2sgM10gVGVzdCBwc2FfZ2V0X2tleV9wb2xpY3kgMzIgQnl0ZSBBRVMNCitbQ2hlY2sgNF0gVGVzdCBwc2FfZ2V0X2tleV9wb2xpY3kgd2l0aCBERVMgNjQgYml0IGtleQ0KK1tDaGVjayA1XSBUZXN0IHBzYV9nZXRfa2V5X3BvbGljeSB3aXRoIFRyaXBsZSBERVMgMi1LZXkNCitbQ2hlY2sgNl0gVGVzdCBwc2FfZ2V0X2tleV9wb2xpY3kgd2l0aCBUcmlwbGUgREVTIDMtS2V5DQorW0NoZWNrIDddIFRlc3QgcHNhX2dldF9rZXlfcG9saWN5IHdpdGggaW52YWxpZCBrZXkgc2xvdA0KK1tDaGVjayA4XSBUZXN0IHBzYV9nZXRfa2V5X3BvbGljeSB3aXRoIHplcm8ga2V5IHNsb3QNCitURVNUIFJFU1VMVDogUEFTU0VEDQorDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorVEVTVDogMjA5IHwgREVTQ1JJUFRJT046IFRlc3RpbmcgY3J5cHRvIGtleSBtYW5hZ2VtZW50IEFQSXMNCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQ0KK1tDaGVjayAxXSBUZXN0IHBzYV9zZXRfa2V5X2xpZmV0aW1lIDE2IEJ5dGUgQUVTDQorW0NoZWNrIDJdIFRlc3QgcHNhX3NldF9rZXlfbGlmZXRpbWUgd2l0aCBUcmlwbGUgREVTIDItS2V5DQorW0NoZWNrIDNdIFRlc3QgcHNhX3NldF9rZXlfbGlmZXRpbWUgd2l0aCBpbnZhbGlkIGtleSBzbG90DQorW0NoZWNrIDRdIFRlc3QgcHNhX3NldF9rZXlfbGlmZXRpbWUgd2l0aCB6ZXJvIGtleSBzbG90DQorW0NoZWNrIDVdIFRlc3QgcHNhX3NldF9rZXlfbGlmZXRpbWUgd2l0aCBpbnZhbGlkIGxpZmV0aW1lDQorVEVTVCBSRVNVTFQ6IFBBU1NFRA0KKw0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KK1RFU1Q6IDIxMCB8IERFU0NSSVBUSU9OOiBUZXN0aW5nIGNyeXB0byBrZXkgbWFuYWdlbWVudCBBUElzDQorW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUNCitbQ2hlY2sgMV0gVGVzdCBwc2FfZ2V0X2tleV9saWZldGltZSAxNiBCeXRlIEFFUw0KK1tDaGVjayAyXSBUZXN0IHBzYV9nZXRfa2V5X2xpZmV0aW1lIHdpdGggVHJpcGxlIERFUyAyLUtleQ0KK1tDaGVjayAzXSBUZXN0IHBzYV9nZXRfa2V5X2xpZmV0aW1lIHdpdGggaW52YWxpZCBrZXkgc2xvdA0KK1tDaGVjayA0XSBUZXN0IHBzYV9nZXRfa2V5X2xpZmV0aW1lIHdpdGggemVybyBrZXkgc2xvdA0KK1RFU1QgUkVTVUxUOiBQQVNTRUQNCisNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCitURVNUOiAyMTEgfCBERVNDUklQVElPTjogVGVzdGluZyBjcnlwdG8gaGFzaCBmdW5jdGlvbnMgQVBJcw0KK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlDQorW0NoZWNrIDFdIFRlc3QgcHNhX2hhc2hfc2V0dXAgd2l0aCBNRDIgYWxnb3JpdGhtDQorW0NoZWNrIDJdIFRlc3QgcHNhX2hhc2hfc2V0dXAgd2l0aCBNRDQgYWxnb3JpdGhtDQorW0NoZWNrIDNdIFRlc3QgcHNhX2hhc2hfc2V0dXAgd2l0aCBNRDUgYWxnb3JpdGhtDQorW0NoZWNrIDRdIFRlc3QgcHNhX2hhc2hfc2V0dXAgd2l0aCBSSVBFTUQxNjAgYWxnb3JpdGhtDQorW0NoZWNrIDVdIFRlc3QgcHNhX2hhc2hfc2V0dXAgd2l0aCBTSEExIGFsZ29yaXRobQ0KK1tDaGVjayA2XSBUZXN0IHBzYV9oYXNoX3NldHVwIHdpdGggU0hBMjI0IGFsZ29yaXRobQ0KK1tDaGVjayA3XSBUZXN0IHBzYV9oYXNoX3NldHVwIHdpdGggU0hBMjU2IGFsZ29yaXRobQ0KK1tDaGVjayA4XSBUZXN0IHBzYV9oYXNoX3NldHVwIHdpdGggU0hBMzg0IGFsZ29yaXRobQ0KK1tDaGVjayA5XSBUZXN0IHBzYV9oYXNoX3NldHVwIHdpdGggU0hBNTEyIGFsZ29yaXRobQ0KK1tDaGVjayAxMF0gVGVzdCBwc2FfaGFzaF9zZXR1cCB3aXRoIEludmFsaWQgYWxnb3JpdGhtDQorVEVTVCBSRVNVTFQ6IFBBU1NFRA0KKw0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KK1RFU1Q6IDIxMiB8IERFU0NSSVBUSU9OOiBUZXN0aW5nIGNyeXB0byBoYXNoIGZ1bmN0aW9ucyBBUElzDQorW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUNCitbQ2hlY2sgMV0gVGVzdCBwc2FfaGFzaF91cGRhdGUgd2l0aCBNRDIgYWxnb3JpdGhtDQorW0NoZWNrIDJdIFRlc3QgcHNhX2hhc2hfdXBkYXRlIHdpdGggTUQ0IGFsZ29yaXRobQ0KK1tDaGVjayAzXSBUZXN0IHBzYV9oYXNoX3VwZGF0ZSB3aXRoIE1ENSBhbGdvcml0aG0NCitbQ2hlY2sgNF0gVGVzdCBwc2FfaGFzaF91cGRhdGUgd2l0aCBSSVBFTUQxNjAgYWxnb3JpdGhtDQorW0NoZWNrIDVdIFRlc3QgcHNhX2hhc2hfdXBkYXRlIHdpdGggU0hBMSBhbGdvcml0aG0NCitbQ2hlY2sgNl0gVGVzdCBwc2FfaGFzaF91cGRhdGUgd2l0aCBTSEEyMjQgYWxnb3JpdGhtDQorW0NoZWNrIDddIFRlc3QgcHNhX2hhc2hfdXBkYXRlIHdpdGggU0hBMjU2IGFsZ29yaXRobQ0KK1tDaGVjayA4XSBUZXN0IHBzYV9oYXNoX3VwZGF0ZSB3aXRoIFNIQTM4NCBhbGdvcml0aG0NCitbQ2hlY2sgOV0gVGVzdCBwc2FfaGFzaF91cGRhdGUgd2l0aCBTSEE1MTIgYWxnb3JpdGhtDQorW0NoZWNrIDEwXSBUZXN0IHBzYV9oYXNoX3VwZGF0ZSB3aXRob3V0IGhhc2ggc2V0dXANCitbQ2hlY2sgMTFdIFRlc3QgcHNhX2hhc2hfdXBkYXRlIHdpdGggY29tcGxldGVkIG9wZXJhdGlvbiBoYW5kbGUNCitURVNUIFJFU1VMVDogUEFTU0VEDQorDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorVEVTVDogMjEzIHwgREVTQ1JJUFRJT046IFRlc3RpbmcgY3J5cHRvIGhhc2ggZnVuY3Rpb25zIEFQSXMNCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQ0KK1tDaGVjayAxXSBUZXN0IHBzYV9oYXNoX3ZlcmlmeSB3aXRoIE1EMiBhbGdvcml0aG0NCitbQ2hlY2sgMl0gVGVzdCBwc2FfaGFzaF92ZXJpZnkgd2l0aCBNRDQgYWxnb3JpdGhtDQorW0NoZWNrIDNdIFRlc3QgcHNhX2hhc2hfdmVyaWZ5IHdpdGggTUQ1IGFsZ29yaXRobQ0KK1tDaGVjayA0XSBUZXN0IHBzYV9oYXNoX3ZlcmlmeSB3aXRoIFJJUEVNRDE2MCBhbGdvcml0aG0NCitbQ2hlY2sgNV0gVGVzdCBwc2FfaGFzaF92ZXJpZnkgd2l0aCBTSEExIGFsZ29yaXRobQ0KK1tDaGVjayA2XSBUZXN0IHBzYV9oYXNoX3ZlcmlmeSB3aXRoIFNIQTIyNCBhbGdvcml0aG0NCitbQ2hlY2sgN10gVGVzdCBwc2FfaGFzaF92ZXJpZnkgd2l0aCBTSEEyNTYgYWxnb3JpdGhtDQorW0NoZWNrIDhdIFRlc3QgcHNhX2hhc2hfdmVyaWZ5IHdpdGggU0hBMzg0IGFsZ29yaXRobQ0KK1tDaGVjayA5XSBUZXN0IHBzYV9oYXNoX3ZlcmlmeSB3aXRoIFNIQTUxMiBhbGdvcml0aG0NCitbQ2hlY2sgMTBdIFRlc3QgcHNhX2hhc2hfdmVyaWZ5IHdpdGggaW5jb3JyZWN0IGV4cGVjdGVkIGhhc2gNCitbQ2hlY2sgMTFdIFRlc3QgcHNhX2hhc2hfdmVyaWZ5IHdpdGggaW5jb3JyZWN0IGhhc2ggbGVuZ3RoDQorW0NoZWNrIDEyXSB0ZXN0IHBzYV9oYXNoX3ZlcmlmeSB3aXRoIGluYWN0aXZlICYgaW52YWxpZCBvcGVyYXRpb24gaGFuZGxlDQorVEVTVCBSRVNVTFQ6IFBBU1NFRA0KKw0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KK1RFU1Q6IDIxNCB8IERFU0NSSVBUSU9OOiBUZXN0aW5nIGNyeXB0byBoYXNoIGZ1bmN0aW9ucyBBUElzDQorW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUNCitbQ2hlY2sgMV0gVGVzdCBwc2FfaGFzaF9maW5pc2ggd2l0aCBNRDIgYWxnb3JpdGhtDQorW0NoZWNrIDJdIFRlc3QgcHNhX2hhc2hfZmluaXNoIHdpdGggTUQ0IGFsZ29yaXRobQ0KK1tDaGVjayAzXSBUZXN0IHBzYV9oYXNoX2ZpbmlzaCB3aXRoIE1ENSBhbGdvcml0aG0NCitbQ2hlY2sgNF0gVGVzdCBwc2FfaGFzaF9maW5pc2ggd2l0aCBSSVBFTUQxNjAgYWxnb3JpdGhtDQorW0NoZWNrIDVdIFRlc3QgcHNhX2hhc2hfZmluaXNoIHdpdGggU0hBMSBhbGdvcml0aG0NCitbQ2hlY2sgNl0gVGVzdCBwc2FfaGFzaF9maW5pc2ggd2l0aCBTSEEyMjQgYWxnb3JpdGhtDQorW0NoZWNrIDddIFRlc3QgcHNhX2hhc2hfZmluaXNoIHdpdGggU0hBMjU2IGFsZ29yaXRobQ0KK1tDaGVjayA4XSBUZXN0IHBzYV9oYXNoX2ZpbmlzaCB3aXRoIFNIQTM4NCBhbGdvcml0aG0NCitbQ2hlY2sgOV0gVGVzdCBwc2FfaGFzaF9maW5pc2ggd2l0aCBTSEE1MTIgYWxnb3JpdGhtDQorW0NoZWNrIDEwXSB0ZXN0IHBzYV9oYXNoX2ZpbmlzaCB3aXRoIGluYWN0aXZlIG9wZXJhdGlvbiBoYW5kbGUNCitbQ2hlY2sgMTFdIHRlc3QgcHNhX2hhc2hfZmluaXNoIHdpdGggaW52YWxpZCBoYXNoIGJ1ZmZlciBzaXplDQorVEVTVCBSRVNVTFQ6IFBBU1NFRA0KKw0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KK1RFU1Q6IDIxNSB8IERFU0NSSVBUSU9OOiBUZXN0aW5nIGNyeXB0byBoYXNoIGZ1bmN0aW9ucyBBUElzDQorW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUNCitbQ2hlY2sgMV0gVGVzdCBwc2FfaGFzaF9hYm9ydCB3aXRoIE1EMiBhbGdvcml0aG0NCitbQ2hlY2sgMl0gVGVzdCBwc2FfaGFzaF9hYm9ydCB3aXRoIE1ENCBhbGdvcml0aG0NCitbQ2hlY2sgM10gVGVzdCBwc2FfaGFzaF9hYm9ydCB3aXRoIE1ENSBhbGdvcml0aG0NCitbQ2hlY2sgNF0gVGVzdCBwc2FfaGFzaF9hYm9ydCB3aXRoIFJJUEVNRDE2MCBhbGdvcml0aG0NCitbQ2hlY2sgNV0gVGVzdCBwc2FfaGFzaF9hYm9ydCB3aXRoIFNIQTEgYWxnb3JpdGhtDQorW0NoZWNrIDZdIFRlc3QgcHNhX2hhc2hfYWJvcnQgd2l0aCBTSEEyMjQgYWxnb3JpdGhtDQorW0NoZWNrIDddIFRlc3QgcHNhX2hhc2hfYWJvcnQgd2l0aCBTSEEyNTYgYWxnb3JpdGhtDQorW0NoZWNrIDhdIFRlc3QgcHNhX2hhc2hfYWJvcnQgd2l0aCBTSEEzODQgYWxnb3JpdGhtDQorW0NoZWNrIDldIFRlc3QgcHNhX2hhc2hfYWJvcnQgd2l0aCBTSEE1MTIgYWxnb3JpdGhtDQorW0NoZWNrIDEwXSBUZXN0IHBzYV9oYXNoX2ZpbmlzaCBhZnRlciBjYWxsaW5nIHBzYV9oYXNoX2Fib3J0DQorVEVTVCBSRVNVTFQ6IFBBU1NFRA0KKw0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KK1RFU1Q6IDIyMyB8IERFU0NSSVBUSU9OOiBUZXN0aW5nIGNyeXB0byBrZXkgbWFuYWdlbWVudCBBUElzDQorW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUNCitbQ2hlY2sgMV0gVGVzdCBwc2Ffa2V5X3BvbGljeV9nZXRfdXNhZ2Ugd2l0aCB1c2FnZSBhcyBlbmNyeXB0DQorW0NoZWNrIDJdIFRlc3QgcHNhX2tleV9wb2xpY3lfZ2V0X3VzYWdlIHdpdGggdXNhZ2UgYXMgZGVjcnlwdA0KK1tDaGVjayAzXSBUZXN0IHBzYV9rZXlfcG9saWN5X2dldF91c2FnZSB3aXRoIHVzYWdlIGFzIGRlcml2ZQ0KK1tDaGVjayA0XSBUZXN0IHBzYV9rZXlfcG9saWN5X2dldF91c2FnZSB3aXRoIHVzYWdlIGFzIGV4cG9ydA0KK1tDaGVjayA1XSBUZXN0IHBzYV9rZXlfcG9saWN5X2dldF91c2FnZSB3aXRoIHVzYWdlIGFzIHNpZ24NCitbQ2hlY2sgNl0gVGVzdCBwc2Ffa2V5X3BvbGljeV9nZXRfdXNhZ2Ugd2l0aCB1c2FnZSBhcyB2ZXJpZnkNCitURVNUIFJFU1VMVDogUEFTU0VEDQorDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorVEVTVDogMjI0IHwgREVTQ1JJUFRJT046IFRlc3RpbmcgY3J5cHRvIEFFQUQgQVBJcw0KK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlDQorW0NoZWNrIDFdIFRlc3QgcHNhX2FlYWRfZW5jcnlwdCAtIENDTSAtIDE2QiBBRVMgLSAxM0Igbm91bmNlICYgOEIgYWRkaSBkYXRhDQorW0NoZWNrIDJdIFRlc3QgcHNhX2FlYWRfZW5jcnlwdCAtIEFFUy1DQ00NCitbQ2hlY2sgM10gVGVzdCBwc2FfYWVhZF9lbmNyeXB0IC0gR0NNIC0gMTZCIEFFUyAtIDEyQiBOb3VuY2UgJiAxMkIgYWRkaSBkYXRhDQorW0NoZWNrIDRdIFRlc3QgcHNhX2FlYWRfZW5jcnlwdCAtIERFUyBLZXkNCitbQ2hlY2sgNV0gVGVzdCBwc2FfYWVhZF9lbmNyeXB0IC0gRW1wdHkga2V5IHNsb3QNCitbQ2hlY2sgNl0gVGVzdCBwc2FfYWVhZF9lbmNyeXB0IC0gWmVybyBrZXkgc2xvdA0KK1tDaGVjayA3XSBUZXN0IHBzYV9hZWFkX2VuY3J5cHQgLSBJbnZhbGlkIGtleSBzbG90DQorW0NoZWNrIDhdIFRlc3QgcHNhX2FlYWRfZW5jcnlwdCAtIFVuc3VwcG9ydGVkIEFsZ29yaXRobQ0KK1tDaGVjayA5XSBUZXN0IHBzYV9hZWFkX2VuY3J5cHQgLSBJbnZhbGlkIGtleSB1c2FnZQ0KK1tDaGVjayAxMF0gVGVzdCBwc2FfYWVhZF9lbmNyeXB0IC0gU21hbGwgb3V0cHV0IGJ1ZmZlciBzaXplDQorVEVTVCBSRVNVTFQ6IFBBU1NFRA0KKw0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KK1RFU1Q6IDIyNSB8IERFU0NSSVBUSU9OOiBUZXN0aW5nIGNyeXB0byBBRUFEIEFQSXMNCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQ0KK1tDaGVjayAxXSBUZXN0IHBzYV9hZWFkX2RlY3J5cHQgLSBDQ00gLSAxNkIgQUVTIC0gMTNCIG5vdW5jZSAmIDhCIGFkZGkgZGF0YQ0KK1tDaGVjayAyXSBUZXN0IHBzYV9hZWFkX2RlY3J5cHQgLSBBRVMtQ0NNDQorW0NoZWNrIDNdIFRlc3QgcHNhX2FlYWRfZGVjcnlwdCAtIEdDTSAtIDE2QiBBRVMgLSAxMkIgTm91bmNlICYgMTJCIGFkZGkgZGF0YQ0KK1tDaGVjayA0XSBUZXN0IHBzYV9hZWFkX2RlY3J5cHQgLSBERVMgS2V5DQorW0NoZWNrIDVdIFRlc3QgcHNhX2FlYWRfZGVjcnlwdCAtIEVtcHR5IGtleSBzbG90DQorW0NoZWNrIDZdIFRlc3QgcHNhX2FlYWRfZGVjcnlwdCAtIFplcm8ga2V5IHNsb3QNCitbQ2hlY2sgN10gVGVzdCBwc2FfYWVhZF9kZWNyeXB0IC0gSW52YWxpZCBrZXkgc2xvdA0KK1tDaGVjayA4XSBUZXN0IHBzYV9hZWFkX2RlY3J5cHQgLSBVbnN1cHBvcnRlZCBBbGdvcml0aG0NCitbQ2hlY2sgOV0gVGVzdCBwc2FfYWVhZF9kZWNyeXB0IC0gSW52YWxpZCBrZXkgdXNhZ2UNCitbQ2hlY2sgMTBdIFRlc3QgcHNhX2FlYWRfZGVjcnlwdCAtIFNtYWxsIG91dHB1dCBidWZmZXIgc2l6ZQ0KK1tDaGVjayAxMV0gVGVzdCBwc2FfYWVhZF9kZWNyeXB0IC0gSW52YWxpZCBjaXBoZXIgdGV4dA0KK1tDaGVjayAxMl0gVGVzdCBwc2FfYWVhZF9kZWNyeXB0IC0gSW52YWxpZCBjaXBoZXIgdGV4dCBzaXplDQorVEVTVCBSRVNVTFQ6IFBBU1NFRA0KKw0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KK1RFU1Q6IDIzMiB8IERFU0NSSVBUSU9OOiBUZXN0aW5nIGNyeXB0byBzeW1tZXRyaWMgY2lwaGVyIEFQSXMNCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQ0KK1tDaGVjayAxXSBUZXN0IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCAxNiBCeXRlIEFFUw0KK1tDaGVjayAyXSBUZXN0IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCAyNCBCeXRlIEFFUw0KK1tDaGVjayAzXSBUZXN0IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCAzMiBCeXRlIEFFUw0KK1tDaGVjayA0XSBUZXN0IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCBERVMgNjQgYml0IGtleQ0KK1tDaGVjayA1XSBUZXN0IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCBUcmlwbGUgREVTIDItS2V5DQorW0NoZWNrIDZdIFRlc3QgcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwIFRyaXBsZSBERVMgMy1LZXkNCitbQ2hlY2sgN10gVGVzdCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAgMTYgQnl0ZSByYXcgZGF0YQ0KK1tDaGVjayA4XSBUZXN0IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCAtIG5vdCBhIGNpcGhlciBhbGdvcml0aG0NCitbQ2hlY2sgOV0gVGVzdCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAgLSB1bmtub3duIGNpcGhlciBhbGdvcml0aG0NCitbQ2hlY2sgMTBdIFRlc3QgcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwIC0gaW5jb21wYXRpYmxlIGtleSBBUkM0DQorW0NoZWNrIDExXSBUZXN0IHBzYV9jaXBoZXJfZW5jcnlwdF9zZXR1cCAtIGludmFsaWQga2V5IHNsb3QNCitbQ2hlY2sgMTJdIFRlc3QgcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwIC0gZW1wdHkga2V5IHNsb3QNCitbQ2hlY2sgMTNdIFRlc3QgcHNhX2NpcGhlcl9lbmNyeXB0X3NldHVwIC0gemVybyBhcyBrZXkgc2xvdA0KK1tDaGVjayAxNF0gVGVzdCBwc2FfY2lwaGVyX2VuY3J5cHRfc2V0dXAgLSBpbmNvcnJlY3QgdXNhZ2UNCitURVNUIFJFU1VMVDogUEFTU0VEDQorDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorVEVTVDogMjMzIHwgREVTQ1JJUFRJT046IFRlc3RpbmcgY3J5cHRvIHN5bW1ldHJpYyBjaXBoZXIgQVBJcw0KK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlDQorW0NoZWNrIDFdIFRlc3QgcHNhX2NpcGhlcl9kZWNyeXB0X3NldHVwIDE2IEJ5dGUgQUVTDQorW0NoZWNrIDJdIFRlc3QgcHNhX2NpcGhlcl9kZWNyeXB0X3NldHVwIDI0IEJ5dGUgQUVTDQorW0NoZWNrIDNdIFRlc3QgcHNhX2NpcGhlcl9kZWNyeXB0X3NldHVwIDMyIEJ5dGUgQUVTDQorW0NoZWNrIDRdIFRlc3QgcHNhX2NpcGhlcl9kZWNyeXB0X3NldHVwIERFUyA2NCBiaXQga2V5DQorW0NoZWNrIDVdIFRlc3QgcHNhX2NpcGhlcl9kZWNyeXB0X3NldHVwIFRyaXBsZSBERVMgMi1LZXkNCitbQ2hlY2sgNl0gVGVzdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAgVHJpcGxlIERFUyAzLUtleQ0KK1tDaGVjayA3XSBUZXN0IHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCAxNiBCeXRlIHJhdyBkYXRhDQorW0NoZWNrIDhdIFRlc3QgcHNhX2NpcGhlcl9kZWNyeXB0X3NldHVwIC0gbm90IGEgY2lwaGVyIGFsZ29yaXRobQ0KK1tDaGVjayA5XSBUZXN0IHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCAtIHVua25vd24gY2lwaGVyIGFsZ29yaXRobQ0KK1tDaGVjayAxMF0gVGVzdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAgLSBpbmNvbXBhdGlibGUga2V5IEFSQzQNCitbQ2hlY2sgMTFdIFRlc3QgcHNhX2NpcGhlcl9kZWNyeXB0X3NldHVwIC0gaW52YWxpZCBrZXkgc2xvdA0KK1tDaGVjayAxMl0gVGVzdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAgLSBlbXB0eSBrZXkgc2xvdA0KK1tDaGVjayAxM10gVGVzdCBwc2FfY2lwaGVyX2RlY3J5cHRfc2V0dXAgLSB6ZXJvIGFzIGtleSBzbG90DQorW0NoZWNrIDE0XSBUZXN0IHBzYV9jaXBoZXJfZGVjcnlwdF9zZXR1cCAtIGluY29ycmVjdCB1c2FnZQ0KK1RFU1QgUkVTVUxUOiBQQVNTRUQNCisNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCitURVNUOiAyMzUgfCBERVNDUklQVElPTjogVGVzdGluZyBjcnlwdG8gc3ltbWV0cmljIGNpcGhlciBBUElzDQorW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUNCitbQ2hlY2sgMV0gVGVzdCBwc2FfY2lwaGVyX3NldF9pdiAxNiBCeXRlIEFFUw0KK1tDaGVjayAyXSBUZXN0IHBzYV9jaXBoZXJfc2V0X2l2IDI0IEJ5dGUgQUVTDQorW0NoZWNrIDNdIFRlc3QgcHNhX2NpcGhlcl9zZXRfaXYgMzIgQnl0ZSBBRVMNCitbQ2hlY2sgNF0gVGVzdCBwc2FfY2lwaGVyX3NldF9pdiBERVMgNjQgYml0IGtleQ0KK1tDaGVjayA1XSBUZXN0IHBzYV9jaXBoZXJfc2V0X2l2IFRyaXBsZSBERVMgMi1LZXkNCitbQ2hlY2sgNl0gVGVzdCBwc2FfY2lwaGVyX3NldF9pdiBUcmlwbGUgREVTIDMtS2V5DQorW0NoZWNrIDddIFRlc3QgcHNhX2NpcGhlcl9zZXRfaXYgQUVTIC0gc21hbGwgaXYgYnVmZmVyDQorW0NoZWNrIDhdIFRlc3QgcHNhX2NpcGhlcl9zZXRfaXYgREVTIC0gc21hbGwgaXYgYnVmZmVyDQorW0NoZWNrIDldIFRlc3QgcHNhX2NpcGhlcl9zZXRfaXYgQUVTIC0gbGFyZ2UgaXYgYnVmZmVyDQorW0NoZWNrIDEwXSBUZXN0IHBzYV9jaXBoZXJfc2V0X2l2IERFUyAtIGxhcmdlIGl2IGJ1ZmZlcg0KK1RFU1QgUkVTVUxUOiBQQVNTRUQNCisNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCitURVNUOiAyMzYgfCBERVNDUklQVElPTjogVGVzdGluZyBjcnlwdG8gc3ltbWV0cmljIGNpcGhlciBBUElzDQorW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUNCitbQ2hlY2sgMV0gVGVzdCBwc2FfY2lwaGVyX3VwZGF0ZSAtIEVuY3J5cHQgLSBBRVMgQ0JDX05PX1BBRERJTkcNCitbQ2hlY2sgMl0gVGVzdCBwc2FfY2lwaGVyX3VwZGF0ZSAtIEVuY3J5cHQgLSBBRVMgQ0JDX05PX1BBRERJTkcgKFNob3J0IGlucHV0KQ0KK1tDaGVjayAzXSBUZXN0IHBzYV9jaXBoZXJfdXBkYXRlIC0gRW5jcnlwdCAtIEFFUyBDQkNfUEtDUzcNCitbQ2hlY2sgNF0gVGVzdCBwc2FfY2lwaGVyX3VwZGF0ZSAtIEVuY3J5cHQgLSBBRVMgQ0JDX1BLQ1M3IChTaG9ydCBpbnB1dCkNCitbQ2hlY2sgNV0gVGVzdCBwc2FfY2lwaGVyX3VwZGF0ZSAtIEVuY3J5cHQgLSBBRVMgQ1RSDQorW0NoZWNrIDZdIFRlc3QgcHNhX2NpcGhlcl91cGRhdGUgLSBFbmNyeXB0IC0gREVTIENCQyAobm9wYWQpDQorW0NoZWNrIDddIFRlc3QgcHNhX2NpcGhlcl91cGRhdGUgLSBFbmNyeXB0IC0gMi1rZXkgM0RFIC1DQkMgKG5vcGFkKQ0KK1tDaGVjayA4XSBUZXN0IHBzYV9jaXBoZXJfdXBkYXRlIC0gRW5jcnlwdCAtIDMta2V5IDNERSAtQ0JDIChub3BhZCkNCitbQ2hlY2sgOV0gVGVzdCBwc2FfY2lwaGVyX3VwZGF0ZSAtIHNtYWxsIG91dHB1dCBidWZmZXIgc2l6ZQ0KK1tDaGVjayAxMF0gVGVzdCBwc2FfY2lwaGVyX3VwZGF0ZSAtIERlY3J5cHQgLSBBRVMgQ0JDX05PX1BBRERJTkcNCitbQ2hlY2sgMTFdIFRlc3QgcHNhX2NpcGhlcl91cGRhdGUgLSBEZWNyeXB0IC0gQUVTIENCQ19OT19QQURESU5HIChTaG9ydCBpbnB1dCkNCitbQ2hlY2sgMTJdIFRlc3QgcHNhX2NpcGhlcl91cGRhdGUgLSBEZWNyeXB0IC0gQUVTIENCQ19QS0NTNw0KK1tDaGVjayAxM10gVGVzdCBwc2FfY2lwaGVyX3VwZGF0ZSAtIERlY3J5cHQgLSBBRVMgQ0JDX1BLQ1M3IChTaG9ydCBpbnB1dCkNCitbQ2hlY2sgMTRdIFRlc3QgcHNhX2NpcGhlcl91cGRhdGUgLSBEZWNyeXB0IC0gQUVTIENUUg0KK1tDaGVjayAxNV0gVGVzdCBwc2FfY2lwaGVyX3VwZGF0ZSAtIERlY3J5cHQgLSBERVMgQ0JDIChub3BhZCkNCitbQ2hlY2sgMTZdIFRlc3QgcHNhX2NpcGhlcl91cGRhdGUgLSBEZWNyeXB0IC0gMi1rZXkgM0RFIC1DQkMgKG5vcGFkKQ0KK1tDaGVjayAxN10gVGVzdCBwc2FfY2lwaGVyX3VwZGF0ZSAtIERlY3J5cHQgLSAzLWtleSAzREUgLUNCQyAobm9wYWQpDQorVEVTVCBSRVNVTFQ6IFBBU1NFRA0KKw0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KK1RFU1Q6IDIzNyB8IERFU0NSSVBUSU9OOiBUZXN0aW5nIGNyeXB0byBzeW1tZXRyaWMgY2lwaGVyIEFQSXMNCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQ0KK1tDaGVjayAxXSBUZXN0IHBzYV9jaXBoZXJfZmluaXNoIC0gRW5jcnlwdCAtIEFFUyBDQkNfTk9fUEFERElORw0KK1tDaGVjayAyXSBUZXN0IHBzYV9jaXBoZXJfZmluaXNoIC0gRW5jcnlwdCAtIEFFUyBDQkNfTk9fUEFERElORyAoU2hvcnQgaW5wdXQpDQorW0NoZWNrIDNdIFRlc3QgcHNhX2NpcGhlcl9maW5pc2ggLSBFbmNyeXB0IC0gQUVTIENCQ19QS0NTNw0KK1tDaGVjayA0XSBUZXN0IHBzYV9jaXBoZXJfZmluaXNoIC0gRW5jcnlwdCAtIEFFUyBDQkNfUEtDUzcgKFNob3J0IGlucHV0KQ0KK1tDaGVjayA1XSBUZXN0IHBzYV9jaXBoZXJfZmluaXNoIC0gRW5jcnlwdCAtIEFFUyBDVFINCitbQ2hlY2sgNl0gVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIEVuY3J5cHQgLSBBRVMgQ1RSIChzaG9ydCBpbnB1dCkNCitbQ2hlY2sgN10gVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIEVuY3J5cHQgLSBERVMgQ0JDIChub3BhZCkNCitbQ2hlY2sgOF0gVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIEVuY3J5cHQgLSAyLWtleSAzREUgLUNCQyAobm9wYWQpDQorW0NoZWNrIDldIFRlc3QgcHNhX2NpcGhlcl9maW5pc2ggLSBFbmNyeXB0IC0gMy1rZXkgM0RFIC1DQkMgKG5vcGFkKQ0KK1tDaGVjayAxMF0gVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIHNtYWxsIG91dHB1dCBidWZmZXIgc2l6ZQ0KK1tDaGVjayAxMV0gVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIERlY3J5cHQgLSBBRVMgQ0JDX05PX1BBRERJTkcNCitbQ2hlY2sgMTJdIFRlc3QgcHNhX2NpcGhlcl9maW5pc2ggLSBEZWNyeXB0IC0gQUVTIENCQ19OT19QQURESU5HIChTaG9ydCBpbnB1dCkNCitbQ2hlY2sgMTNdIFRlc3QgcHNhX2NpcGhlcl9maW5pc2ggLSBEZWNyeXB0IC0gQUVTIENCQ19QS0NTNw0KK1tDaGVjayAxNF0gVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIERlY3J5cHQgLSBBRVMgQ0JDX1BLQ1M3IChTaG9ydCBpbnB1dCkNCitbQ2hlY2sgMTVdIFRlc3QgcHNhX2NpcGhlcl9maW5pc2ggLSBEZWNyeXB0IC0gQUVTIENUUg0KK1tDaGVjayAxNl0gVGVzdCBwc2FfY2lwaGVyX2ZpbmlzaCAtIERlY3J5cHQgLSBBRVMgQ1RSIChzaG9ydCBpbnB1dCkNCitbQ2hlY2sgMTddIFRlc3QgcHNhX2NpcGhlcl9maW5pc2ggLSBEZWNyeXB0IC0gREVTIENCQyAobm9wYWQpDQorW0NoZWNrIDE4XSBUZXN0IHBzYV9jaXBoZXJfZmluaXNoIC0gRGVjcnlwdCAtIDIta2V5IDNERSAtQ0JDIChub3BhZCkNCitbQ2hlY2sgMTldIFRlc3QgcHNhX2NpcGhlcl9maW5pc2ggLSAzLWtleSAzREUgLUNCQyAobm9wYWQpDQorVEVTVCBSRVNVTFQ6IFBBU1NFRA0KKw0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KK1RFU1Q6IDIzOCB8IERFU0NSSVBUSU9OOiBUZXN0aW5nIGNyeXB0byBzeW1tZXRyaWMgY2lwaGVyIEFQSXMNCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQ0KK1tDaGVjayAxXSBUZXN0IHBzYV9jaXBoZXJfYWJvcnQgLSBFbmNyeXB0IC0gQUVTIENCQ19OT19QQURESU5HDQorW0NoZWNrIDJdIFRlc3QgcHNhX2NpcGhlcl9hYm9ydCAtIEVuY3J5cHQgLSBBRVMgQ0JDX1BLQ1M3DQorW0NoZWNrIDNdIFRlc3QgcHNhX2NpcGhlcl9hYm9ydCAtIEVuY3J5cHQgLSBBRVMgQ1RSDQorW0NoZWNrIDRdIFRlc3QgcHNhX2NpcGhlcl9hYm9ydCAtIEVuY3J5cHQgLSBERVMgQ0JDIChub3BhZCkNCitbQ2hlY2sgNV0gVGVzdCBwc2FfY2lwaGVyX2Fib3J0IC0gRW5jcnlwdCAtIDIta2V5IDNERSAtQ0JDIChub3BhZCkNCitbQ2hlY2sgNl0gVGVzdCBwc2FfY2lwaGVyX2Fib3J0IC0gRW5jcnlwdCAtIDMta2V5IDNERSAtQ0JDIChub3BhZCkNCitbQ2hlY2sgN10gVGVzdCBwc2FfY2lwaGVyX2Fib3J0IC0gRGVjcnlwdCAtIEFFUyBDQkNfTk9fUEFERElORw0KK1tDaGVjayA4XSBUZXN0IHBzYV9jaXBoZXJfYWJvcnQgLSBEZWNyeXB0IC0gQUVTIENCQ19QS0NTNw0KK1tDaGVjayA5XSBUZXN0IHBzYV9jaXBoZXJfYWJvcnQgLSBEZWNyeXB0IC0gQUVTIENUUg0KK1tDaGVjayAxMF0gVGVzdCBwc2FfY2lwaGVyX2Fib3J0IC0gRGVjcnlwdCAtIERFUyBDQkMgKG5vcGFkKQ0KK1tDaGVjayAxMV0gVGVzdCBwc2FfY2lwaGVyX2Fib3J0IC0gRGVjcnlwdCAtIDIta2V5IDNERSAtQ0JDIChub3BhZCkNCitbQ2hlY2sgMTJdIFRlc3QgcHNhX2NpcGhlcl9hYm9ydCAtIERlY3J5cHQgLSAzLWtleSAzREUgLUNCQyAobm9wYWQpDQorW0NoZWNrIDFdIFRlc3QgcHNhX2NpcGhlcl91cGRhdGUgYWZ0ZXIgcHNhX2NpcGhlcl9hYm9ydCBzaG91bGQgZmFpbA0KK1RFU1QgUkVTVUxUOiBQQVNTRUQNCisNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCisqKioqKioqKioqKiogQ3J5cHRvIFN1aXRlIFJlcG9ydCAqKioqKioqKioqDQorVE9UQUwgVEVTVFMgICAgIDogMjQNCitUT1RBTCBQQVNTRUQgICAgOiAyNA0KK1RPVEFMIFNJTSBFUlJPUiA6IDANCitUT1RBTCBGQUlMRUQgICAgOiAwDQorVE9UQUwgU0tJUFBFRCAgIDogMA0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KK0VudGVyaW5nIHN0YW5kYnkuLg0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvcmVmZXJlbmNlX2xvZ3MvcHJvdGVjdGVkX3N0b3JhZ2UudHh0IGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9yZWZlcmVuY2VfbG9ncy9wcm90ZWN0ZWRfc3RvcmFnZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjdmMTJkNQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvcmVmZXJlbmNlX2xvZ3MvcHJvdGVjdGVkX3N0b3JhZ2UudHh0CkBAIC0wLDAgKzEsMTU0IEBACisqKioqKiBQU0EgQXJjaGl0ZWN0dXJlIFRlc3QgU3VpdGUgLSBWZXJzaW9uIDAuOCAqKioqKg0KKw0KK1J1bm5pbmcuLiBQcm90ZWN0ZWQgU3RvcmFnZSBTdWl0ZQ0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KK1RFU1Q6IDQwMSB8IERFU0NSSVBUSU9OOiBVSUQgbm90IGZvdW5kIGNoZWNrDQorW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUNCitbQ2hlY2sgMV0gQ2FsbCBnZXQgQVBJIGZvciBVSUQgNiB3aGljaCBpcyBub3Qgc2V0DQorW0NoZWNrIDJdIENhbGwgZ2V0X2luZm8gQVBJIGZvciBVSUQgNiB3aGljaCBpcyBub3Qgc2V0DQorW0NoZWNrIDNdIENhbGwgcmVtb3ZlIEFQSSBmb3IgVUlEIDYgd2hpY2ggaXMgbm90IHNldA0KK1tDaGVjayA0XSBDYWxsIGdldCBBUEkgZm9yIFVJRCA2IHdoaWNoIGlzIHJlbW92ZWQNCitbQ2hlY2sgNV0gQ2FsbCBnZXRfaW5mbyBBUEkgZm9yIFVJRCA2IHdoaWNoIGlzIHJlbW92ZWQNCitbQ2hlY2sgNl0gQ2FsbCByZW1vdmUgQVBJIGZvciBVSUQgNiB3aGljaCBpcyByZW1vdmVkDQorU2V0IHN0b3JhZ2UgZm9yIFVJRCA2DQorW0NoZWNrIDddIENhbGwgZ2V0IEFQSSBmb3IgZGlmZmVyZW50IFVJRCA2DQorW0NoZWNrIDhdIENhbGwgZ2V0X2luZm8gQVBJIGZvciBkaWZmZXJlbnQgVUlEIDYNCitbQ2hlY2sgOV0gQ2FsbCByZW1vdmUgQVBJIGZvciBkaWZmZXJlbnQgVUlEIDYNCitURVNUIFJFU1VMVDogUEFTU0VEDQorDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorVEVTVDogNDAyIHwgREVTQ1JJUFRJT046IFdyaXRlIG9uY2UgZXJyb3IgY2hlY2sNCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQ0KK1tDaGVjayAxXSBVcGRhdGUgdGhlIGZsYWcgb2YgVUlEIDEgd2l0aCBXUklURV9PTkNFIGZsYWcNCitbQ2hlY2sgMl0gVHJ5IHRvIHJlbW92ZSB0aGUgVUlEIDEgaGF2aW5nIFdSSVRFX09OQ0UgZmxhZw0KK1tDaGVjayAzXSBDcmVhdGUgYSBuZXcgVUlEIDIgd2l0aCBXUklURV9PTkNFIGZsYWcNCitbQ2hlY2sgNF0gVHJ5IHRvIHJlbW92ZSB0aGUgVUlEIDIgaGF2aW5nIFdSSVRFX09OQ0UgZmxhZw0KK1tDaGVjayA1XSBUcnkgdG8gY2hhbmdlIHRoZSBsZW5ndGggb2Ygd3JpdGVfb25jZSBVSUQgMg0KK1tDaGVjayA2XSBDaGVjayBVSUQgcmVtb3ZhbCBzdGlsbCBmYWlscw0KK1tDaGVjayA3XSBUcnkgdG8gY2hhbmdlIHRoZSBXUklURV9PTkNFIGZsYWcgdG8gTm9uZSBmb3IgVUlEIDINCitbQ2hlY2sgOF0gQ2hlY2sgVUlEIHJlbW92YWwgc3RpbGwgZmFpbHMNCitURVNUIFJFU1VMVDogUEFTU0VEDQorDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorVEVTVDogNDAzIHwgREVTQ1JJUFRJT046IEluc3VmZmljaWVudCBzcGFjZSBjaGVjaw0KK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlDQorW0NoZWNrIDFdIE92ZXJsb2FkIHN0b3JhZ2Ugc3BhY2UNCitSZW1vdmUgYWxsIHJlZ2lzdGVyZWQgVUlEcw0KK1tDaGVjayAyXSBPdmVybG9hZCBzdG9yYWdlIGFnYWluIHRvIHZlcmlmeSBhbGwgcHJldmlvdXMgVUlEIHJlbW92ZWQNCitSZW1vdmUgYWxsIHJlZ2lzdGVyZWQgVUlEcw0KK1RFU1QgUkVTVUxUOiBQQVNTRUQNCisNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCitURVNUOiA0MDQgfCBERVNDUklQVElPTjogRGF0YSBDb25zaXN0ZW5jeSBjaGVjaw0KK1tJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlDQorW0NoZWNrIDFdIENhbGwgZ2V0IEFQSSB3aXRoIGluY29ycmVjdCBsZW5ndGgNCitbQ2hlY2sgMl0gT2xkIGJ1ZmZlciBpbnZhbGlkIGFmdGVyIGxlbmd0aCBjaGFuZ2UNCitURVNUIFJFU1VMVDogUEFTU0VEDQorDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorVEVTVDogNDA1IHwgREVTQ1JJUFRJT046IFN1Y2Nlc3Mgc2NlbmFyaW9zIGNoZWNrDQorW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUNCitbQ2hlY2sgMV0gU2V0IFVJRCB3aXRoIGRhdGEgbGVuZ3RoIHplcm8gYW5kIGNhbGwgc3RvcmFnZSBBUElzDQorW0NoZWNrIDJdIFJlc2V0dGluZyB0aGUgbGVuZ3RoIGNoZWNrDQorVEVTVCBSRVNVTFQ6IFBBU1NFRA0KKw0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KK1RFU1Q6IDQwNiB8IERFU0NSSVBUSU9OOiBGbGFncyBub3Qgc3VwcG9ydGVkIGNoZWNrDQorW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUNCitbQ2hlY2sgMV0gQ2FsbCBzZXQgQVBJIHdpdGggdmFsaWQgZmxhZyB2YWx1ZXMNCitURVNUIFJFU1VMVDogUEFTU0VEDQorDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorVEVTVDogNDA3IHwgREVTQ1JJUFRJT046IEluY29ycmVjdCBTaXplIGNoZWNrDQorW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUNCitDcmVhdGUgYSB2YWxpZCBTdG9yYWdlDQorSW5jcmVhc2UgdGhlIGxlbmd0aCBvZiBzdG9yYWdlDQorW0NoZWNrIDFdIENhbGwgZ2V0IEFQSSB3aXRoIG9sZCBsZW5ndGgNCitEZWNyZWFzZSB0aGUgbGVuZ3RoIG9mIHN0b3JhZ2UNCitbQ2hlY2sgMl0gQ2FsbCBnZXQgQVBJIHdpdGggb2xkIGxlbmd0aA0KK1tDaGVjayAzXSBDYWxsIGdldCBBUEkgd2l0aCB2YWxpZCBsZW5ndGgNCitURVNUIFJFU1VMVDogUEFTU0VEDQorDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorVEVTVDogNDA4IHwgREVTQ1JJUFRJT046IEludmFsaWQgb2Zmc2V0IGNoZWNrDQorW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUNCitbQ2hlY2sgMV0gVHJ5IHRvIGFjY2VzcyBkYXRhIHdpdGggdmFyeWluZyB2YWxpZCBvZmZzZXQNCitbQ2hlY2sgMl0gVHJ5IHRvIGFjY2VzcyBkYXRhIHdpdGggdmFyeWluZyBpbnZhbGlkIG9mZnNldA0KK1RFU1QgUkVTVUxUOiBQQVNTRUQNCisNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCitURVNUOiA0MDkgfCBERVNDUklQVElPTjogSW52YWxpZCBBcmd1bWVudHMgY2hlY2sNCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQ0KK1tDaGVjayAxXSBDYWxsIHNldCBBUEkgd2l0aCBOVUxMIHBvaW50ZXIgYW5kIGRhdGEgbGVuZ3RoIDANCitbQ2hlY2sgMl0gQ3JlYXRlIFVJRCB3aXRoIHplcm8gZGF0YSBsZW5ndGgNCitbQ2hlY2sgM10gVHJ5IHRvIHNldCBOVUxMIGJ1ZmZlciBmb3IgZXhpc3RpbmcgVUlEDQorW0NoZWNrIDRdIENhbGwgZ2V0IEFQSSB3aXRoIE5VTEwgcmVhZCBidWZmZXIgYW5kIGRhdGEgbGVuZ3RoIDANCitbQ2hlY2sgNV0gSW5jcmVhc2UgdGhlIGxlbmd0aA0KK1RFU1QgUkVTVUxUOiBQQVNTRUQNCisNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCitURVNUOiA0MTAgfCBERVNDUklQVElPTjogVUlEIHZhbHVlIHplcm8gY2hlY2sNCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQ0KK1tDaGVjayAxXSBDcmVhdGluZyBzdG9yYWdlIHdpdGggVUlEIDAgc2hvdWxkIGZhaWwNCitURVNUIFJFU1VMVDogUEFTU0VEDQorDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorVEVTVDogNDExIHwgREVTQ1JJUFRJT046IE9wdGlvbmFsIEFQSXM6IFVJRCBub3QgZm91bmQgY2hlY2sNCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQ0KK1Rlc3QgQ2FzZSBza2lwcGVkIGFzIE9wdGlvbmFsIFBTIEFQSXMgYXJlIG5vdCBzdXBwb3J0ZWQuDQorVEVTVCBSRVNVTFQ6IFNLSVBQRUQgKFNraXAgQ29kZT0weDJCKQ0KKw0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KK1RFU1Q6IDQxMiB8IERFU0NSSVBUSU9OOiBPcHRpb25hbCBBUElzOiBJbnZhbGlkIGFyZ3VtZW50cyBhbmQgb2Zmc2V0IGludmFsaWQNCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQ0KK1Rlc3QgQ2FzZSBza2lwcGVkIGFzIE9wdGlvbmFsIFBTIEFQSXMgYXJlIG5vdCBzdXBwb3J0ZWQuDQorVEVTVCBSRVNVTFQ6IFNLSVBQRUQgKFNraXAgQ29kZT0weDJCKQ0KKw0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KK1RFU1Q6IDQxMyB8IERFU0NSSVBUSU9OOiBTZXRfRXh0ZW5kZWQgYW5kIENyZWF0ZSBhcGkgOiBTdWNjZXNzDQorW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUNCitUZXN0IENhc2Ugc2tpcHBlZCBhcyBPcHRpb25hbCBQUyBBUElzIGFyZSBub3Qgc3VwcG9ydGVkLg0KK1RFU1QgUkVTVUxUOiBTS0lQUEVEIChTa2lwIENvZGU9MHgyQikNCisNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCitURVNUOiA0MTQgfCBERVNDUklQVElPTjogT3B0aW9uYWwgQVBJcyBub3Qgc3VwcG9ydGVkIGNoZWNrDQorW0luZm9dIEV4ZWN1dGluZyB0ZXN0cyBmcm9tIG5vbi1zZWN1cmUNCitPcHRpb25hbCBQUyBBUElzIGFyZSBub3Qgc3VwcG9ydGVkLg0KK1tDaGVjayAxXSBDYWxsIHRvIGNyZWF0ZSBBUEkgc2hvdWxkIGZhaWwgYXMgQVBJIG5vdCBzdXBwb3J0ZWQNCitbQ2hlY2sgMl0gQ3JlYXRlIHZhbGlkIHN0b3JhZ2Ugd2l0aCBzZXQgQVBJDQorW0NoZWNrIDNdIENhbGwgdG8gc2V0X2V4dGVuZGVkIEFQSSBjYWxsIHNob3VsZCBmYWlsDQorW0NoZWNrIDRdIFZlcmlmeSBkYXRhIGlzIHVuY2hhbmdlZA0KK1RFU1QgUkVTVUxUOiBQQVNTRUQNCisNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCitURVNUOiA0MTUgfCBERVNDUklQVElPTjogQ3JlYXRlIEFQSSB3cml0ZV9vbmNlIGZsYWcgdmFsdWUgY2hlY2sNCitbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZQ0KK1Rlc3QgQ2FzZSBza2lwcGVkIGFzIE9wdGlvbmFsIFBTIEFQSXMgYXJlIG5vdCBzdXBwb3J0ZWQuDQorVEVTVCBSRVNVTFQ6IFNLSVBQRUQgKFNraXAgQ29kZT0weDJCKQ0KKw0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyoqKioqKioqKioqKiBQcm90ZWN0ZWQgU3RvcmFnZSBTdWl0ZSBSZXBvcnQgKioqKioqKioqKg0KK1RPVEFMIFRFU1RTICAgICA6IDE1DQorVE9UQUwgUEFTU0VEICAgIDogMTENCitUT1RBTCBTSU0gRVJST1IgOiAwDQorVE9UQUwgRkFJTEVEICAgIDogMA0KK1RPVEFMIFNLSVBQRUQgICA6IDQNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisNCitFbnRlcmluZyBzdGFuZGJ5Li4NCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL3NwZS9wYWxfZHJpdmVyX2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9kZXZfYXBpc190Zm1fbXVzY2FfYjEvc3BlL3BhbF9kcml2ZXJfaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNTIyMDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL3NwZS9wYWxfZHJpdmVyX2ludGYuYwpAQCAtMCwwICsxLDEzMSBAQAorIC8qKiBAZmlsZQorICAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgICoKKyAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICoKKyAgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICoKKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiovCisKKyNpbmNsdWRlICJwYWxfZHJpdmVyX2ludGYuaCIKKworLyoqCisgICAgQGJyaWVmICAgIC0gVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgVUFSVAorICAgIEBwYXJhbSAgICAtIHVhcnQgYmFzZSBhZGRyCisgICAgQHJldHVybiAgIC0gdm9pZAorKiovCit2b2lkIHBhbF91YXJ0X2luaXQodWludDMyX3QgdWFydF9iYXNlX2FkZHIpCit7CisgICAgcGFsX3VhcnRfcGwwMTFfaW5pdCh1YXJ0X2Jhc2VfYWRkcik7Cit9CisKKy8qKgorICAgIEBicmllZiAgICAtIFRoaXMgZnVuY3Rpb24gcGFyc2VzIHRoZSBpbnB1dCBzdHJpbmcgYW5kIHdyaXRlcyBieXRlcyBpbnRvIFVBUlQgVFggRklGTworICAgIEBwYXJhbSAgICAtIHN0ciAgICAgIDogSW5wdXQgU3RyaW5nCisgICAgICAgICAgICAgIC0gZGF0YSAgICAgOiBWYWx1ZSBmb3IgZm9ybWF0IHNwZWNpZmllcgorKiovCisKK3ZvaWQgcGFsX3ByaW50KGNoYXIgKnN0ciwgaW50MzJfdCBkYXRhKQoreworICBwYWxfdWFydF9wbDAxMV9wcmludChzdHIsZGF0YSk7Cit9CisKKworLyoqCisgICAgQGJyaWVmICAgIC0gV3JpdGVzIGludG8gZ2l2ZW4gbm9uLXZvbGF0aWxlIGFkZHJlc3MuCisgICAgQHBhcmFtICAgIC0gYmFzZSAgICA6IEJhc2UgYWRkcmVzcyBvZiBudm1lbQorICAgICAgICAgICAgICAgIG9mZnNldCAgOiBPZmZzZXQKKyAgICAgICAgICAgICAgICBidWZmZXIgIDogUG9pbnRlciB0byBzb3VyY2UgYWRkcmVzcworICAgICAgICAgICAgICAgIHNpemUgICAgOiBOdW1iZXIgb2YgYnl0ZXMKKyAgICBAcmV0dXJuICAgLSAxLzAKKyoqLworaW50IHBhbF9udm1lbV93cml0ZShhZGRyX3QgYmFzZSwgdWludDMyX3Qgb2Zmc2V0LCB2b2lkICpidWZmZXIsIGludCBzaXplKQoreworICAgIHJldHVybiBudm1lbV93cml0ZShiYXNlLCBvZmZzZXQsIGJ1ZmZlciwgc2l6ZSk7Cit9CisKKy8qKgorICAgIEBicmllZiAgICAtIFJlYWRzIGZyb20gZ2l2ZW4gbm9uLXZvbGF0aWxlIGFkZHJlc3MuCisgICAgQHBhcmFtICAgIC0gYmFzZSAgICA6IEJhc2UgYWRkcmVzcyBvZiBudm1lbQorICAgICAgICAgICAgICAgIG9mZnNldCAgOiBPZmZzZXQKKyAgICAgICAgICAgICAgICBidWZmZXIgIDogUG9pbnRlciB0byBzb3VyY2UgYWRkcmVzcworICAgICAgICAgICAgICAgIHNpemUgICAgOiBOdW1iZXIgb2YgYnl0ZXMKKyAgICBAcmV0dXJuICAgLSAxLzAKKyoqLworaW50IHBhbF9udm1lbV9yZWFkKGFkZHJfdCBiYXNlLCB1aW50MzJfdCBvZmZzZXQsIHZvaWQgKmJ1ZmZlciwgaW50IHNpemUpCit7CisgICAgcmV0dXJuIG52bWVtX3JlYWQoYmFzZSwgb2Zmc2V0LCBidWZmZXIsIHNpemUpOworfQorCisKKy8qKgorICAgIEBicmllZiAgICAgICAgICAgLSBJbml0aWFsaXplcyBhbiBoYXJkd2FyZSB3YXRjaGRvZyB0aW1lcgorICAgIEBwYXJhbSAgICAgICAgICAgLSBiYXNlX2FkZHIgICAgICAgOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIHdhdGNoZG9nIG1vZHVsZQorICAgICAgICAgICAgICAgICAgICAgLSB0aW1lX3VzICAgICAgICAgOiBUaW1lIGluIG1pY3JvIHNlY29uZHMKKyAgICAgICAgICAgICAgICAgICAgIC0gdGltZXJfdGlja191cyAgIDogTnVtYmVyIG9mIHRpY2tzIHBlciBtaWNybyBzZWNvbmQKKyAgICBAcmV0dXJuICAgICAgICAgIC0gU1VDQ0VTUy9GQUlMVVJFCisqKi8KK2ludCBwYWxfd2RfdGltZXJfaW5pdChhZGRyX3QgYmFzZV9hZGRyLCB1aW50MzJfdCB0aW1lX3VzLCB1aW50MzJfdCB0aW1lcl90aWNrX3VzKQoreworICAgIHJldHVybihwYWxfd2RfY21zZGtfaW5pdChiYXNlX2FkZHIsdGltZV91cywgdGltZXJfdGlja191cykpOworCit9CisKKy8qKgorICAgIEBicmllZiAgICAgICAgICAgLSBFbmFibGVzIGEgaGFyZHdhcmUgd2F0Y2hkb2cgdGltZXIKKyAgICBAcGFyYW0gICAgICAgICAgIC0gYmFzZV9hZGRyICAgICAgIDogQmFzZSBhZGRyZXNzIG9mIHRoZSB3YXRjaGRvZyBtb2R1bGUKKyAgICBAcmV0dXJuICAgICAgICAgIC0gU1VDQ0VTUy9GQUlMVVJFCisqKi8KK2ludCBwYWxfd2RfdGltZXJfZW5hYmxlKGFkZHJfdCBiYXNlX2FkZHIpCit7CisgICAgcmV0dXJuKHBhbF93ZF9jbXNka19lbmFibGUoYmFzZV9hZGRyKSk7Cit9CisKKy8qKgorICAgIEBicmllZiAgICAgICAgICAgLSBEaXNhYmxlcyBhIGhhcmR3YXJlIHdhdGNoZG9nIHRpbWVyCisgICAgQHBhcmFtICAgICAgICAgICAtIGJhc2VfYWRkciAgICAgICA6IEJhc2UgYWRkcmVzcyBvZiB0aGUgd2F0Y2hkb2cgbW9kdWxlCisgICAgQHJldHVybiAgICAgICAgICAtIFNVQ0NFU1MvRkFJTFVSRQorKiovCitpbnQgcGFsX3dkX3RpbWVyX2Rpc2FibGUoYWRkcl90IGJhc2VfYWRkcikKK3sKKyAgICByZXR1cm4gKHBhbF93ZF9jbXNka19kaXNhYmxlKGJhc2VfYWRkcikpOworfQorCisvKioKKyAgICBAYnJpZWYgICAgICAgICAgIC0gQ2hlY2tzIHdoZXRoZXIgaGFyZHdhcmUgd2F0Y2hkb2cgdGltZXIgaXMgZW5hYmxlZAorICAgIEBwYXJhbSAgICAgICAgICAgLSBiYXNlX2FkZHIgICAgICAgOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIHdhdGNoZG9nIG1vZHVsZQorICAgIEByZXR1cm4gICAgICAgICAgLSBFbmFibGVkIDogMSwgRGlzYWJsZWQgOiAwCisqKi8KK2ludCBwYWxfd2RfdGltZXJfaXNfZW5hYmxlZChhZGRyX3QgYmFzZV9hZGRyKQoreworICAgIHJldHVybiAocGFsX3dkX2Ntc2RrX2lzX2VuYWJsZWQoYmFzZV9hZGRyKSk7Cit9CisKKy8qKgorICAgIEBicmllZiAgIC0gVHJpZ2dlciBpbnRlcnJ1cHQgZm9yIGlycSBzaWduYWwgYXNzaWduZWQgdG8gZHJpdmVyIHBhcnRpdGlvbgorICAgICAgICAgICAgICAgYmVmb3JlIHJldHVybiB0byBjYWxsZXIuCisgICAgQHBhcmFtICAgLSB2b2lkCisgICAgQHJldHVybiAgLSB2b2lkCisqKi8KK3ZvaWQgcGFsX2dlbmVyYXRlX2ludGVycnVwdCh2b2lkKQoreworICAgIHBhbF91YXJ0X3BsMDExX2dlbmVyYXRlX2lycSgpOworfQorCisvKioKKyAgICBAYnJpZWYgICAtIERpc2FibGUgaW50ZXJydXB0IHRoYXQgd2FzIGdlbmVyYXRlZCB1c2luZyBwYWxfZ2VuZXJhdGVfaW50ZXJydXB0IEFQSS4KKyAgICBAcGFyYW0gICAtIHZvaWQKKyAgICBAcmV0dXJuICAtIHZvaWQKKyoqLwordm9pZCBwYWxfZGlzYWJsZV9pbnRlcnJ1cHQodm9pZCkKK3sKKyAgICBwYWxfdWFydF9wbDAxMV9kaXNhYmxlX2lycSgpOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9zcGUvcGFsX2RyaXZlcl9pbnRmLmggYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL3NwZS9wYWxfZHJpdmVyX2ludGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWYzNGNhCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS9zcGUvcGFsX2RyaXZlcl9pbnRmLmgKQEAgLTAsMCArMSwzNSBAQAorIC8qKiBAZmlsZQorICAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisgICoKKyAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICoKKyAgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICoKKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiovCisKKyNpZm5kZWYgX1BBTF9EUklWRVJfSU5URl9IXworI2RlZmluZSBfUEFMX0RSSVZFUl9JTlRGX0hfCisKKyNpbmNsdWRlICJwYWxfdWFydC5oIgorI2luY2x1ZGUgInBhbF9udm1lbS5oIgorI2luY2x1ZGUgInBhbF93ZF9jbXNkay5oIgorCit2b2lkIHBhbF91YXJ0X2luaXQodWludDMyX3QgdWFydF9iYXNlX2FkZHIpOwordm9pZCBwYWxfcHJpbnQoY2hhciAqc3RyLCBpbnQzMl90IGRhdGEpOworaW50IHBhbF9udm1lbV93cml0ZShhZGRyX3QgYmFzZSwgdWludDMyX3Qgb2Zmc2V0LCB2b2lkICpidWZmZXIsIGludCBzaXplKTsKK2ludCBwYWxfbnZtZW1fcmVhZChhZGRyX3QgYmFzZSwgdWludDMyX3Qgb2Zmc2V0LCB2b2lkICpidWZmZXIsIGludCBzaXplKTsKK2ludCBwYWxfd2RfdGltZXJfaW5pdChhZGRyX3QgYmFzZV9hZGRyLCB1aW50MzJfdCB0aW1lX3VzLCB1aW50MzJfdCB0aW1lcl90aWNrX3VzKTsKK2ludCBwYWxfd2RfdGltZXJfZW5hYmxlKGFkZHJfdCBiYXNlX2FkZHIpOworaW50IHBhbF93ZF90aW1lcl9kaXNhYmxlKGFkZHJfdCBiYXNlX2FkZHIpOworaW50IHBhbF93ZF90aW1lcl9pc19lbmFibGVkKGFkZHJfdCBiYXNlX2FkZHIpOwordm9pZCBwYWxfZ2VuZXJhdGVfaW50ZXJydXB0KHZvaWQpOwordm9pZCBwYWxfZGlzYWJsZV9pbnRlcnJ1cHQodm9pZCk7CisjZW5kaWYgLyogX1BBTF9EUklWRVJfSU5URl9IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS90YXJnZXQuY2ZnIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2Rldl9hcGlzX3RmbV9tdXNjYV9iMS90YXJnZXQuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOWVmYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZGV2X2FwaXNfdGZtX211c2NhX2IxL3RhcmdldC5jZmcKQEAgLTAsMCArMSw1NiBAQAorLy8vKiogQGZpbGUKKy8vICogQ29weXJpZ2h0IChjKSAyMDE5LCBBcm0gTGltaXRlZCBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCisvLyAqCisvLyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8gKgorLy8gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLyAqCisvLyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyoqLworCisvLyBVQVJUIGRldmljZSBpbmZvCit1YXJ0Lm51bT0xOwordWFydC4wLmJhc2UgPSAweDQwMTA2MDAwOyAvLyBVQVJUMV9OUwordWFydC4wLnNpemUgPSAweEZGRjsKK3VhcnQuMC5pbnRyX2lkID0gMHhGRjsKK3VhcnQuMC5wZXJtaXNzaW9uID0gVFlQRV9SRUFEX1dSSVRFOworCisvLyBXYXRjaGRvZyBkZXZpY2UgaW5mbword2F0Y2hkb2cubnVtID0gMTsKK3dhdGNoZG9nLjAuYmFzZSA9IDB4NDAwODEwMDA7Cit3YXRjaGRvZy4wLnNpemUgPSAweEZGRjsKK3dhdGNoZG9nLjAuaW50cl9pZCA9IDB4RkY7Cit3YXRjaGRvZy4wLnBlcm1pc3Npb24gPSBUWVBFX1JFQURfV1JJVEU7Cit3YXRjaGRvZy4wLm51bV9vZl90aWNrX3Blcl9taWNyb19zZWMgPSAweDM7ICAgICAgICAgLy8oc3lzX2ZlcS8xMDAwMDAwKQord2F0Y2hkb2cuMC50aW1lb3V0X2luX21pY3JvX3NlY19sb3cgPSAweEY0MjQwOyAgICAgIC8vMS4wICBzZWMgOiAgMSAqIDEwMDAgKiAxMDAwCit3YXRjaGRvZy4wLnRpbWVvdXRfaW5fbWljcm9fc2VjX21lZGl1bSA9IDB4MUU4NDgwOyAgLy8yLjAgIHNlYyA6ICAyICogMTAwMCAqIDEwMDAKK3dhdGNoZG9nLjAudGltZW91dF9pbl9taWNyb19zZWNfaGlnaCA9IDB4NEM0QjQwOyAgICAvLzUuMCAgc2VjIDogIDUgKiAxMDAwICogMTAwMAord2F0Y2hkb2cuMC50aW1lb3V0X2luX21pY3JvX3NlY19jcnlwdG8gPSAweDEzMTJEMDA7IC8vMTguMCBzZWMgOiAxOCAqIDEwMDAgKiAxMDAwCisKKy8vIFJhbmdlIG9mIDFLQiBOb24tdm9sYXRpbGUgbWVtb3J5IHRvIHByZXNlcnZlIGRhdGEgb3ZlciByZXNldC4gRXgsIE5WUkFNIGFuZCBGTEFTSAorbnZtZW0ubnVtID0xOworbnZtZW0uMC5zdGFydCA9IDB4MjAwNjAwMDA7Citudm1lbS4wLmVuZCA9IDB4MjAwNjAzRkY7Citudm1lbS4wLnBlcm1pc3Npb24gPSBUWVBFX1JFQURfV1JJVEU7CisKKy8vIE1pc2NlbGxhbmVvdXMgLSBUZXN0IHNjYXR0ZXIgaW5mbworZHV0Lm51bSA9IDE7CisKKy8vIFN0YXJ0IGFkZHJlc3Mgb2YgMTJLQiBOUyBtZW1vcnkgZm9yIHRlc3QgRUxGCitkdXQuMC5uc190ZXN0X2FkZHIgPSAweDI4MTEwMDAwOworCisvLyBTdGFydCBhZGRyZXNzIG9mIGNvbWJpbmVfdGVzdF9iaW5hcnkgaW4gbWVtb3J5LiBNZW1vcnkgY2FuIGJlIG1haW4gbWVtb3J5IG9yIHNlY29uZGFyeSBtZW1vcnkuCisvLyBTaXplIG9mIGNvbWJpbmVfdGVzdF9iaW5hcnkgPSBTdW1tYXRpb24gb2Ygc2l6ZSBvZiBlYWNoIHRlc3QgRUxGIGZpbGUuCitkdXQuMC5uc19zdGFydF9hZGRyX29mX2NvbWJpbmVfdGVzdF9iaW5hcnkgPSAweDI4MTIwMDAwOworCisvLyBJcyBjb21iaW5lX3Rlc3RfYmluYXJ5IGF2YWlsYWJsZSBpbiBSQU0/CitkdXQuMC5jb21iaW5lX3Rlc3RfYmluYXJ5X2luX3JhbSA9IEFWQUlMQUJMRTsKKworZHV0LjAuaW1wbGVtZW50ZWRfcHNhX2Zpcm13YXJlX2lzb2xhdGlvbl9sZXZlbCA9IExFVkVMMTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvTWFrZWZpbGUgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L01ha2VmaWxlCmluZGV4IDU4MTY3NTMuLjg5NGNlYzQgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvTWFrZWZpbGUKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9NYWtlZmlsZQpAQCAtODMsNiArODMsNyBAQAogaWZlcSAoJHtQU0FfSU5JVElBTF9BVFRFU1RBVElPTl9JTVBMRU1FTlRFRH0sMSkKIFNSQ19DX05TUEUgKz0gcGFsX2F0dGVzdGF0aW9uX2ludGYuYwogU1JDX0NfTlNQRSArPSBwYWxfYXR0ZXN0YXRpb25fZWF0LmMKK1NSQ19DX05TUEUgKz0gcGFsX2F0dGVzdGF0aW9uX2NyeXB0by5jCiBlbHNlCiBTUkNfQ19OU1BFICs9IHBhbF9hdHRlc3RhdGlvbl9lbXB0eV9pbnRmLmMKIGVuZGlmCkBAIC05OCw3ICs5OSw3IEBACiAgICAgICAgICAtSSQoU09VUkNFKS9wbGF0Zm9ybS90YXJnZXRzLyQoVEFSR0VUKS9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24gXAogICAgICAgICAgLUkkKFNPVVJDRSkvcGxhdGZvcm0vdGFyZ2V0cy8kKFRBUkdFVCkvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL2V4dC9pbmMgXAogICAgICAgICAgLUkkKFNPVVJDRSkvcGxhdGZvcm0vdGFyZ2V0cy8kKFRBUkdFVCkvbnNwZS9pbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UgXAotICAgICAgICAgLUkkKFNPVVJDRSkvcGxhdGZvcm0vdGFyZ2V0cy8kKFRBUkdFVCkvbnNwZS9wcm90ZWN0ZWRfc3RvcmFnZQorICAgICAgICAgLUkkKFNPVVJDRSkvcGxhdGZvcm0vdGFyZ2V0cy8kKFRBUkdFVCkvbnNwZS9wcm90ZWN0ZWRfc3RvcmFnZSBcCiAKIFZQQVRIPSQoU09VUkNFKS9wbGF0Zm9ybS90YXJnZXRzLyQoVEFSR0VUKS86IFwKICAgICAgICQoU09VUkNFKS9wbGF0Zm9ybS90YXJnZXRzLyQoVEFSR0VUKS9zcGU6IFwKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbWFuaWZlc3RzL2NvbW1vbi9kcml2ZXJfcGFydGl0aW9uX3BzYS5qc29uIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9tYW5pZmVzdHMvY29tbW9uL2RyaXZlcl9wYXJ0aXRpb25fcHNhLmpzb24KaW5kZXggNWQ1NzU3MS4uM2UyZWM2NyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9tYW5pZmVzdHMvY29tbW9uL2RyaXZlcl9wYXJ0aXRpb25fcHNhLmpzb24KKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9tYW5pZmVzdHMvY29tbW9uL2RyaXZlcl9wYXJ0aXRpb25fcHNhLmpzb24KQEAgLTMsMTEgKzMsOSBAQAogICAibmFtZSI6ICJEUklWRVJfUEFSVElUSU9OIiwKICAgInR5cGUiOiAiUFNBLVJPVCIsCiAgICJwcmlvcml0eSI6ICJOT1JNQUwiLAotICAiaWQiOiAiMHgwMDAwMDAwMyIsCiAgICJkZXNjcmlwdGlvbiI6ICJJbXBsZW1lbnRzIGRldmljZSBzZXJ2aWNlcyBzdWNoIHByaW50LCBmbGFzaCByZWFkL3dyaXRlLC4gZXRjLiIsCiAgICJlbnRyeV9wb2ludCI6ICJkcml2ZXJfbWFpbiIsCiAgICJzdGFja19zaXplIjogIjB4NDAwIiwKLSAgImhlYXBfc2l6ZSI6ICIweDEwMCIsCiAgICJzZXJ2aWNlcyI6IFt7CiAgICAgICAibmFtZSI6ICJEUklWRVJfVUFSVF9TSUQiLAogICAgICAgInNpZCI6ICIweDAwMDBGQzAxIiwKQEAgLTMzLDkgKzMxLDkgQEAKICAgICAgICJtaW5vcl9wb2xpY3kiOiAiUkVMQVhFRCIKICAgICB9LAogICAgIHsKLSAgICAgICJuYW1lIjogIlRFU1RfSU5UUl9TSUQiLAorICAgICAgIm5hbWUiOiAiRFJJVkVSX1RFU1RfU0lEIiwKICAgICAgICJzaWQiOiAiMHgwMDAwRkMwNCIsCi0gICAgICAic2lnbmFsIjogIlRFU1RfSU5UUl9TSUciLAorICAgICAgInNpZ25hbCI6ICJEUklWRVJfVEVTVF9TSUciLAogICAgICAgIm5vbl9zZWN1cmVfY2xpZW50cyI6IHRydWUsCiAgICAgICAibWlub3JfdmVyc2lvbiI6IDEsCiAgICAgICAibWlub3JfcG9saWN5IjogIlJFTEFYRUQiCkBAIC02OSwxMyArNjcsOSBAQAogICBdLAogICAiaXJxcyI6IFsKICAgICB7CisgICAgICAgImRlc2NyaXB0aW9uIjogIlVzaW5nIFVBUlQgVFggaW50ZXJydXB0IHRvIHRlc3QgcHNhX3dhaXQgYW5kIHBzYV9lb2kgZm9yIGlycV9zaWduYWwiLAogICAgICAgICJzaWduYWwiOiAiRFJJVkVSX1VBUlRfSU5UUl9TSUciLAogICAgICAgICJsaW5lX251bSI6IDE3CiAgICAgfQotICBdLAotICAibGlua2VyX3BhdHRlcm4iOiB7Ci0gICAgIm9iamVjdF9saXN0IjogWwotICAgICJkcml2ZXJfcGFydGl0aW9uLmEiCi0gICAgXQotICB9CisgIF0KIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbWFuaWZlc3RzL2lwYy9jbGllbnRfcGFydGl0aW9uX3BzYS5qc29uIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9tYW5pZmVzdHMvaXBjL2NsaWVudF9wYXJ0aXRpb25fcHNhLmpzb24KaW5kZXggMDgxZGM5NS4uYjkzMzc3YiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9tYW5pZmVzdHMvaXBjL2NsaWVudF9wYXJ0aXRpb25fcHNhLmpzb24KKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9tYW5pZmVzdHMvaXBjL2NsaWVudF9wYXJ0aXRpb25fcHNhLmpzb24KQEAgLTMsMTEgKzMsOSBAQAogICAibmFtZSI6ICJDTElFTlRfUEFSVElUSU9OIiwKICAgInR5cGUiOiAiQVBQTElDQVRJT04tUk9UIiwKICAgInByaW9yaXR5IjogIk5PUk1BTCIsCi0gICJpZCI6ICIweDAwMDAwMDAxIiwKICAgImRlc2NyaXB0aW9uIjogIkNsaWVudCBwYXJ0aXRpb24gZXhlY3V0aW5nIGNsaWVudCB0ZXN0IGZ1bmMgZnJvbSBTUEUiLAogICAiZW50cnlfcG9pbnQiOiAiY2xpZW50X21haW4iLAogICAic3RhY2tfc2l6ZSI6ICIweDQwMCIsCi0gICJoZWFwX3NpemUiOiAiMHgxMDAiLAogICAic2VydmljZXMiOiBbewogICAgICAgIm5hbWUiOiAiQ0xJRU5UX1RFU1RfRElTUEFUQ0hFUl9TSUQiLAogICAgICAgInNpZCI6ICIweDAwMDBGQTAxIiwKQEAgLTIwLDcgKzE4LDcgQEAKICAgImRlcGVuZGVuY2llcyI6IFsKICAgICAiRFJJVkVSX1VBUlRfU0lEIiwKICAgICAiRFJJVkVSX05WTUVNX1NJRCIsCi0gICAgIlRFU1RfSU5UUl9TSUQiLAorICAgICJEUklWRVJfVEVTVF9TSUQiLAogICAgICJTRVJWRVJfVEVTVF9ESVNQQVRDSEVSX1NJRCIsCiAgICAgIlNFUlZFUl9VTlNQRUNJRkVEX01JTk9SX1ZfU0lEIiwKICAgICAiU0VSVkVSX1NUUklDVF9NSU5PUl9WRVJTSU9OX1NJRCIsCkBAIC0zNSwxMCArMzMsNSBAQAogICAgICAgInNpemUiOiAiMHgyMCIsCiAgICAgICAicGVybWlzc2lvbiI6ICJSRUFELVdSSVRFIgogICAgIH0KLSAgIF0sCi0gICJsaW5rZXJfcGF0dGVybiI6IHsKLSAgICAib2JqZWN0X2xpc3QiOiBbCi0gICAgImNsaWVudF9wYXJ0aXRpb24uYSIKLSAgICBdCi0gIH0KKyAgIF0KIH0KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbWFuaWZlc3RzL2lwYy9zZXJ2ZXJfcGFydGl0aW9uX3BzYS5qc29uIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9tYW5pZmVzdHMvaXBjL3NlcnZlcl9wYXJ0aXRpb25fcHNhLmpzb24KaW5kZXggMzU0MTM4Ny4uMTQ2YjhmYiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9tYW5pZmVzdHMvaXBjL3NlcnZlcl9wYXJ0aXRpb25fcHNhLmpzb24KKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9tYW5pZmVzdHMvaXBjL3NlcnZlcl9wYXJ0aXRpb25fcHNhLmpzb24KQEAgLTMsNyArMyw2IEBACiAgICJuYW1lIjogIlNFUlZFUl9QQVJUSVRJT04iLAogICAidHlwZSI6ICJBUFBMSUNBVElPTi1ST1QiLAogICAicHJpb3JpdHkiOiAiTk9STUFMIiwKLSAgImlkIjogIjB4MDAwMDAwMDIiLAogICAiZGVzY3JpcHRpb24iOiAiU2VydmVyIHBhcnRpdGlvbiBleGVjdXRpbmcgc2VydmVyIHRlc3QgZnVuYyIsCiAgICJlbnRyeV9wb2ludCI6ICJzZXJ2ZXJfbWFpbiIsCiAgICJzdGFja19zaXplIjogIjB4NDAwIiwKQEAgLTY2LDEwICs2NSw1IEBACiAgICJkZXBlbmRlbmNpZXMiOiBbCiAgICAgIkRSSVZFUl9VQVJUX1NJRCIsCiAgICAgIkRSSVZFUl9OVk1FTV9TSUQiCi0gIF0sCi0gICJsaW5rZXJfcGF0dGVybiI6IHsKLSAgICAib2JqZWN0X2xpc3QiOiBbCi0gICAgInNlcnZlcl9wYXJ0aXRpb24uYSIKLSAgICBdCi0gIH0KKyAgXQogfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL2NvbW1vbi9wYWxfY29uZmlnLmggYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvY29tbW9uL3BhbF9jb25maWcuaAppbmRleCBkYWEwZWM1Li5lM2Y3MGFkIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvY29tbW9uL3BhbF9jb25maWcuaAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvY29tbW9uL3BhbF9jb25maWcuaApAQCAtNTAsNyArNTAsNyBAQAogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChWRVJCT1NFKQotI2RlZmluZSBWRVJCT1NFIDQgLyogUHJpbnQgdmVyYm9zaXR5ID0gRVJST1IgKi8KKyNkZWZpbmUgVkVSQk9TRSAzIC8qIFByaW50IHZlcmJvc2l0eSA9IFRFU1QgKi8KICNlbmRpZgogCiAjaWYgKCFkZWZpbmVkKFZBTF9OU1BFX0JVSUxEKSAmJiAhZGVmaW5lZChTUEVfQlVJTEQpKQpAQCAtNjIsNyArNjIsMTUgQEAKICNlbmRpZgogCiAjaWYgIWRlZmluZWQoVEVTVF9DT01CSU5FX0FSQ0hJVkUpCi0vLyNkZWZpbmUgVEVTVF9DT01CSU5FX0FSQ0hJVkUgLyogVGVzdCBkaXNwYXRjaGVyIGNvZGUgc2VsZWN0aW9uICovCisjZGVmaW5lIFRFU1RfQ09NQklORV9BUkNISVZFIDAgLyogQ29tYmluZSB0ZXN0IGFyY2hpdmUgb3IgYmluYXJ5PyAqLworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChXQVRDSERPR19BVkFJTEFCTEUpCisjZGVmaW5lIFdBVENIRE9HX0FWQUlMQUJMRSAwIC8qIElmIHplcm8sIHNraXAgd2F0Y2hkb2cgcHJvZ3JhbW1pbmcgKi8KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoU1BfSEVBUF9NRU1fU1VQUCkKKyNkZWZpbmUgU1BfSEVBUF9NRU1fU1VQUCAwIC8qIEFyZSBEeW5hbWljIGZ1bmNzIGF2YWlsYWJsZSB0byBzZWN1cmUgcGFydGl0aW9uPyAqLwogI2VuZGlmCiAKIC8qCkBAIC03OSw2ICs4NywxMyBAQAogICogb2YgdGhpcyBmaWxlLgogKi8KICNpbmNsdWRlICJwc2FfbWFuaWZlc3Qvc2lkLmgiCisKKy8qCisgKiBwc2FfbWFuaWZlc3QvcGlkLmg6IFNlY3VyZSBQYXJ0aXRpb24gSURzCisgKiBNYWNybyBkZWZpbml0aW9ucyB0aGF0IG1hcCBmcm9tIFNlY3VyZSBQYXJ0aXRpb24gbmFtZXMgdG8gU2VjdXJlIFBhcnRpdGlvbiBJRHMuCisgKiBQYXJ0aXRpb24gbWFuaWZlc3QgcGFyc2UgYnVpbGQgdG9vbCBtdXN0IHByb3ZpZGUgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZmlsZS4KKyovCisjaW5jbHVkZSAicHNhX21hbmlmZXN0L3BpZC5oIgogI2VuZGlmCiAKICNpZiBQU0FfQ1JZUFRPX0lNUExFTUVOVEVECmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvY29tbW9uL3BhbF9kcml2ZXJfaXBjX2ludGYuYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9jb21tb24vcGFsX2RyaXZlcl9pcGNfaW50Zi5jCmluZGV4IDMyYWVmOWMuLmY4Zjc3M2YgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9jb21tb24vcGFsX2RyaXZlcl9pcGNfaW50Zi5jCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9jb21tb24vcGFsX2RyaXZlcl9pcGNfaW50Zi5jCkBAIC01Niw3ICs1Niw3IEBACiAgICAgQHJldHVybiAgIC0gU1VDQ0VTUy9GQUlMVVJFCiAqKi8KIAotaW50IHBhbF9wcmludF9ucyhjaGFyICpzdHIsIHVpbnQzMl90IGRhdGEpCitpbnQgcGFsX3ByaW50X25zKGNoYXIgKnN0ciwgaW50MzJfdCBkYXRhKQogewogICAgIGludCAgICAgICAgICAgICBzdHJpbmdfbGVuID0gMDsKICAgICBjaGFyICAgICAgICAgICAgKnAgPSBzdHI7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvY29tbW9uL3BhbF9kcml2ZXJfbnNfaW50Zi5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL2NvbW1vbi9wYWxfZHJpdmVyX25zX2ludGYuYwppbmRleCBkZDZiMTRjLi4yYWY2ZmNjIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvY29tbW9uL3BhbF9kcml2ZXJfbnNfaW50Zi5jCisrKyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9jb21tb24vcGFsX2RyaXZlcl9uc19pbnRmLmMKQEAgLTM4LDcgKzM4LDcgQEAKICAgICBAcmV0dXJuICAgLSBTVUNDRVNTL0ZBSUxVUkUKICoqLwogCi1pbnQgcGFsX3ByaW50X25zKGNoYXIgKnN0ciwgdWludDMyX3QgZGF0YSkKK2ludCBwYWxfcHJpbnRfbnMoY2hhciAqc3RyLCBpbnQzMl90IGRhdGEpCiB7CiAgICAgcGFsX2Ntc2RrX3ByaW50KHN0ciwgZGF0YSk7CiAgICAgcmV0dXJuIFBBTF9TVEFUVVNfU1VDQ0VTUzsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9jcnlwdG8vcGFsX2NyeXB0b19pbnRmLmMgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvY3J5cHRvL3BhbF9jcnlwdG9faW50Zi5jCmluZGV4IGFkODM4ZjkuLjNkZjZhYTggMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9jcnlwdG8vcGFsX2NyeXB0b19pbnRmLmMKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL2NyeXB0by9wYWxfY3J5cHRvX2ludGYuYwpAQCAtMzYsNyArMzYsNyBAQAogICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIHN0YXR1czsKICAgICBjb25zdCB2b2lkICAgICAgICAgICAgICAqZXh0cmE7CiAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgZXh0cmFfc2l6ZSwgY2FwYWNpdHksICpnZW5fY2FwLCBub25jZV9sZW5ndGgsIGFkZGl0aW9uYWxfZGF0YV9sZW5ndGg7Ci0gICAgcHNhX2tleV9oYW5kbGVfdCAgICAgICAgaGFuZGxlLCAqa2V5X2hhbmRsZTsKKyAgICBwc2Ffa2V5X2hhbmRsZV90ICAgICAgICBoYW5kbGUsICprZXlfaGFuZGxlLCB0YXJnZXRfaGFuZGxlOwogICAgIHBzYV9rZXlfdHlwZV90ICAgICAgICAgIGtleV90eXBlLCAqa2V5X3R5cGVfb3V0OwogICAgIHBzYV9rZXlfcG9saWN5X3QgICAgICAgICpwb2xpY3k7CiAgICAgcHNhX2tleV91c2FnZV90ICAgICAgICAgdXNhZ2UsICp1c2FnZV9vdXQ7CkBAIC0zMjUsNiArMzI1LDExIEBACiAgICAgICAgIGNhc2UgUEFMX0NSWVBUT19BTExPQ0FURV9LRVk6CiAgICAgICAgICAgICBrZXlfaGFuZGxlID0gKHBzYV9rZXlfaGFuZGxlX3QgKil2YV9hcmcodmFsaXN0LCBpbnQqKTsKICAgICAgICAgICAgIHJldHVybiBwc2FfYWxsb2NhdGVfa2V5KGtleV9oYW5kbGUpOworICAgICAgICBjYXNlIFBBTF9DUllQVE9fQ09QWV9LRVk6CisgICAgICAgICAgICBoYW5kbGUgPSAocHNhX2tleV9oYW5kbGVfdCl2YV9hcmcodmFsaXN0LCBpbnQpOworICAgICAgICAgICAgdGFyZ2V0X2hhbmRsZSA9IChwc2Ffa2V5X2hhbmRsZV90KXZhX2FyZyh2YWxpc3QsIGludCk7CisgICAgICAgICAgICBwb2xpY3kgPSB2YV9hcmcodmFsaXN0LCBwc2Ffa2V5X3BvbGljeV90Kik7CisgICAgICAgICAgICByZXR1cm4gcHNhX2NvcHlfa2V5KGhhbmRsZSwgdGFyZ2V0X2hhbmRsZSwgcG9saWN5KTsKICAgICAgICAgY2FzZSBQQUxfQ1JZUFRPX0ZSRUU6CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUEFMX0tFWV9TTE9UX0NPVU5UOyBpKyspCiAgICAgICAgICAgICAgICAgcHNhX2Rlc3Ryb3lfa2V5KGkpOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL2NyeXB0by9wYWxfY3J5cHRvX2ludGYuaCBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9jcnlwdG8vcGFsX2NyeXB0b19pbnRmLmgKaW5kZXggZGZhYmVlMS4uZDFkYWJmYSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL2NyeXB0by9wYWxfY3J5cHRvX2ludGYuaAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvY3J5cHRvL3BhbF9jcnlwdG9faW50Zi5oCkBAIC02OCw2ICs2OCw3IEBACiAgICAgUEFMX0NSWVBUT19BU1lNTVRFUklDX1ZFUklGWSAgICAgICAgPSAweDMxLAogICAgIFBBTF9DUllQVE9fS0VZX0FHUkVFTUVOVCAgICAgICAgICAgID0gMHgzMiwKICAgICBQQUxfQ1JZUFRPX0FMTE9DQVRFX0tFWSAgICAgICAgICAgICA9IDB4MzMsCisgICAgUEFMX0NSWVBUT19DT1BZX0tFWSAgICAgICAgICAgICAgICAgPSAweDM0LAogICAgIFBBTF9DUllQVE9fRlJFRSAgICAgICAgICAgICAgICAgICAgID0gMHhGRSwKIH07CiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9jcnlwdG8uYyBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9jcnlwdG8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTJiZGJhCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2NyeXB0by5jCkBAIC0wLDAgKzEsMzQ2IEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAicGFsX2F0dGVzdGF0aW9uX2NyeXB0by5oIgorCitzdGF0aWMgdWludDMyX3QgIHB1YmxpY19rZXlfcmVnaXN0ZXJlZCA9IDA7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHVzZWZ1bF9idWZfaGVhZChzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYW1vdW50KQoreworICAgIHJldHVybiBVc2VmdWxCdWZfSGVhZChidWYsIGFtb3VudCk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBjaGVja19oYXNoX3NpemVzKHZvaWQpCit7CisgICAgaWYgKFRfQ09TRV9DUllQVE9fU0hBMjU2X1NJWkUgIT0gUFNBX0hBU0hfU0laRShQU0FfQUxHX1NIQV8yNTYpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFBBTF9BVFRFU1RfSEFTSF9GQUlMOworICAgIH0KKworICAgIHJldHVybiBQQUxfQVRURVNUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBwc2FfZWNjX2N1cnZlX3QgYXR0ZXN0X21hcF9lbGxpcHRpY19jdXJ2ZV90eXBlKGludDMyX3QgY29zZV9jdXJ2ZSkKK3sKKyAgICBwc2FfZWNjX2N1cnZlX3QgcHNhX2N1cnZlOworCisgICAgLypGaXhNZTogTWFwcGluZyBpcyBub3QgY29tcGxldGUsIG1pc3Npbmcgb25lczogUDM4NCwgUDUyMSwgRUQyNTUxOSwgRUQ0NDggKi8KKyAgICBzd2l0Y2ggKGNvc2VfY3VydmUpCisgICAgeworICAgIGNhc2UgUF8yNTY6CisgICAgICAgIHBzYV9jdXJ2ZSA9IFBTQV9FQ0NfQ1VSVkVfU0VDUDI1NlIxOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBwc2FfY3VydmUgPSBVU0hSVF9NQVg7CisgICAgfQorCisgICAgcmV0dXJuIHBzYV9jdXJ2ZTsKK30KKworc3RhdGljIHBzYV9hbGdvcml0aG1fdCBjb3NlX2hhc2hfYWxnX2lkX3RvX3BzYShpbnQzMl90IGNvc2VfaGFzaF9hbGdfaWQpCit7CisgICAgcHNhX2FsZ29yaXRobV90IHN0YXR1czsKKworICAgIHN3aXRjaCAoY29zZV9oYXNoX2FsZ19pZCkKKyAgICB7CisgICAgY2FzZSBDT1NFX0FMR19TSEEyNTZfUFJPUFJJRVRBUlk6CisgICAgICAgIHN0YXR1cyA9IFBTQV9BTEdfU0hBXzI1NjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3RhdHVzID0gUFNBX0FMR19NRDQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQzMl90IGhhc2hfYWxnX2lkX2Zyb21fc2lnX2FsZ19pZChpbnQzMl90IGNvc2Vfc2lnX2FsZ19pZCkKK3sKKyAgICBzd2l0Y2ggKGNvc2Vfc2lnX2FsZ19pZCkKKyAgICB7CisgICAgICAgIGNhc2UgQ09TRV9BTEdPUklUSE1fRVMyNTY6CisgICAgICAgICAgICByZXR1cm4gQ09TRV9BTEdfU0hBMjU2X1BST1BSSUVUQVJZOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIElOVDMyX01BWDsKKyAgICB9Cit9CisKK2ludDMyX3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2hfc3RhcnQoc3RydWN0IHBhbF9jb3NlX2NyeXB0b19oYXNoICpoYXNoX2N0eCwgaW50MzJfdCBjb3NlX2hhc2hfYWxnX2lkKQoreworICAgIGludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICAgIGNvc2VfcmV0ID0gUEFMX0FUVEVTVF9TVUNDRVNTOworICAgIHBzYV9zdGF0dXNfdCAgICAgICAgICAgICAgICAgICAgIHBzYV9yZXQ7CisgICAgc3RydWN0IHBhbF9jb3NlX3BzYV9jcnlwdG9faGFzaCAqcHNhX2hhc2hfY3R4OworCisgICAgY29zZV9yZXQgPSBjaGVja19oYXNoX3NpemVzKCk7CisgICAgaWYgKGNvc2VfcmV0KQorICAgIHsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBpZiAoc2l6ZW9mKHN0cnVjdCBwYWxfY29zZV9jcnlwdG9faGFzaCkgPCBzaXplb2Yoc3RydWN0IHBhbF9jb3NlX3BzYV9jcnlwdG9faGFzaCkpCisgICAgeworICAgICAgICBjb3NlX3JldCA9IFBBTF9BVFRFU1RfSEFTSF9GQUlMOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIHBzYV9oYXNoX2N0eCA9IChzdHJ1Y3QgcGFsX2Nvc2VfcHNhX2NyeXB0b19oYXNoICopaGFzaF9jdHg7CisgICAgcHNhX3JldCA9IHBzYV9oYXNoX3NldHVwKCZwc2FfaGFzaF9jdHgtPm9wZXJhdGlvbiwgY29zZV9oYXNoX2FsZ19pZF90b19wc2EoY29zZV9oYXNoX2FsZ19pZCkpOworCisgICAgaWYgKHBzYV9yZXQgPT0gUEFMX0FUVEVTVF9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgcHNhX2hhc2hfY3R4LT5zdGF0dXMgPSBQQUxfQVRURVNUX1NVQ0NFU1M7CisgICAgICAgIGNvc2VfcmV0ID0gUEFMX0FUVEVTVF9TVUNDRVNTOworICAgIH0KKyAgICBlbHNlIGlmIChwc2FfcmV0ID09IFBTQV9FUlJPUl9OT1RfU1VQUE9SVEVEKQorICAgIHsKKyAgICAgICAgY29zZV9yZXQgPSBQQUxfQVRURVNUX0hBU0hfVU5TVVBQT1JURUQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNvc2VfcmV0ID0gUEFMX0FUVEVTVF9IQVNIX0ZBSUw7CisgICAgfQorCitlcnJvcjoKKyAgICByZXR1cm4gY29zZV9yZXQ7Cit9CisKK3ZvaWQgcGFsX2Nvc2VfY3J5cHRvX2hhc2hfdXBkYXRlKHN0cnVjdCBwYWxfY29zZV9jcnlwdG9faGFzaCAqaGFzaF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgZGF0YV90b19oYXNoKQoreworICAgIHN0cnVjdCBwYWxfY29zZV9wc2FfY3J5cHRvX2hhc2ggKnBzYV9oYXNoX2N0eDsKKworICAgIGlmIChzaXplb2Yoc3RydWN0IHBhbF9jb3NlX2NyeXB0b19oYXNoKSA8IHNpemVvZihzdHJ1Y3QgcGFsX2Nvc2VfcHNhX2NyeXB0b19oYXNoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwc2FfaGFzaF9jdHggPSAoc3RydWN0IHBhbF9jb3NlX3BzYV9jcnlwdG9faGFzaCAqKWhhc2hfY3R4OworCisgICAgaWYgKHBzYV9oYXNoX2N0eC0+c3RhdHVzID09IFBBTF9BVFRFU1RfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIGlmIChkYXRhX3RvX2hhc2gucHRyICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBzYV9oYXNoX2N0eC0+c3RhdHVzID0gcHNhX2hhc2hfdXBkYXRlKCZwc2FfaGFzaF9jdHgtPm9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdG9faGFzaC5wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3RvX2hhc2gubGVuKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEludGVudGlvbmFsbHkgZG8gbm90aGluZywganVzdCBjb21wdXRpbmcgdGhlIHNpemUgb2YgdGhlIHRva2VuICovCisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludDMyX3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2hfZmluaXNoKHN0cnVjdCBwYWxfY29zZV9jcnlwdG9faGFzaCAqaGFzaF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmIGJ1ZmZlcl90b19ob2xkX3Jlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyAqaGFzaF9yZXN1bHQpCit7CisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICAgY29zZV9yZXQgPSBQQUxfQVRURVNUX1NVQ0NFU1M7CisgICAgcHNhX3N0YXR1c190ICAgICAgICAgICAgICAgICAgICAgcHNhX3JldDsKKyAgICBzdHJ1Y3QgcGFsX2Nvc2VfcHNhX2NyeXB0b19oYXNoICpwc2FfaGFzaF9jdHg7CisKKyAgICBpZiAoc2l6ZW9mKHN0cnVjdCBwYWxfY29zZV9jcnlwdG9faGFzaCkgPCBzaXplb2Yoc3RydWN0IHBhbF9jb3NlX3BzYV9jcnlwdG9faGFzaCkpCisgICAgeworICAgICAgICBjb3NlX3JldCA9IFBBTF9BVFRFU1RfSEFTSF9GQUlMOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIHBzYV9oYXNoX2N0eCA9IChzdHJ1Y3QgcGFsX2Nvc2VfcHNhX2NyeXB0b19oYXNoICopaGFzaF9jdHg7CisKKyAgICBpZiAocHNhX2hhc2hfY3R4LT5zdGF0dXMgPT0gUEFMX0FUVEVTVF9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgcHNhX3JldCA9IHBzYV9oYXNoX2ZpbmlzaCgmcHNhX2hhc2hfY3R4LT5vcGVyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX3RvX2hvbGRfcmVzdWx0LnB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfdG9faG9sZF9yZXN1bHQubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoaGFzaF9yZXN1bHQtPmxlbikpOworCisgICAgICAgIGlmIChwc2FfcmV0ID09IFBBTF9BVFRFU1RfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgaGFzaF9yZXN1bHQtPnB0ciA9IGJ1ZmZlcl90b19ob2xkX3Jlc3VsdC5wdHI7CisgICAgICAgICAgICBjb3NlX3JldCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocHNhX3JldCA9PSBQU0FfRVJST1JfQlVGRkVSX1RPT19TTUFMTCkKKyAgICAgICAgeworICAgICAgICAgICAgY29zZV9yZXQgPSBQQUxfQVRURVNUX0hBU0hfQlVGRkVSX1NJWkU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBjb3NlX3JldCA9IFBBTF9BVFRFU1RfSEFTSF9GQUlMOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNvc2VfcmV0ID0gUEFMX0FUVEVTVF9IQVNIX0ZBSUw7CisgICAgfQorCitlcnJvcjoKKyAgICByZXR1cm4gY29zZV9yZXQ7Cit9CisKK2ludCBwYWxfY3JlYXRlX3NoYTI1NihzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgYnl0ZXNfdG9faGFzaCwgc3RydWN0IHFfdXNlZnVsX2J1ZiBidWZmZXJfZm9yX2hhc2gsCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jICpoYXNoKQoreworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFBBTF9BVFRFU1RfU1VDQ0VTUzsKKyAgICBzdHJ1Y3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2ggICBoYXNoX2N0eDsKKworICAgIHN0YXR1cyA9IHBhbF9jb3NlX2NyeXB0b19oYXNoX3N0YXJ0KCZoYXNoX2N0eCwgQ09TRV9BTEdfU0hBMjU2X1BST1BSSUVUQVJZKTsKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgcGFsX2Nvc2VfY3J5cHRvX2hhc2hfdXBkYXRlKCZoYXNoX2N0eCwgYnl0ZXNfdG9faGFzaCk7CisgICAgc3RhdHVzID0gcGFsX2Nvc2VfY3J5cHRvX2hhc2hfZmluaXNoKCZoYXNoX2N0eCwgYnVmZmVyX2Zvcl9oYXNoLCBoYXNoKTsKKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3VpbnQzMl90IHBhbF9jb21wdXRlX2hhc2goaW50MzJfdCBjb3NlX2FsZ19pZCwgc3RydWN0IHFfdXNlZnVsX2J1ZiBidWZmZXJfZm9yX2hhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyAqaGFzaCwgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHByb3RlY3RlZF9oZWFkZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgcGF5bG9hZCkKK3sKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgc3RhdHVzOworICAgIFFDQk9SRW5jb2RlQ29udGV4dCAgICAgICAgICBjYm9yX2VuY29kZV9jdHg7CisgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jICAgICAgIHRic19maXJzdF9wYXJ0OworICAgIFFDQk9SRXJyb3IgICAgICAgICAgICAgICAgICBxY2Jvcl9yZXN1bHQ7CisgICAgc3RydWN0IHBhbF9jb3NlX2NyeXB0b19oYXNoIGhhc2hfY3R4ID0ge3swfX07CisgICAgaW50MzJfdCAgICAgICAgICAgICAgICAgICAgIGhhc2hfYWxnX2lkOworICAgIFVzZWZ1bEJ1Zl9NQUtFX1NUQUNLX1VCICAgIChidWZmZXJfZm9yX1RCU19maXJzdF9wYXJ0LCBUX0NPU0VfU0laRV9PRl9UQlMpOworCisgICAgLyogVGhpcyBidWlsZHMgdGhlIENCT1ItZm9ybWF0IHRvLWJlLXNpZ25lZCBieXRlcyAqLworICAgIFFDQk9SRW5jb2RlX0luaXQoJmNib3JfZW5jb2RlX2N0eCwgYnVmZmVyX2Zvcl9UQlNfZmlyc3RfcGFydCk7CisgICAgUUNCT1JFbmNvZGVfT3BlbkFycmF5KCZjYm9yX2VuY29kZV9jdHgpOworICAgIC8qIGNvbnRleHQgKi8KKyAgICBRQ0JPUkVuY29kZV9BZGRTWlN0cmluZygmY2Jvcl9lbmNvZGVfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPU0VfU0lHX0NPTlRFWFRfU1RSSU5HX1NJR05BVFVSRTEpOworICAgIC8qIGJvZHlfcHJvdGVjdGVkICovCisgICAgUUNCT1JFbmNvZGVfQWRkQnl0ZXMoJmNib3JfZW5jb2RlX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWRfaGVhZGVycyk7CisgICAgLyogc2lnbl9wcm90ZWN0ZWQgKi8KKyAgICBRQ0JPUkVuY29kZV9BZGRCeXRlcygmY2Jvcl9lbmNvZGVfY3R4LCBOVUxMX1VTRUZVTF9CVUZfQyk7CisgICAgLyogZXh0ZXJuYWxfYWFkICovCisgICAgUUNCT1JFbmNvZGVfQWRkQnl0ZXMoJmNib3JfZW5jb2RlX2N0eCwgTlVMTF9VU0VGVUxfQlVGX0MpOworICAgIC8qIGZha2UgcGF5bG9hZCAqLworICAgIFFDQk9SRW5jb2RlX0FkZEJ5dGVzKCZjYm9yX2VuY29kZV9jdHgsIE5VTExfVVNFRlVMX0JVRl9DKTsKKyAgICBRQ0JPUkVuY29kZV9DbG9zZUFycmF5KCZjYm9yX2VuY29kZV9jdHgpOworCisgICAgLyogR2V0IHRoZSByZXN1bHQgYW5kIGNvbnZlcnQgaXQgdG8gc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHJlcHJlc2VudGF0aW9uICovCisgICAgcWNib3JfcmVzdWx0ID0gUUNCT1JFbmNvZGVfRmluaXNoKCZjYm9yX2VuY29kZV9jdHgsICZ0YnNfZmlyc3RfcGFydCk7CisgICAgaWYgKHFjYm9yX3Jlc3VsdCkKKyAgICB7CisgICAgICAgIC8qIE1haW5seSBtZWFucyB0aGF0IHRoZSBwcm90ZWN0ZWRfaGVhZGVycyB3ZXJlIHRvbyBiaWcKKyAgICAgICAgICh3aGljaCBzaG91bGQgbmV2ZXIgaGFwcGVuKSAqLworICAgICAgICBzdGF0dXMgPSBQQUxfQVRURVNUX0VSUl9TSUdOX1NUUlVDVDsKKyAgICAgICAgZ290byBEb25lOworICAgIH0KKworICAgIC8qIFN0YXJ0IHRoZSBoYXNoaW5nICovCisgICAgaGFzaF9hbGdfaWQgPSBoYXNoX2FsZ19pZF9mcm9tX3NpZ19hbGdfaWQoY29zZV9hbGdfaWQpOworCisgICAgLyogRG9uJ3QgY2hlY2sgaGFzaF9hbGdfaWQgZm9yIGZhaWx1cmUuIHBhbF9jb3NlX2NyeXB0b19oYXNoX3N0YXJ0KCkKKyAgICAgKiB3aWxsIGhhbmRsZSBpdCBwcm9wZXJseQorICAgICAqLworICAgIHN0YXR1cyA9IHBhbF9jb3NlX2NyeXB0b19oYXNoX3N0YXJ0KCZoYXNoX2N0eCwgaGFzaF9hbGdfaWQpOworICAgIGlmIChzdGF0dXMpCisgICAgICAgIGdvdG8gRG9uZTsKKworICAgIC8qIEhhc2ggdGhlIGZpcnN0IHBhcnQgb2YgdGhlIFRCUy4gVGFrZSBhbGwgYnV0IHRoZSBsYXN0IHR3bworICAgICAqIGJ5dGVzLiBUaGUgbGFzdCB0d28gYnl0ZXMgYXJlIHRoZSBmYWtlIHBheWxvYWQgZnJvbSBhYm92ZS4gSXQKKyAgICAgKiBpcyByZXBsYWNlZCBieSB0aGUgcmVhbCBwYXlsb2FkIHdoaWNoIGlzIGhhc2hlZCBuZXh0LiBUaGUgZmFrZQorICAgICAqIHBheWxvYWQgaXMgbmVlZGVkIHNvIHRoZSBhcnJheSBjb3VudCBpcyByaWdodC4gVGhpcyBpcyBvbmUgb2YKKyAgICAgKiB0aGUgbWFpbiB0aGluZ3MgdGhhdCBtYWtlIGl0IHBvc3NpYmxlIHRvIGltcGxlbWVudCB3aXRoIG9uZQorICAgICAqIGJ1ZmZlciBmb3IgdGhlIHdob2xlIGNvc2Ugc2lnbjEuCisgICAgICovCisgICAgcGFsX2Nvc2VfY3J5cHRvX2hhc2hfdXBkYXRlKCZoYXNoX2N0eCwgdXNlZnVsX2J1Zl9oZWFkKHRic19maXJzdF9wYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRic19maXJzdF9wYXJ0LmxlbiAtIDIpKTsKKworICAgIC8qIEhhc2ggdGhlIHBheWxvYWQgKi8KKyAgICBwYWxfY29zZV9jcnlwdG9faGFzaF91cGRhdGUoJmhhc2hfY3R4LCBwYXlsb2FkKTsKKworICAgIC8qIEZpbmlzaCB0aGUgaGFzaCBhbmQgc2V0IHVwIHRvIHJldHVybiBpdCAqLworICAgIHN0YXR1cyA9IHBhbF9jb3NlX2NyeXB0b19oYXNoX2ZpbmlzaCgmaGFzaF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfZm9yX2hhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoKTsKKworRG9uZToKKyAgICByZXR1cm4gc3RhdHVzOworfQorCit1aW50MzJfdCBwYWxfaW1wb3J0X2F0dGVzdF9rZXkoaW50MzJfdCBhbGcpCit7CisgICAgcHNhX2tleV90eXBlX3QgICBhdHRlc3Rfa2V5X3R5cGU7CisgICAgc2l6ZV90ICAgICAgICAgICBwdWJsaWNfa2V5X3NpemU7CisgICAgcHNhX3N0YXR1c190ICAgICBzdGF0dXMgPSBQU0FfU1VDQ0VTUzsKKyAgICBwc2Ffa2V5X3BvbGljeV90IHBvbGljeTsKKyAgICBwc2FfZWNjX2N1cnZlX3QgIHBzYV9jdXJ2ZTsKKyAgICBwc2Ffa2V5X2hhbmRsZV90IHB1YmxpY19rZXlfaGFuZGxlOworCisgICAgLyogTWFwcGluZyBvZiBDT1NFIGN1cnZlIHR5cGUgdG8gUFNBIGN1cnZlIHR5cGVzICovCisgICAgcHNhX2N1cnZlID0gYXR0ZXN0X21hcF9lbGxpcHRpY19jdXJ2ZV90eXBlKFBfMjU2KTsKKyAgICBpZiAocHNhX2N1cnZlID09IFVTSFJUX01BWCkKKyAgICAgICAgcmV0dXJuIFBBTF9BVFRFU1RfRVJST1I7CisKKyAgICAvKiBTZXR1cCB0aGUga2V5IHBvbGljeSBmb3IgcHVibGljIGtleSAqLworICAgIHBvbGljeSA9IHBzYV9rZXlfcG9saWN5X2luaXQoKTsKKyAgICBwc2Ffa2V5X3BvbGljeV9zZXRfdXNhZ2UoJnBvbGljeSwgUFNBX0tFWV9VU0FHRV9WRVJJRlksIGFsZyk7CisKKyAgICBzdGF0dXMgPSBwc2FfYWxsb2NhdGVfa2V5KCZwdWJsaWNfa2V5X2hhbmRsZSk7CisgICAgaWYgKHN0YXR1cyAhPSBQU0FfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIHN0YXR1cyA9IHBzYV9zZXRfa2V5X3BvbGljeShwdWJsaWNfa2V5X2hhbmRsZSwgJnBvbGljeSk7CisgICAgaWYgKHN0YXR1cyAhPSBQU0FfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIGF0dGVzdF9rZXlfdHlwZSA9IFBTQV9LRVlfVFlQRV9FQ0NfUFVCTElDX0tFWShwc2FfY3VydmUpOworCisgICAgLyogUmVnaXN0ZXIgcHVibGljIGtleSB0byBjcnlwdG8gc2VydmljZSAqLworICAgIHB1YmxpY19rZXlfc2l6ZSA9IGF0dGVzdF9rZXkucHVieF9rZXlfc2l6ZSArIGF0dGVzdF9rZXkucHVieV9rZXlfc2l6ZTsKKworICAgIHN0YXR1cyA9IHBzYV9pbXBvcnRfa2V5KHB1YmxpY19rZXlfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRlc3Rfa2V5X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1aW50OF90ICopJmF0dGVzdF9wdWJsaWNfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWNfa2V5X3NpemUgKyAxKTsKKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKKwordWludDMyX3QgcGFsX2NyeXB0b19wdWJfa2V5X3ZlcmlmeShpbnQzMl90IGNvc2VfYWxnb3JpdGhtX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgdG9rZW5faGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHNpZ25hdHVyZSkKK3sKKyAgICB1aW50MzJfdCBzdGF0dXMgPSBQQUxfQVRURVNUX1NVQ0NFU1M7CisKKyAgICBpZiAoIXB1YmxpY19rZXlfcmVnaXN0ZXJlZCkKKyAgICB7CisgICAgICAgIHN0YXR1cyA9IHBhbF9pbXBvcnRfYXR0ZXN0X2tleShjb3NlX2FsZ29yaXRobV9pZCk7CisgICAgICAgIGlmIChzdGF0dXMgIT0gUEFMX0FUVEVTVF9TVUNDRVNTKQorICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgICAgICBwdWJsaWNfa2V5X3JlZ2lzdGVyZWQgPSAxOworICAgIH0KKworLyoKKyAqIEVuYWJsZSB0aGUgdmVyaWZ5IGZ1bmN0aW9uIHdoZW4gVHJ1c3RlZCBGaXJtYXJlIC0gTSBTdXBwb3J0cworCisgKiAgVmVyaWZ5IHRoZSBzaWduYXR1cmUgYSBoYXNoIG9yIHNob3J0IG1lc3NhZ2UgdXNpbmcgYSBwdWJsaWMga2V5LgorICAgIHN0YXR1cyA9IHBzYV9hc3ltbWV0cmljX3ZlcmlmeShwdWJsaWNfa2V5X2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvc2VfYWxnb3JpdGhtX2lkLCB0b2tlbl9oYXNoLnB0ciwgdG9rZW5faGFzaC5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUucHRyLCBzaWduYXR1cmUubGVuKTsKKyovCisgICAgcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9jcnlwdG8uaCBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9jcnlwdG8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDYzYWQxCi0tLSAvZGV2L251bGwKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2NyeXB0by5oCkBAIC0wLDAgKzEsMTAyIEBACisvKiogQGZpbGUKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyoqLworCisjaW5jbHVkZSAicGFsX2NvbW1vbi5oIgorI2luY2x1ZGUgInBhbF9hdHRlc3RhdGlvbl9lYXQuaCIKKworI2RlZmluZSBBVFRFU1RfUFVCTElDX0tFWV9TTE9UICAgICAgICAgICAgNAorCit0eXBlZGVmIHN0cnVjdHsKKyAgICB1aW50OF90ICAqcHVieF9rZXk7CisgICAgdWludDMyX3QgIHB1Ynhfa2V5X3NpemU7CisgICAgdWludDhfdCAgKnB1Ynlfa2V5OworICAgIHVpbnQzMl90ICBwdWJ5X2tleV9zaXplOworfSBlY2Nfa2V5X3Q7CisKK3N0cnVjdCBlY2NfcHVibGljX2tleV90IHsKKyAgICBjb25zdCB1aW50OF90IGE7CisgICAgdWludDhfdCBwdWJsaWNfa2V5W107IC8qIFgtY29vcmRpbmF0ZSB8fCBZLWNvb3JkaW5hdGUgKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWNjX3B1YmxpY19rZXlfdCBhdHRlc3RfcHVibGljX2tleSA9IHsKKyAgICAgLyogQ29uc3RhbnQgYnl0ZSAqLworICAgICAweDA0LAorICAgICAvKiBYLWNvb3JkaW5hdGUgKi8KKyAgICAgezB4NzksIDB4RUIsIDB4QTksIDB4MEUsIDB4OEIsIDB4RjQsIDB4NTAsIDB4QTYsCisgICAgICAweDc1LCAweDE1LCAweDc2LCAweEFELCAweDQ1LCAweDk5LCAweEIwLCAweDdBLAorICAgICAgMHhERiwgMHg5MywgMHg4RCwgMHhBMywgMHhCQiwgMHgwQiwgMHhEMSwgMHg3RCwKKyAgICAgIDB4MDAsIDB4MzYsIDB4RUQsIDB4NDksIDB4QTIsIDB4RDAsIDB4RkMsIDB4M0YsCisgICAgIC8qIFktY29vcmRpbmF0ZSAqLworICAgICAgMHhCRiwgMHhDRCwgMHhGQSwgMHg4OSwgMHg1NiwgMHhCNSwgMHg2OCwgMHhCRiwKKyAgICAgIDB4REIsIDB4ODYsIDB4NzMsIDB4RTYsIDB4NDgsIDB4RDgsIDB4QjUsIDB4OEQsCisgICAgICAweDkyLCAweDk5LCAweDU1LCAweEIxLCAweDRBLCAweDI2LCAweEMzLCAweDA4LAorICAgICAgMHgwRiwgMHgzNCwgMHgxMSwgMHg3RCwgMHg5NywgMHgxRCwgMHg2OCwgMHg2NH0sCit9OworCitzdHJ1Y3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2ggeworICAgIC8qIENhbid0IHB1dCB0aGUgYWN0dWFsIHNpemUgaGVyZSB3aXRob3V0IGNyZWF0aW5nIGRlcGVuZGVjeSBvbgorICAgICAqIGFjdHVhbCBoYXNoIGltcGxlbWVudGF0aW9uLCBzbyB0aGlzIGlzIGEgZmFpcmx5IGxhcmdlIGFuZAorICAgICAqIGFjY29tbW9kYXRpbmcgc2l6ZS4KKyAgICAgKi8KKyAgICB1aW50OF90IGJ5dGVzWzEyOF07Cit9OworCitzdHJ1Y3QgcGFsX2Nvc2VfcHNhX2NyeXB0b19oYXNoIHsKKyAgICBwc2Ffc3RhdHVzX3QgICAgICAgICBzdGF0dXM7CisgICAgcHNhX2hhc2hfb3BlcmF0aW9uX3Qgb3BlcmF0aW9uOworfTsKKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgaW5pdGlhbF9hdHRlc3RhdGlvbl9wdWJsaWNfeF9rZXlbXSA9Cit7CisgICAgMHg3OSwgMHhFQiwgMHhBOSwgMHgwRSwgMHg4QiwgMHhGNCwgMHg1MCwgMHhBNiwKKyAgICAweDc1LCAweDE1LCAweDc2LCAweEFELCAweDQ1LCAweDk5LCAweEIwLCAweDdBLAorICAgIDB4REYsIDB4OTMsIDB4OEQsIDB4QTMsIDB4QkIsIDB4MEIsIDB4RDEsIDB4N0QsCisgICAgMHgwMCwgMHgzNiwgMHhFRCwgMHg0OSwgMHhBMiwgMHhEMCwgMHhGQywgMHgzRgorfTsKKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgaW5pdGlhbF9hdHRlc3RhdGlvbl9wdWJsaWNfeV9rZXlbXSA9Cit7CisgICAgMHhCRiwgMHhDRCwgMHhGQSwgMHg4OSwgMHg1NiwgMHhCNSwgMHg2OCwgMHhCRiwKKyAgICAweERCLCAweDg2LCAweDczLCAweEU2LCAweDQ4LCAweEQ4LCAweEI1LCAweDhELAorICAgIDB4OTIsIDB4OTksIDB4NTUsIDB4QjEsIDB4NEEsIDB4MjYsIDB4QzMsIDB4MDgsCisgICAgMHgwRiwgMHgzNCwgMHgxMSwgMHg3RCwgMHg5NywgMHgxRCwgMHg2OCwgMHg2NAorfTsKKworLyogSW5pdGlhbGl6ZSB0aGUgc3RydWN0dXJlIHdpdGggZ2l2ZW4gcHVibGljIGtleSAqLworc3RhdGljIGNvbnN0IGVjY19rZXlfdCBhdHRlc3Rfa2V5ID0geworICAgICAgICAodWludDhfdCAqKWluaXRpYWxfYXR0ZXN0YXRpb25fcHVibGljX3hfa2V5LAorICAgICAgICBzaXplb2YoaW5pdGlhbF9hdHRlc3RhdGlvbl9wdWJsaWNfeF9rZXkpLAorICAgICAgICAodWludDhfdCAqKWluaXRpYWxfYXR0ZXN0YXRpb25fcHVibGljX3lfa2V5LAorICAgICAgICBzaXplb2YoaW5pdGlhbF9hdHRlc3RhdGlvbl9wdWJsaWNfeV9rZXkpCit9OworCitpbnQzMl90IHBhbF9jb3NlX2NyeXB0b19oYXNoX3N0YXJ0KHN0cnVjdCBwYWxfY29zZV9jcnlwdG9faGFzaCAqaGFzaF9jdHgsIGludDMyX3QgY29zZV9oYXNoX2FsZ19pZCk7Cit2b2lkIHBhbF9jb3NlX2NyeXB0b19oYXNoX3VwZGF0ZShzdHJ1Y3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2ggKmhhc2hfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGRhdGFfdG9faGFzaCk7CitpbnQzMl90IHBhbF9jb3NlX2NyeXB0b19oYXNoX2ZpbmlzaChzdHJ1Y3QgcGFsX2Nvc2VfY3J5cHRvX2hhc2ggKmhhc2hfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1ZiBidWZmZXJfdG9faG9sZF9yZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgKmhhc2hfcmVzdWx0KTsKK2ludCBwYWxfY3JlYXRlX3NoYTI1NihzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgYnl0ZXNfdG9faGFzaCwgc3RydWN0IHFfdXNlZnVsX2J1ZiBidWZmZXJfZm9yX2hhc2gsCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jICpoYXNoKTsKK3VpbnQzMl90IHBhbF9jb21wdXRlX2hhc2goaW50MzJfdCBjb3NlX2FsZ19pZCwgc3RydWN0IHFfdXNlZnVsX2J1ZiBidWZmZXJfZm9yX2hhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyAqaGFzaCwgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHByb3RlY3RlZF9oZWFkZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgcGF5bG9hZCk7Cit1aW50MzJfdCBwYWxfaW1wb3J0X2F0dGVzdF9rZXkoaW50MzJfdCBhbGcpOwordWludDMyX3QgcGFsX2NyeXB0b19wdWJfa2V5X3ZlcmlmeShpbnQzMl90IGNvc2VfYWxnb3JpdGhtX2lkLCBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgdG9rZW5faGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHNpZ25hdHVyZSk7CisKKwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2VhdC5jIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2VhdC5jCmluZGV4IDI2MmRjNWQuLjE3OGZkYzkgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9lYXQuYworKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fZWF0LmMKQEAgLTE1LDEwICsxNSw1NiBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqKi8KIAotI2luY2x1ZGUgInBhbF9hdHRlc3RhdGlvbl9lYXQuaCIKKyNpbmNsdWRlICJwYWxfYXR0ZXN0YXRpb25fY3J5cHRvLmgiCiAKLXVpbnQzMl90ICBtYW5kYXRvcnlfY2xhaW1zID0gMCwgbWFuZGFyb3R5X3N3X2NvbXBvbmVudHMgPSAwOwotYm9vbF90ICAgIHN3X2NvbXBvbmVudF9wcmVzZW50ID0gMDsKK3VpbnQzMl90ICAgIG1hbmRhdG9yeV9jbGFpbXMgPSAwOwordWludDMyX3QgICAgbWFuZGFyb3R5X3N3X2NvbXBvbmVudHMgPSAwOworYm9vbF90ICAgICAgc3dfY29tcG9uZW50X3ByZXNlbnQgPSAwOworCitzdGF0aWMgaW50IHBhbF9lbmNvZGVfY29zZV9rZXkoc3RydWN0IHFfdXNlZnVsX2J1Zl9jICpjb3NlX2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmIGJ1ZmZlcl9mb3JfY29zZV9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHhfY29yZCwgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHlfY29yZCkKK3sKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZTsKKyAgICBRQ0JPUkVycm9yICAgICAgICAgICAgICAgIHFjYm9yX3Jlc3VsdDsKKyAgICBRQ0JPUkVuY29kZUNvbnRleHQgICAgICAgIGNib3JfZW5jb2RlX2N0eDsKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgICAgIGNvc2VfY3VydmVfaWQgPSBQXzI1NjsKKyAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgICAgICAgZW5jb2RlZF9rZXlfaWQ7CisKKyAgICAvKiBHZXQgdGhlIHB1YmxpYyBrZXkgeCBhbmQgeSAqLworICAgIC8qIEVuY29kZSBpdCBpbnRvIGEgQ09TRV9LZXkgc3RydWN0dXJlICovCisgICAgUUNCT1JFbmNvZGVfSW5pdCgmY2Jvcl9lbmNvZGVfY3R4LCBidWZmZXJfZm9yX2Nvc2Vfa2V5KTsKKyAgICBRQ0JPUkVuY29kZV9PcGVuTWFwKCZjYm9yX2VuY29kZV9jdHgpOworICAgIFFDQk9SRW5jb2RlX0FkZEludDY0VG9NYXBOKCZjYm9yX2VuY29kZV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09TRV9LRVlfQ09NTU9OX0tUWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1NFX0tFWV9UWVBFX0VDMik7CisgICAgUUNCT1JFbmNvZGVfQWRkSW50NjRUb01hcE4oJmNib3JfZW5jb2RlX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1NFX0tFWV9QQVJBTV9DUlYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29zZV9jdXJ2ZV9pZCk7CisgICAgUUNCT1JFbmNvZGVfQWRkQnl0ZXNUb01hcE4oJmNib3JfZW5jb2RlX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1NFX0tFWV9QQVJBTV9YX0NPT1JESU5BVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeF9jb3JkKTsKKyAgICBRQ0JPUkVuY29kZV9BZGRCeXRlc1RvTWFwTigmY2Jvcl9lbmNvZGVfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPU0VfS0VZX1BBUkFNX1lfQ09PUkRJTkFURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5X2NvcmQpOworICAgIFFDQk9SRW5jb2RlX0Nsb3NlTWFwKCZjYm9yX2VuY29kZV9jdHgpOworCisgICAgcWNib3JfcmVzdWx0ID0gUUNCT1JFbmNvZGVfRmluaXNoKCZjYm9yX2VuY29kZV9jdHgsICZlbmNvZGVkX2tleV9pZCk7CisgICAgaWYgKHFjYm9yX3Jlc3VsdCAhPSBRQ0JPUl9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgLyogTWFpbmx5IG1lYW5zIHRoYXQgdGhlIENPU0VfS2V5IHdhcyB0b28gYmlnIGZvciBidWZmZXJfZm9yX2Nvc2Vfa2V5ICovCisgICAgICAgIHJldHVybl92YWx1ZSA9IFBBTF9BVFRFU1RfRVJSX1BST1RFQ1RFRF9IRUFERVJTOworICAgICAgICBnb3RvIERvbmU7CisgICAgfQorCisgICAgLyogRmluaXNoIHVwIGFuZCByZXR1cm4gKi8KKyAgICAqY29zZV9rZXkgPSBlbmNvZGVkX2tleV9pZDsKKyAgICByZXR1cm5fdmFsdWUgPSBQQUxfQVRURVNUX1NVQ0NFU1M7CisKK0RvbmU6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKwogCiBzdGF0aWMgaW50IGdldF9pdGVtc19pbl9tYXAoUUNCT1JEZWNvZGVDb250ZXh0ICpkZWNvZGVfY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRlbXNfdG9fZ2V0X3QgKml0ZW1fbGlzdCkKQEAgLTkwLDcgKzEzNiw3IEBACiB9CiAKIHN0YXRpYyBpbnQgcGFyc2VfdW5wcm90ZWN0ZWRfaGVhZGVycyhRQ0JPUkRlY29kZUNvbnRleHQgKmRlY29kZV9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1c2VmdWxfYnVmX2MgKmNoaWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyAqY2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbG9vcF9iYWNrKQogewogICAgIHN0cnVjdCBpdGVtc190b19nZXRfdCAgIGl0ZW1fbGlzdFszXTsKQEAgLTEyMCw3ICsxNjYsNyBAQAogICAgIHJldHVybiBQQUxfQVRURVNUX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgcGFyc2VfcHJvdGVjdGVkX2hlYWRlcnMoc3RydWN0IHVzZWZ1bF9idWZfYyBwcm90ZWN0ZWRfaGVhZGVycywKK3N0YXRpYyBpbnQgcGFyc2VfcHJvdGVjdGVkX2hlYWRlcnMoc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHByb3RlY3RlZF9oZWFkZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICphbGdfaWQpCiB7CiAgICAgUUNCT1JEZWNvZGVDb250ZXh0ICBkZWNvZGVfY29udGV4dDsKQEAgLTE1Niw3ICsyMDIsNyBAQAogICAgIEByZXR1cm4gICAtIGVycm9yIHN0YXR1cwogKiovCiBzdGF0aWMgaW50IHBhcnNlX2NsYWltcyhRQ0JPUkRlY29kZUNvbnRleHQgKmRlY29kZV9jb250ZXh0LCBRQ0JPUkl0ZW0gaXRlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVzZWZ1bF9idWZfYyBjb21wbGV0ZWRfY2hhbGxlbmdlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgY29tcGxldGVkX2NoYWxsZW5nZSkKIHsKICAgICBpbnQgaSwgY291bnQgPSAwOwogICAgIGludCBzdGF0dXMgPSBQQUxfQVRURVNUX1NVQ0NFU1M7CkBAIC0yODEsMTYgKzMyNyw0MiBAQAogaW50MzJfdCBwYWxfaW5pdGlhbF9hdHRlc3RfdmVyaWZ5X3Rva2VuKHVpbnQ4X3QgKmNoYWxsZW5nZSwgdWludDMyX3QgY2hhbGxlbmdlX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqdG9rZW4sIHVpbnQzMl90IHRva2VuX3NpemUpCiB7Ci0gICAgaW50ICAgICAgICAgICAgICAgICBzdGF0dXMgPSBQQUxfQVRURVNUX1NVQ0NFU1M7CisgICAgaW50MzJfdCAgICAgICAgICAgICBzdGF0dXMgPSBQQUxfQVRURVNUX1NVQ0NFU1M7CiAgICAgYm9vbCAgICAgICAgICAgICAgICBzaG9ydF9jaXJjdWl0OwogICAgIGludDMyX3QgICAgICAgICAgICAgY29zZV9hbGdvcml0aG1faWQ7CiAgICAgUUNCT1JJdGVtICAgICAgICAgICBpdGVtOwogICAgIFFDQk9SRGVjb2RlQ29udGV4dCAgZGVjb2RlX2NvbnRleHQ7Ci0gICAgc3RydWN0IHVzZWZ1bF9idWZfYyBjb21wbGV0ZWRfY2hhbGxlbmdlOwotICAgIHN0cnVjdCB1c2VmdWxfYnVmX2MgY29tcGxldGVkX3Rva2VuOwotICAgIHN0cnVjdCB1c2VmdWxfYnVmX2MgcGF5bG9hZDsKLSAgICBzdHJ1Y3QgdXNlZnVsX2J1Zl9jIHByb3RlY3RlZF9oZWFkZXJzOwotICAgIHN0cnVjdCB1c2VmdWxfYnVmX2Mga2lkOworICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBjb21wbGV0ZWRfY2hhbGxlbmdlOworICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyBjb21wbGV0ZWRfdG9rZW47CisgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHBheWxvYWQ7CisgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIHNpZ25hdHVyZTsKKyAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgcHJvdGVjdGVkX2hlYWRlcnM7CisgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGtpZDsKKyAgICBzdHJ1Y3QgcV91c2VmdWxfYnVmX2MgeF9jb3JkOworICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyB5X2NvcmQ7CisgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGNvc2Vfa2V5X3RvX2hhc2g7CisgICAgc3RydWN0IHFfdXNlZnVsX2J1Zl9jIGtleV9oYXNoOworICAgIHN0cnVjdCBxX3VzZWZ1bF9idWZfYyB0b2tlbl9oYXNoOworICAgIFVTRUZVTF9CVUZfTUFLRV9TVEFDS19VQihidWZfdG9faG9sZF94X2Nvb3JkLCBUX0NPU0VfQ1JZUFRPX0VDX1AyNTZfQ09PUkRfU0laRSk7CisgICAgVVNFRlVMX0JVRl9NQUtFX1NUQUNLX1VCKGJ1Zl90b19ob2xkX3lfY29vcmQsIFRfQ09TRV9DUllQVE9fRUNfUDI1Nl9DT09SRF9TSVpFKTsKKyAgICBVU0VGVUxfQlVGX01BS0VfU1RBQ0tfVUIoYnVmZmVyX2Zvcl9raWQsIFRfQ09TRV9DUllQVE9fU0hBMjU2X1NJWkUpOworICAgIFVTRUZVTF9CVUZfTUFLRV9TVEFDS19VQihidWZmZXJfZm9yX2Nvc2Vfa2V5LCBNQVhfRU5DT0RFRF9DT1NFX0tFWV9TSVpFKTsKKyAgICBVU0VGVUxfQlVGX01BS0VfU1RBQ0tfVUIoYnVmZmVyX2Zvcl9lbmNvZGVkX2tleSwgTUFYX0VOQ09ERURfQ09TRV9LRVlfU0laRSk7CisgICAgVVNFRlVMX0JVRl9NQUtFX1NUQUNLX1VCKGJ1ZmZlcl9mb3JfdG9rZW5faGFzaCwgVF9DT1NFX0NSWVBUT19TSEEyNTZfU0laRSk7CisKKyAgICBraWQucHRyID0gYnVmZmVyX2Zvcl9lbmNvZGVkX2tleS5wdHI7CisKKyAgICBtZW1jcHkoYnVmX3RvX2hvbGRfeF9jb29yZC5wdHIsIChjb25zdCB2b2lkICopYXR0ZXN0X2tleS5wdWJ4X2tleSwgYXR0ZXN0X2tleS5wdWJ4X2tleV9zaXplKTsKKyAgICBtZW1jcHkoYnVmX3RvX2hvbGRfeV9jb29yZC5wdHIsIChjb25zdCB2b2lkICopYXR0ZXN0X2tleS5wdWJ5X2tleSwgYXR0ZXN0X2tleS5wdWJ5X2tleV9zaXplKTsKKworICAgIC8qIFVwZGF0ZSBzaXplICovCisgICAgYnVmX3RvX2hvbGRfeF9jb29yZC5sZW4gPSBhdHRlc3Rfa2V5LnB1Ynhfa2V5X3NpemU7CisgICAgYnVmX3RvX2hvbGRfeV9jb29yZC5sZW4gPSBhdHRlc3Rfa2V5LnB1Ynlfa2V5X3NpemU7CisKKyAgICB4X2NvcmQucHRyID0gYnVmX3RvX2hvbGRfeF9jb29yZC5wdHI7CisgICAgeF9jb3JkLmxlbiA9IGJ1Zl90b19ob2xkX3hfY29vcmQubGVuOworICAgIHlfY29yZC5wdHIgPSBidWZfdG9faG9sZF95X2Nvb3JkLnB0cjsKKyAgICB5X2NvcmQubGVuID0gYnVmX3RvX2hvbGRfeV9jb29yZC5sZW47CiAKICAgICAvKiBDb25zdHJ1Y3QgdGhlIHRva2VuIGJ1ZmZlciBmb3IgdmFsaWRhdGlvbiAqLwogICAgIGNvbXBsZXRlZF90b2tlbi5wdHIgPSB0b2tlbjsKQEAgLTM0NSw2ICs0MTcsMjcgQEAKICAgICBpZiAoc3RhdHVzICE9IFBBTF9BVFRFU1RfU1VDQ0VTUykKICAgICAgICAgcmV0dXJuIHN0YXR1czsKIAorICAgIC8qIEVuY29kZSB0aGUgZ2l2ZW4gcHVibGljIGtleSAqLworICAgIHN0YXR1cyA9IHBhbF9lbmNvZGVfY29zZV9rZXkoJmNvc2Vfa2V5X3RvX2hhc2gsIGJ1ZmZlcl9mb3JfY29zZV9rZXksIHhfY29yZCwgeV9jb3JkKTsKKyAgICBpZiAoc3RhdHVzICE9IFBBTF9BVFRFU1RfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIC8qIENyZWF0ZSBoYXNoIG9mIHRoZSBnaXZlbiBwdWJsaWMga2V5ICovCisgICAgc3RhdHVzID0gcGFsX2NyZWF0ZV9zaGEyNTYoY29zZV9rZXlfdG9faGFzaCwgYnVmZmVyX2Zvcl9raWQsICZrZXlfaGFzaCk7CisgICAgaWYgKHN0YXR1cyAhPSBQU0FfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKworICAgIC8qIENvbXBhcmUgdGhlIGhhc2ggb2YgdGhlIHB1YmxpYyBrZXkgaW4gdG9rZW4gYW5kIGhhc2ggb2YgdGhlIGdpdmVuIHB1YmxpYyBrZXkgKi8KKyAgICBpZiAoa2lkLmxlbiAhPSBrZXlfaGFzaC5sZW4pCisgICAgeworICAgICAgICByZXR1cm4gUEFMX0FUVEVTVF9IQVNIX0xFTkdUSF9NSVNNQVRDSDsKKyAgICB9CisKKyAgICBpZiAobWVtY21wKGtpZC5wdHIsIGtleV9oYXNoLnB0ciwga2lkLmxlbikgIT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBQQUxfQVRURVNUX0hBU0hfTUlTTUFUQ0g7CisgICAgfQorCiAgICAgLyogR2V0IHRoZSBwYXlsb2FkICovCiAgICAgUUNCT1JEZWNvZGVfR2V0TmV4dCgmZGVjb2RlX2NvbnRleHQsICZpdGVtKTsKICAgICBpZiAoaXRlbS51RGF0YVR5cGUgIT0gUUNCT1JfVFlQRV9CWVRFX1NUUklORykKQEAgLTM1Nyw2ICs0NTAsMTkgQEAKICAgICBpZiAoaXRlbS51RGF0YVR5cGUgIT0gUUNCT1JfVFlQRV9CWVRFX1NUUklORykKICAgICAgICAgcmV0dXJuIFBBTF9BVFRFU1RfVE9LRU5fRVJSX0NCT1JfRk9STUFUVElORzsKIAorICAgIHNpZ25hdHVyZSA9IGl0ZW0udmFsLnN0cmluZzsKKworICAgIC8qIENvbXB1dGUgdGhlIGhhc2ggZnJvbSB0aGUgdG9rZW4gKi8KKyAgICBzdGF0dXMgPSBwYWxfY29tcHV0ZV9oYXNoKGNvc2VfYWxnb3JpdGhtX2lkLCBidWZmZXJfZm9yX3Rva2VuX2hhc2gsICZ0b2tlbl9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkX2hlYWRlcnMsIHBheWxvYWQpOworICAgIGlmIChzdGF0dXMgIT0gUEFMX0FUVEVTVF9TVUNDRVNTKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCisgICAgLyogVmVyaWZ5IHRoZSBzaWduYXR1cmUgKi8KKyAgICBzdGF0dXMgPSBwYWxfY3J5cHRvX3B1Yl9rZXlfdmVyaWZ5KGNvc2VfYWxnb3JpdGhtX2lkLCB0b2tlbl9oYXNoLCBzaWduYXR1cmUpOworICAgIGlmIChzdGF0dXMgIT0gUEFMX0FUVEVTVF9TVUNDRVNTKQorICAgICAgICByZXR1cm4gc3RhdHVzOworCiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgRGVjb2RlciBhbmQgdmFsaWRhdGUgdGhlIHBheWxvYWQgZm9ybWF0ICovCiAgICAgUUNCT1JEZWNvZGVfSW5pdCgmZGVjb2RlX2NvbnRleHQsIHBheWxvYWQsIFFDQk9SX0RFQ09ERV9NT0RFX05PUk1BTCk7CiAgICAgc3RhdHVzID0gUUNCT1JEZWNvZGVfR2V0TmV4dCgmZGVjb2RlX2NvbnRleHQsICZpdGVtKTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9lYXQuaCBiL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9lYXQuaAppbmRleCA5ZjQzNWZiLi44YTBjNTQ1IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25fZWF0LmgKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2VhdC5oCkBAIC0xNywxNiArMTcsNzAgQEAKIAogI2luY2x1ZGUgInFjYm9yLmgiCiAjaW5jbHVkZSAicGFsX2NvbW1vbi5oIgorI2luY2x1ZGUgInBzYS9jcnlwdG8uaCIKIAogI2RlZmluZSBQQUxfQVRURVNUX01JTl9FUlJPUiAgICAgICAgICAgICAgMzAKIAorLyogTklTVCBQLTI1NiBhbHNvIGtub3duIGFzIHNlY3AyNTZyMSAqLworI2RlZmluZSBQXzI1NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCiAjZGVmaW5lIENPU0VfSEVBREVSX1BBUkFNX0FMRyAgICAgICAgICAgICAxCiAjZGVmaW5lIENPU0VfSEVBREVSX1BBUkFNX0tJRCAgICAgICAgICAgICA0CiAKLSNkZWZpbmUgTUFOREFUT1JZX0NMQUlNX1dJVEhfU1dfQ09NUCAgICAgIDg2MgotI2RlZmluZSBNQU5EQVRPUllfQ0xBSU1fTk9fU1dfQ09NUCAgICAgICAgOTI2Ci0jZGVmaW5lIE1BTkRBVE9SWV9TV19DT01QICAgICAgICAgICAgICAgICAzNgotI2RlZmluZSBDQk9SX0FSTV9UT1RBTF9DTEFJTV9JTlNUQU5DRSAgICAgMTAKKyNkZWZpbmUgQ09TRV9LRVlfQ09NTU9OX0tUWSAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ09TRV9LRVlfVFlQRV9FQzIgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ09TRV9LRVlfUEFSQU1fQ1JWICAgICAgICAgICAgICAgLTEKKyNkZWZpbmUgQ09TRV9LRVlfUEFSQU1fWF9DT09SRElOQVRFICAgICAgLTIKKyNkZWZpbmUgQ09TRV9LRVlfUEFSQU1fWV9DT09SRElOQVRFICAgICAgLTMKKyNkZWZpbmUgQ09TRV9BTEdPUklUSE1fRVMyNTYgICAgICAgICAgICAgLTcKKyNkZWZpbmUgQ09TRV9BTEdfU0hBMjU2X1BST1BSSUVUQVJZICAgICAgLTcyMDAwCisKKy8qKgorICogVGhlIHNpemUgb2YgWCBhbmQgWSBjb29yZGluYXRlIGluIDIgcGFyYW1ldGVyIHN0eWxlIEVDIHB1YmxpYworICoga2V5LiBGb3JtYXQgaXMgYXMgZGVmaW5lZCBpbiBbQ09TRSAoUkZDIDgxNTIpXQorICogKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM4MTUyKSBhbmQgW1NFQyAxOiBFbGxpcHRpYyBDdXJ2ZQorICogQ3J5cHRvZ3JhcGh5XShodHRwOi8vd3d3LnNlY2cub3JnL3NlYzEtdjIucGRmKS4KKyAqCisgKiBUaGlzIHNpemUgaXMgd2VsbC1rbm93biBhbmQgZG9jdW1lbnRlZCBpbiBwdWJsaWMgc3RhbmRhcmRzLgorICovCisjZGVmaW5lIFRfQ09TRV9DUllQVE9fRUNfUDI1Nl9DT09SRF9TSVpFICAzMgorI2RlZmluZSBUX0NPU0VfQ1JZUFRPX1NIQTI1Nl9TSVpFICAgICAgICAgMzIKKworI2RlZmluZSBNQVhfRU5DT0RFRF9DT1NFX0tFWV9TSVpFIFwKKyAgICAxICsgLyogMSBieXRlIHRvIGVuY29kZSBtYXAgKi8gXAorICAgIDIgKyAvKiAyIGJ5dGVzIHRvIGVuY29kZSBrZXkgdHlwZSAqLyBcCisgICAgMiArIC8qIDIgYnl0ZXMgdG8gZW5jb2RlIGN1cnZlICovIFwKKyAgICAyICogLyogdGhlIFggYW5kIFkgY29vcmRpbmF0ZXMgYXQgMzIgYnl0ZXMgZWFjaCAqLyBcCisgICAgICAgIChUX0NPU0VfQ1JZUFRPX0VDX1AyNTZfQ09PUkRfU0laRSArIDEgKyAyKQorI2RlZmluZSBVU0VGVUxfQlVGX01BS0VfU1RBQ0tfVUIgVXNlZnVsQnVmX01BS0VfU1RBQ0tfVUIKKworI2RlZmluZSBDT1NFX1NJR19DT05URVhUX1NUUklOR19TSUdOQVRVUkUxICJTaWduYXR1cmUxIgorCisvKiBQcml2YXRlIHZhbHVlLiBJbnRlbnRpb25hbGx5IG5vdCBkb2N1bWVudGVkIGZvciBEb3h5Z2VuLgorICogVGhpcyBpcyB0aGUgc2l6ZSBhbGxvY2F0ZWQgZm9yIHRoZSBlbmNvZGVkIHByb3RlY3RlZCBoZWFkZXJzLiAgSXQKKyAqIG5lZWRzIHRvIGJlIGJpZyBlbm91Z2ggZm9yIG1ha2VfcHJvdGVjdGVkX2hlYWRlcigpIHRvIHN1Y2NlZWQuIEl0CisgKiBjdXJyZW50bHkgc2l6ZWQgZm9yIG9uZSBoZWFkZXIgd2l0aCBhbiBhbGdvcml0aG0gSUQgdXAgdG8gMzIgYml0cworICogbG9uZyAtLSBvbmUgYnl0ZSBmb3IgdGhlIHdyYXBwaW5nIG1hcCwgb25lIGJ5dGUgZm9yIHRoZSBsYWJlbCwgNQorICogYnl0ZXMgZm9yIHRoZSBJRC4gSWYgdGhpcyBpcyBtYWRlIGFjY2lkZW50aWFsbHkgdG9vIHNtYWxsLCBRQ0JPUiB3aWxsCisgKiBvbmx5IHJldHVybiBhbiBlcnJvciwgYW5kIG5vdCBvdmVycnVuIGFueSBidWZmZXJzLgorICoKKyAqIDkgZXh0cmEgYnl0ZXMgYXJlIGFkZGVkLCByb3VuZGluZyBpdCB1cCB0byAxNiB0b3RhbCwgaW4gY2FzZSBzb21lCisgKiBvdGhlciBwcm90ZWN0ZWQgaGVhZGVyIGlzIHRvIGJlIGFkZGVkLgorICovCisjZGVmaW5lIFRfQ09TRV9TSUdOMV9NQVhfUFJPVF9IRUFERVIgKDErMSs1KzkpCisKKy8qKgorICogVGhpcyBpcyB0aGUgc2l6ZSBvZiB0aGUgZmlyc3QgcGFydCBvZiB0aGUgQ0JPUiBlbmNvZGVkIFRCUworICogYnl0ZXMuIEl0IGlzIGFyb3VuZCAyMCBieXRlcy4gU2VlIGNyZWF0ZV90YnNfaGFzaCgpLgorICovCisjZGVmaW5lIFRfQ09TRV9TSVpFX09GX1RCUyBcCisgICAgMSArIC8qIEZvciBvcGVuaW5nIHRoZSBhcnJheSAqLyBcCisgICAgc2l6ZW9mKENPU0VfU0lHX0NPTlRFWFRfU1RSSU5HX1NJR05BVFVSRTEpICsgLyogIlNpZ25hdHVyZTEiICovIFwKKyAgICAyICsgLyogT3ZlcmhlYWQgZm9yIGVuY29kaW5nIHN0cmluZyAqLyBcCisgICAgVF9DT1NFX1NJR04xX01BWF9QUk9UX0hFQURFUiArIC8qIGVudGlyZSBwcm90ZWN0ZWQgaGVhZGVycyAqLyBcCisgICAgMyAqICggLyogMyBOVUxMIGJzdHJzIGZvciBmaWVsZHMgbm90IHVzZWQgKi8gXAorICAgICAgICAxIC8qIHNpemUgb2YgYSBOVUxMIGJzdHIgKi8gIFwKKyAgICApCiAKIC8qCiAgQ0JPUiBMYWJlbCBmb3IgcHJvcHJpZXRhcnkgaGVhZGVyIGluZGljYXRpbmcgc2hvcnQtY2lyY3VpdApAQCAtNDcsNiArMTAxLDggQEAKICNkZWZpbmUgRUFUX0NCT1JfQVJNX0xBQkVMX1VFSUQgICAgICAgICAgICAgICAgIChFQVRfQ0JPUl9BUk1fUkFOR0VfQkFTRSAtIDkpCiAjZGVmaW5lIEVBVF9DQk9SX0FSTV9MQUJFTF9PUklHSU5BVElPTiAgICAgICAgICAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgLSAxMCkKIAorI2RlZmluZSBDQk9SX0FSTV9UT1RBTF9DTEFJTV9JTlNUQU5DRSAgICAgICAgICAgMTAKKwogI2RlZmluZSBFQVRfQ0JPUl9TV19DT01QT05FTlRfVFlQRSAgICAgICAgICAgICAgKDF1KQogI2RlZmluZSBFQVRfQ0JPUl9TV19DT01QT05FTlRfTUVBU1VSRU1FTlQgICAgICAgKDJ1KQogI2RlZmluZSBFQVRfQ0JPUl9TV19DT01QT05FTlRfRVBPQ0ggICAgICAgICAgICAgKDN1KQpAQCAtNTQsNiArMTEwLDQwIEBACiAjZGVmaW5lIEVBVF9DQk9SX1NXX0NPTVBPTkVOVF9TSUdORVJfSUQgICAgICAgICAoNXUpCiAjZGVmaW5lIEVBVF9DQk9SX1NXX0NPTVBPTkVOVF9NRUFTVVJFTUVOVF9ERVNDICAoNnUpCiAKKyNkZWZpbmUgTUFOREFUT1JZX0NMQUlNX1dJVEhfU1dfQ09NUCAgICAgICAgICAgKDEgPDwgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEVBVF9DQk9SX0FSTV9MQUJFTF9OT05DRSkgICAgICAgICAgICAgIHwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPDwgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEVBVF9DQk9SX0FSTV9MQUJFTF9VRUlEKSAgICAgICAgICAgICAgIHwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPDwgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEVBVF9DQk9SX0FSTV9MQUJFTF9JTVBMRU1FTlRBVElPTl9JRCkgIHwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPDwgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEVBVF9DQk9SX0FSTV9MQUJFTF9DTElFTlRfSUQpICAgICAgICAgIHwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPDwgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEVBVF9DQk9SX0FSTV9MQUJFTF9TRUNVUklUWV9MSUZFQ1lDTEUpIHwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPDwgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEVBVF9DQk9SX0FSTV9MQUJFTF9CT09UX1NFRUQpICAgICAgICAgIHwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPDwgKEVBVF9DQk9SX0FSTV9SQU5HRV9CQVNFICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEVBVF9DQk9SX0FSTV9MQUJFTF9TV19DT01QT05FTlRTKSkKKworI2RlZmluZSBNQU5EQVRPUllfQ0xBSU1fTk9fU1dfQ09NUCAgICAgICAgICAgICAoMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX05PTkNFKSAgICAgICAgICAgICAgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX1VFSUQpICAgICAgICAgICAgICAgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX0lNUExFTUVOVEFUSU9OX0lEKSAgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX0NMSUVOVF9JRCkgICAgICAgICAgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX1NFQ1VSSVRZX0xJRkVDWUNMRSkgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX0JPT1RfU0VFRCkgICAgICAgICAgfCAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAoRUFUX0NCT1JfQVJNX1JBTkdFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRUFUX0NCT1JfQVJNX0xBQkVMX05PX1NXX0NPTVBPTkVOVFMpKQorCisjZGVmaW5lIE1BTkRBVE9SWV9TV19DT01QICAgICAgICAgICAgICAgICAgICAgICgxIDw8IEVBVF9DQk9SX1NXX0NPTVBPTkVOVF9NRUFTVVJFTUVOVCAgICAgIHwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPDwgRUFUX0NCT1JfU1dfQ09NUE9ORU5UX1NJR05FUl9JRCkKKworI2RlZmluZSBOVUxMX1VTRUZVTF9CVUZfQyAgTlVMTFVzZWZ1bEJ1ZkMKIAogZW51bSBhdHRlc3RhdGlvbl9lcnJvcl9jb2RlIHsKICAgICBQQUxfQVRURVNUX1NVQ0NFU1MgPSAwLApAQCAtNjEsNiArMTUxLDEzIEBACiAgICAgUEFMX0FUVEVTVF9UT0tFTl9DSEFMTEVOR0VfTUlTTUFUQ0gsCiAgICAgUEFMX0FUVEVTVF9UT0tFTl9OT1RfU1VQUE9SVEVELAogICAgIFBBTF9BVFRFU1RfVE9LRU5fTk9UX0FMTF9NQU5EQVRPUllfQ0xBSU1TLAorICAgIFBBTF9BVFRFU1RfSEFTSF9MRU5HVEhfTUlTTUFUQ0gsCisgICAgUEFMX0FUVEVTVF9IQVNIX01JU01BVENILAorICAgIFBBTF9BVFRFU1RfSEFTSF9GQUlMLAorICAgIFBBTF9BVFRFU1RfSEFTSF9VTlNVUFBPUlRFRCwKKyAgICBQQUxfQVRURVNUX0hBU0hfQlVGRkVSX1NJWkUsCisgICAgUEFMX0FUVEVTVF9FUlJfUFJPVEVDVEVEX0hFQURFUlMsCisgICAgUEFMX0FUVEVTVF9FUlJfU0lHTl9TVFJVQ1QsCiAgICAgUEFMX0FUVEVTVF9FUlJPUiwKIH07CiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9pbnRmLmggYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9wYWxfYXR0ZXN0YXRpb25faW50Zi5oCmluZGV4IGVmMTMyYjUuLjEyZjZlZTkgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL3BhbF9hdHRlc3RhdGlvbl9pbnRmLmgKKysrIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vcGFsX2F0dGVzdGF0aW9uX2ludGYuaApAQCAtMTgsNyArMTgsNyBAQAogI2lmbmRlZiBfUEFMX0lOSVRJQUxfQVRURVNUQVRJT05fSF8KICNkZWZpbmUgX1BBTF9JTklUSUFMX0FUVEVTVEFUSU9OX0hfCiAKLSNpbmNsdWRlICJwYWxfYXR0ZXN0YXRpb25fZWF0LmgiCisjaW5jbHVkZSAicGFsX2F0dGVzdGF0aW9uX2NyeXB0by5oIgogCiBlbnVtIGF0dGVzdGF0aW9uX2Z1bmN0aW9uX2NvZGUgewogICAgIFBBTF9JTklUSUFMX0FUVEVTVF9HRVRfVE9LRU4gICAgICAgID0gMHgxLApkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9zcGUvcGFsX2RyaXZlcl9pbnRmLmMgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L3NwZS9wYWxfZHJpdmVyX2ludGYuYwppbmRleCBjYzhiNTM3Li5mZDMwNzgzIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L3NwZS9wYWxfZHJpdmVyX2ludGYuYworKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L3NwZS9wYWxfZHJpdmVyX2ludGYuYwpAQCAtMzMsNyArMzMsNyBAQAogICAgICAgICAgICAgICAtIGRhdGEgICAgIDogVmFsdWUgZm9yIGZvcm1hdCBzcGVjaWZpZXIKICoqLwogCi12b2lkIHBhbF9wcmludChjaGFyICpzdHIsIHVpbnQzMl90IGRhdGEpCit2b2lkIHBhbF9wcmludChjaGFyICpzdHIsIGludDMyX3QgZGF0YSkKIHsKICAgcGFsX2Ntc2RrX3ByaW50KHN0cixkYXRhKTsKIApAQCAtMTEwLDMgKzExMCwyMyBAQAogICAgIHJldHVybiAocGFsX3dkX2Ntc2RrX2lzX2VuYWJsZWQoYmFzZV9hZGRyKSk7CiB9CiAKKy8qKgorICAgIEBicmllZiAgIC0gVHJpZ2dlciBpbnRlcnJ1cHQgZm9yIGlycSBzaWduYWwgYXNzaWduZWQgdG8gZHJpdmVyIHBhcnRpdGlvbgorICAgICAgICAgICAgICAgYmVmb3JlIHJldHVybiB0byBjYWxsZXIuCisgICAgQHBhcmFtICAgLSB2b2lkCisgICAgQHJldHVybiAgLSB2b2lkCisqKi8KK3ZvaWQgcGFsX2dlbmVyYXRlX2ludGVycnVwdCh2b2lkKQoreworICAgIHBhbF91YXJ0X2Ntc2RrX2dlbmVyYXRlX2lycSgpOworfQorCisvKioKKyAgICBAYnJpZWYgICAtIERpc2FibGUgaW50ZXJydXB0IHRoYXQgd2FzIGdlbmVyYXRlZCB1c2luZyBwYWxfZ2VuZXJhdGVfaW50ZXJydXB0IEFQSS4KKyAgICBAcGFyYW0gICAtIHZvaWQKKyAgICBAcmV0dXJuICAtIHZvaWQKKyoqLwordm9pZCBwYWxfZGlzYWJsZV9pbnRlcnJ1cHQodm9pZCkKK3sKKyAgICBwYWxfdWFydF9jbXNka19kaXNhYmxlX2lycSgpOworfQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC9zcGUvcGFsX2RyaXZlcl9pbnRmLmggYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L3NwZS9wYWxfZHJpdmVyX2ludGYuaAppbmRleCBkYTg1YTYzLi5jZWYzNGNhIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L3NwZS9wYWxfZHJpdmVyX2ludGYuaAorKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L3NwZS9wYWxfZHJpdmVyX2ludGYuaApAQCAtMjMsMTEgKzIzLDEzIEBACiAjaW5jbHVkZSAicGFsX3dkX2Ntc2RrLmgiCiAKIHZvaWQgcGFsX3VhcnRfaW5pdCh1aW50MzJfdCB1YXJ0X2Jhc2VfYWRkcik7Ci12b2lkIHBhbF9wcmludChjaGFyICpzdHIsIHVpbnQzMl90IGRhdGEpOwordm9pZCBwYWxfcHJpbnQoY2hhciAqc3RyLCBpbnQzMl90IGRhdGEpOwogaW50IHBhbF9udm1lbV93cml0ZShhZGRyX3QgYmFzZSwgdWludDMyX3Qgb2Zmc2V0LCB2b2lkICpidWZmZXIsIGludCBzaXplKTsKIGludCBwYWxfbnZtZW1fcmVhZChhZGRyX3QgYmFzZSwgdWludDMyX3Qgb2Zmc2V0LCB2b2lkICpidWZmZXIsIGludCBzaXplKTsKIGludCBwYWxfd2RfdGltZXJfaW5pdChhZGRyX3QgYmFzZV9hZGRyLCB1aW50MzJfdCB0aW1lX3VzLCB1aW50MzJfdCB0aW1lcl90aWNrX3VzKTsKIGludCBwYWxfd2RfdGltZXJfZW5hYmxlKGFkZHJfdCBiYXNlX2FkZHIpOwogaW50IHBhbF93ZF90aW1lcl9kaXNhYmxlKGFkZHJfdCBiYXNlX2FkZHIpOwogaW50IHBhbF93ZF90aW1lcl9pc19lbmFibGVkKGFkZHJfdCBiYXNlX2FkZHIpOwordm9pZCBwYWxfZ2VuZXJhdGVfaW50ZXJydXB0KHZvaWQpOwordm9pZCBwYWxfZGlzYWJsZV9pbnRlcnJ1cHQodm9pZCk7CiAjZW5kaWYgLyogX1BBTF9EUklWRVJfSU5URl9IXyAqLwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC90YXJnZXQuY2ZnIGIvYXBpLXRlc3RzL3BsYXRmb3JtL3RhcmdldHMvdGd0X2ZmX21iZWRvc19mdnBfbXBzMl9tNC90YXJnZXQuY2ZnCmluZGV4IDM3YjI2MjguLjlhNDA3YjggMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy9wbGF0Zm9ybS90YXJnZXRzL3RndF9mZl9tYmVkb3NfZnZwX21wczJfbTQvdGFyZ2V0LmNmZworKysgYi9hcGktdGVzdHMvcGxhdGZvcm0vdGFyZ2V0cy90Z3RfZmZfbWJlZG9zX2Z2cF9tcHMyX200L3RhcmdldC5jZmcKQEAgLTYyLDE4ICs2MiwyMSBAQAogLy8gTGV2ZWwgb2YgSXNvbGF0aW9uCiBkdXQuMC5pbXBsZW1lbnRlZF9wc2FfZmlybXdhcmVfaXNvbGF0aW9uX2xldmVsID0gTEVWRUwxOwogCisvLyBBcmUgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMgYXZhaWxhYmxlIHRvIHNlY3VyZSBwYXJ0aXRpb24/CitkdXQuMC5zcF9oZWFwX21lbV9zdXBwID0gQVZBSUxBQkxFOworCiAvLyBBc3NpZ24gZnJlZSBtZW1vcnkgcmFuZ2UgZm9yIGlzb2xhdGlvbiB0ZXN0aW5nLiBDaG9vc2UgdGhlIGFkZHJlc3NlcwogLy8gZm9yIHRoZXNlIG1lbW9yeSByZWdpb25zIHN1Y2ggdGhhdCBpdCBmb2xsb3dzIGJlbG93IGNvbmRpdGlvbjoKLS8vIG5zcGVfbW1pby4wLnN0YXJ0IDwgY2xpZW50X3BhcnRpdGlvbl9tbWlvLjAuc3RhcnQgPCBkcml2ZXJfcGFydGl0aW9uX21taW8uMC5zdGFydC4KKy8vIG5zcGVfbW1pby4wLnN0YXJ0IDwgc2VydmVyX3BhcnRpdGlvbl9tbWlvLjAuc3RhcnQgPCBkcml2ZXJfcGFydGl0aW9uX21taW8uMC5zdGFydC4KIG5zcGVfbW1pby5udW09MTsKIG5zcGVfbW1pby4wLnN0YXJ0ID0gMHgyMDBBRjAwMDsKIG5zcGVfbW1pby4wLmVuZCA9IDB4MjAwQUYwMUY7CiBuc3BlX21taW8uMC5wZXJtaXNzaW9uID0gVFlQRV9SRUFEX1dSSVRFOwogCi1jbGllbnRfcGFydGl0aW9uX21taW8ubnVtPTE7Ci1jbGllbnRfcGFydGl0aW9uX21taW8uMC5zdGFydCA9IDB4MjAwQUYwMjA7Ci1jbGllbnRfcGFydGl0aW9uX21taW8uMC5lbmQgPSAweDIwMEFGMDNGOwotY2xpZW50X3BhcnRpdGlvbl9tbWlvLjAucGVybWlzc2lvbiA9IFRZUEVfUkVBRF9XUklURTsKK3NlcnZlcl9wYXJ0aXRpb25fbW1pby5udW09MTsKK3NlcnZlcl9wYXJ0aXRpb25fbW1pby4wLnN0YXJ0ID0gMHgyMDBBRjAyMDsKK3NlcnZlcl9wYXJ0aXRpb25fbW1pby4wLmVuZCA9IDB4MjAwQUYwM0Y7CitzZXJ2ZXJfcGFydGl0aW9uX21taW8uMC5wZXJtaXNzaW9uID0gVFlQRV9SRUFEX1dSSVRFOwogCiBkcml2ZXJfcGFydGl0aW9uX21taW8ubnVtPTE7CiBkcml2ZXJfcGFydGl0aW9uX21taW8uMC5zdGFydCA9IDB4MjAwQUYwNDA7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvdG9vbHMvbWFrZWZpbGVzL01ha2VmaWxlIGIvYXBpLXRlc3RzL3Rvb2xzL21ha2VmaWxlcy9NYWtlZmlsZQppbmRleCA2ODkxZjQzLi4xYWE3OTBiIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvdG9vbHMvbWFrZWZpbGVzL01ha2VmaWxlCisrKyBiL2FwaS10ZXN0cy90b29scy9tYWtlZmlsZXMvTWFrZWZpbGUKQEAgLTMwLDE3ICszMCwzMiBAQAogCiAjR2VuZXJhdGUgdGFyZ2V0IGZpbGVzIGZyb20gVXNlciBwcm92aWRlZCBkYXRhIGJhc2UKIHRhcmdldF9jZmc6CisJQGVjaG8gICIiCisJQGVjaG8gICJQcm9jZXNzaW5nIHRhcmdldCBjb25maWd1cmF0aW9uLi4uIgogCW1rZGlyIC1wICQoQlVJTEQpL3BsYXRmb3JtLyR7VEFSR0VUfS8KIAlAaWYgWyAhIC1mICIkKFNPVVJDRSkvcGxhdGZvcm0vdGFyZ2V0cy8kKFRBUkdFVCkvdGFyZ2V0LmNmZyIgXTsgdGhlbiB7IGVjaG8gIkVycm9yOiBUYXJnZXQgTm90IEZvdW5kISEhIjsgZXhpdCAxOyB9IGZpCi0JcGVybCAkKFNPVVJDRSkvdG9vbHMvc2NyaXB0cy90YXJnZXRDb25maWdHZW4ucGwgJChTT1VSQ0UpICQoQlVJTEQpICR7VEFSR0VUfQorCXB5dGhvbiAkKFNPVVJDRSkvdG9vbHMvc2NyaXB0cy90YXJnZXRDb25maWdHZW4ucHkgJHtUQVJHRVR9ICQoU09VUkNFKS92YWwvY29tbW9uL3ZhbF90YXJnZXQuaCBcCisJJChTT1VSQ0UpL3BsYXRmb3JtL3RhcmdldHMvJHtUQVJHRVR9L3RhcmdldC5jZmcgJChCVUlMRCkvcGxhdGZvcm0vJHtUQVJHRVR9L3RhcmdldENvbmZpZ0dlbi5jIFwKKwkkKEJVSUxEKS9wbGF0Zm9ybS8ke1RBUkdFVH0vdGFyZ2V0X2RhdGFiYXNlLmggdGFyZ2V0X2RhdGFiYXNlICIiCisJZ2NjIC1EX19hZGRyX3RfZGVmaW5lZCAtRFRBUkdFVF9DRkdfQlVJTEQgJChCVUlMRCkvcGxhdGZvcm0vJHtUQVJHRVR9L3RhcmdldENvbmZpZ0dlbi5jIC1vICQoQlVJTEQpL3BsYXRmb3JtLyR7VEFSR0VUfS90YXJnZXRDb25maWdHZW4gXAorCS1JJChTT1VSQ0UpL3ZhbC9uc3BlIC1JJChTT1VSQ0UpL3ZhbC9jb21tb24gLUkkKFNPVVJDRSkvcGxhdGZvcm0vdGFyZ2V0cy8ke1RBUkdFVH0vbnNwZS9jb21tb24KKwkuLyQoQlVJTEQpL3BsYXRmb3JtLyR7VEFSR0VUfS90YXJnZXRDb25maWdHZW4KIAogI1JlYWQgdGFyZ2V0LmNmZyBhbmQgdXBkYXRlIHRoZSBhZGRyZXNzZXMgaW4gbGlua2VyIHNjcmlwdAogZ2VuX2xpbmtlcjoKKwlAZWNobyAgIiIKKwlAZWNobyAgIlVwZGF0aW5nIGxpbmtlciBmaWxlcy4uLiIKIAlta2RpciAtcCAkKFNVSVRFX09VVCkvICQoQlVJTEQpL3ZhbC8gJChCVUlMRCkvcGFydGl0aW9uLyA7CiAJcGVybCAkKFNPVVJDRSkvdG9vbHMvc2NyaXB0cy9wcm9jZXNzX3Rlc3RfbGlua2VyX2ZpbGUucGwgJChTT1VSQ0UpICQoU1VJVEVfT1VUKSAke1RBUkdFVH0gJChUT09MQ0hBSU4pCiAKIHByb2Nlc3NfdGVzdHN1aXRlLmRiOgotCSQoZXZhbCBURVNUX0xJU1QgOj0gJChzaGVsbCBncmVwICJedGVzdCIgJChTVUlURV9JTikvdGVzdHN1aXRlLmRiID4gJChTVUlURV9PVVQpLy50ZXN0bGlzdC50eHQgOyBkb3MydW5peCAkKFNVSVRFX09VVCkvLnRlc3RsaXN0LnR4dCA7IGNhdCAkKFNVSVRFX09VVCkvLnRlc3RsaXN0LnR4dCkpCisJQGVjaG8gICIiCisJQGVjaG8gICJDcmVhdGluZyB0ZXN0bGlzdC4uLiIKK2lmZXEgKCR7SU5DTFVERV9QQU5JQ19URVNUU30sIDEpCisJJChldmFsIFRFU1RfTElTVCA6PSAkKHNoZWxsIGdyZXAgLW8gIl50ZXN0Li4uLi4iICQoU1VJVEVfSU4pL3Rlc3RzdWl0ZS5kYiA+ICQoU1VJVEVfT1VUKS8udGVzdGxpc3QudHh0IDsgZG9zMnVuaXggJChTVUlURV9PVVQpLy50ZXN0bGlzdC50eHQgOyBjYXQgJChTVUlURV9PVVQpLy50ZXN0bGlzdC50eHQpKQorZWxzZQorCSQoZXZhbCBURVNUX0xJU1QgOj0gJChzaGVsbCBncmVwIC12ICJedGVzdC4uLi4uLCBwYW5pY190ZXN0IiAkKFNVSVRFX0lOKS90ZXN0c3VpdGUuZGIgfCBncmVwICJedGVzdCIgPiAkKFNVSVRFX09VVCkvLnRlc3RsaXN0LnR4dCA7IGRvczJ1bml4ICQoU1VJVEVfT1VUKS8udGVzdGxpc3QudHh0IDsgY2F0ICQoU1VJVEVfT1VUKS8udGVzdGxpc3QudHh0KSkKK2VuZGlmCiAJcGVybCAkKFNPVVJDRSkvdG9vbHMvc2NyaXB0cy9nZW5fdGVzdHNfbGlzdC5wbCAkKEJVSUxEKSAkKFNVSVRFX09VVCkvLnRlc3RsaXN0LnR4dCAkKFNVSVRFKQogCiAKQEAgLTYwLDkgKzc1LDE3IEBACiAJQGVjaG8gICItLS0tLS0tLS0tdmFsIGJ1aWxkIGNvbXBsZXRlLS0tLS0tLS0tLS0tLSIKIAogdGVzdF9jb21iaW5lLmVsZjogdGVzdC5lbGYKKwlAZWNobyAgIiIKK2lmZXEgKCR7VEVTVF9DT01CSU5FX0FSQ0hJVkV9LCAxKQorCUBlY2hvICAiLS0tLS0tLS0tLUNvbWJpbmUgTlMgdGVzdCBvYmplY3RzIGludG8gYXJjaGl2ZSBzdGFydC0tLS0tLS0tLS0tLS0iCisJJChBUikgJChBUl9PUFRJT05TKSAkKFNVSVRFX09VVCkvdGVzdF9jb21iaW5lLmEgJChTVUlURV9PVVQpL3Rlc3QqL3Rlc3RfKl9uc3BlLm8KKwlAZWNobyAgIi0tLS0tLS0tLS1Db21iaW5lIE5TIHRlc3Qgb2JqZWN0cyBpbnRvIGFyY2hpdmUgY29tcGxldGUtLS0tLS0tLS0tLS0tIgorZWxzZQorCUBlY2hvICAiLS0tLS0tLS0tLUNvbWJpbmUgTlMgdGVzdCBlbGZzIGludG8gYmluYXJ5IHN0YXJ0LS0tLS0tLS0tLS0tLSIKIAlwZXJsICQoU09VUkNFKS90b29scy9zY3JpcHRzL3Rlc3RfZWxmX2NvbWJpbmUucGwgJChTVUlURV9PVVQpLy50ZXN0bGlzdC50eHQKIAloZXhkdW1wIC12IC1lICcgMS80ICIlMDhYIiAiXG4iJyAkKFNVSVRFX09VVCkvdGVzdF9lbGZfY29tYmluZS5iaW4gPiAkKFNVSVRFX09VVCkvdGVzdF9lbGZfY29tYmluZS5oZXgKLQkkKEFSKSAkKEFSX09QVElPTlMpICQoU1VJVEVfT1VUKS90ZXN0X2NvbWJpbmUuYSAkKFNVSVRFX09VVCkvdGVzdCovdGVzdF8qX25zcGUubworCUBlY2hvICAiLS0tLS0tLS0tLUNvbWJpbmUgTlMgdGVzdCBlbGZzIGludG8gYmluYXJ5IGNvbXBsZXRlLS0tLS0tLS0tLS0tLSIKK2VuZGlmCiAKIHRlc3QuZWxmOgogCUBlY2hvICAiIgpAQCAtODAsNyArMTAzLDcgQEAKIAogb3V0cHV0X2xpc3Q6CiAJQGVjaG8gICIiCi0JQGVjaG8gICJCZWxvdyBhcmUgdGhlIGxpc3Qgb2Ygb3V0cHV0IGJpbmFyaWVzL2xpYnJhcmllcy4gSW50ZWdyYXRlIHRoZXNlIGJpbnMvbGlicyIKKwlAZWNobyAgIkJlbG93IGFyZSB0aGUgbGlzdCBvZiBvdXRwdXQgYmluYXJpZXMvbGlicmFyaWVzLiBJbnRlZ3JhdGUgdGhlc2UiCiAJQGVjaG8gICJ0byB5b3VyIHNvZnR3YXJlIHN0YWNrIHRvIGV4ZWN1dGUgdGVzdCBzdWl0ZS4iCiAJQGVjaG8gICIiCiAJQGVjaG8gICJhKSBOU1BFIGZpbGVzOiIKQEAgLTEwMyw1ICsxMjYsNiBAQAogCUBlY2hvICAiIgogCiBjbGVhbjoKLQlAZWNobyAgIj4+Pj4gQ2xlYW5pbmcgdGhlIGJ1aWxkIGRpcmVjdG9yeS4uLiIKKwlAZWNobyAgIiIKKwlAZWNobyAgIkNsZWFuaW5nIHRoZSBidWlsZCBkaXJlY3RvcnkuLi4iCiAJcm0gLXJmICQoQlVJTEQpLyoKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy90b29scy9tYWtlZmlsZXMvbGlua2VyL3Rlc3QubGlua2VyIGIvYXBpLXRlc3RzL3Rvb2xzL21ha2VmaWxlcy9saW5rZXIvdGVzdC5saW5rZXIKaW5kZXggZWU3NDY5OS4uNjlmYzRkMSAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3Rvb2xzL21ha2VmaWxlcy9saW5rZXIvdGVzdC5saW5rZXIKKysrIGIvYXBpLXRlc3RzL3Rvb2xzL21ha2VmaWxlcy9saW5rZXIvdGVzdC5saW5rZXIKQEAgLTIxLDggKzIxLDggQEAKIE1FTU9SWQogewogICAgIFRFU1RfSU5GTyAgKFIpICA6IE9SSUdJTiA9IFRFU1RfU1RBUlQsIExFTkdUSCA9IDB4MTAwCi0gICAgVEVTVF9URVhUICAoUlgpIDogT1JJR0lOID0gVEVTVF9TVEFSVCArMHgxMDAsIExFTkdUSCA9IDB4MTgwMAotICAgIFRFU1RfREFUQSAgKFJXKSA6IE9SSUdJTiA9IFRFU1RfU1RBUlQgKzB4MTkwMCwgTEVOR1RIID0gMHgxODAwCisgICAgVEVTVF9URVhUICAoUlgpIDogT1JJR0lOID0gVEVTVF9TVEFSVCArMHgxMDAsIExFTkdUSCA9IDB4MUEwMAorICAgIFRFU1RfREFUQSAgKFJXKSA6IE9SSUdJTiA9IFRFU1RfU1RBUlQgKzB4MUIwMCwgTEVOR1RIID0gMHgxODAwCiB9CiAKIFNFQ1RJT05TCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvdG9vbHMvbWFrZWZpbGVzL2xpbmtlci90ZXN0LnNjdCBiL2FwaS10ZXN0cy90b29scy9tYWtlZmlsZXMvbGlua2VyL3Rlc3Quc2N0CmluZGV4IGVmODZjM2YuLjRkNWE3YTkgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy90b29scy9tYWtlZmlsZXMvbGlua2VyL3Rlc3Quc2N0CisrKyBiL2FwaS10ZXN0cy90b29scy9tYWtlZmlsZXMvbGlua2VyL3Rlc3Quc2N0CkBAIC0xNiw3ICsxNiw3IEBACiAKICNkZWZpbmUgVEVTVF9DT0RFX1NUQVJUIDB4MAogI2RlZmluZSBURVNUX0lORk9fU0laRSAgMHgxMDAKLSNkZWZpbmUgVEVTVF9URVhUX1NJWkUgIDB4MTgwMAorI2RlZmluZSBURVNUX1RFWFRfU0laRSAgMHgxQTAwCiAjZGVmaW5lIFRFU1RfREFUQV9TSVpFICAweDE4MDAKIAogTFJfQ09ERSBURVNUX0NPREVfU1RBUlQKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy90b29scy9tYWtlZmlsZXMvc3BidWlsZC5tayBiL2FwaS10ZXN0cy90b29scy9tYWtlZmlsZXMvc3BidWlsZC5tawppbmRleCAyMWZiYzk2Li4xNDc5ZTc0IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvdG9vbHMvbWFrZWZpbGVzL3NwYnVpbGQubWsKKysrIGIvYXBpLXRlc3RzL3Rvb2xzL21ha2VmaWxlcy9zcGJ1aWxkLm1rCkBAIC01OSw3ICs1OSwxMyBAQAogCSQoQVMpIC1vICRAICQ8CiAKIGNsaWVudF9wYXJ0aXRpb24uYToKK2lmZXEgKCQod2lsZGNhcmQgJChTVUlURV9PVVQpL3Rlc3RfaSovLiopLCkKKwkkKEFSKSAkKEFSX09QVElPTlMpICQoQlVJTEQpL3BhcnRpdGlvbi9jbGllbnRfcGFydGl0aW9uLmEgJChCVUlMRCkvcGFydGl0aW9uL2NsaWVudF9wYXJ0aXRpb24ubyAkKFNVSVRFX09VVCkvdGVzdCovdGVzdF9sKl9zcGUubworZWxzZSBpZmVxICgkKHdpbGRjYXJkICQoU1VJVEVfT1VUKS90ZXN0X2wqLy4qKSwpCiAJJChBUikgJChBUl9PUFRJT05TKSAkKEJVSUxEKS9wYXJ0aXRpb24vY2xpZW50X3BhcnRpdGlvbi5hICQoQlVJTEQpL3BhcnRpdGlvbi9jbGllbnRfcGFydGl0aW9uLm8gJChTVUlURV9PVVQpL3Rlc3QqL3Rlc3RfaSpfc3BlLm8KK2Vsc2UKKwkkKEFSKSAkKEFSX09QVElPTlMpICQoQlVJTEQpL3BhcnRpdGlvbi9jbGllbnRfcGFydGl0aW9uLmEgJChCVUlMRCkvcGFydGl0aW9uL2NsaWVudF9wYXJ0aXRpb24ubyAkKFNVSVRFX09VVCkvdGVzdCovdGVzdF9pKl9zcGUubyAkKFNVSVRFX09VVCkvdGVzdCovdGVzdF9sKl9zcGUubworZW5kaWYKIAogc2VydmVyX3BhcnRpdGlvbi5hOgogCSQoQVIpICQoQVJfT1BUSU9OUykgJChCVUlMRCkvcGFydGl0aW9uL3NlcnZlcl9wYXJ0aXRpb24uYSAkKEJVSUxEKS9wYXJ0aXRpb24vc2VydmVyX3BhcnRpdGlvbi5vICQoU1VJVEVfT1VUKS90ZXN0Ki90ZXN0X3N1cHBfKl9zcGUubwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3Rvb2xzL21ha2VmaWxlcy90b29sY2hhaW4ubWsgYi9hcGktdGVzdHMvdG9vbHMvbWFrZWZpbGVzL3Rvb2xjaGFpbi5tawppbmRleCAyYTNjOTk4Li42OTllNmJiIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvdG9vbHMvbWFrZWZpbGVzL3Rvb2xjaGFpbi5taworKysgYi9hcGktdGVzdHMvdG9vbHMvbWFrZWZpbGVzL3Rvb2xjaGFpbi5tawpAQCAtODIsMjcgKzgyLDM1IEBACiBDT01QSUxFUl9PUFRJT05TICs9IC1EVkVSQk9TRT0kKFZFUkJPU0UpCiAKIGlmZXEgKCR7VEVTVF9DT01CSU5FX0FSQ0hJVkV9LCAxKQotQ09NUElMRVJfT1BUSU9OUyArPSAtRFRFU1RfQ09NQklORV9BUkNISVZFCitDT01QSUxFUl9PUFRJT05TICs9IC1EVEVTVF9DT01CSU5FX0FSQ0hJVkU9MQorZW5kaWYKKworaWZlcSAoJHtXQVRDSERPR19BVkFJTEFCTEV9LCAxKQorQ09NUElMRVJfT1BUSU9OUyArPSAtRFdBVENIRE9HX0FWQUlMQUJMRT0xCitlbmRpZgorCitpZmVxICgke1NQX0hFQVBfTUVNX1NVUFB9LCAxKQorQ09NUElMRVJfT1BUSU9OUyArPSAtRFNQX0hFQVBfTUVNX1NVUFA9MQogZW5kaWYKIAogaWZlcSAoJHtQU0FfSVBDX0lNUExFTUVOVEVEfSwgMSkKLUNPTVBJTEVSX09QVElPTlMgKz0gLURQU0FfSVBDX0lNUExFTUVOVEVECitDT01QSUxFUl9PUFRJT05TICs9IC1EUFNBX0lQQ19JTVBMRU1FTlRFRD0xCiBlbmRpZgogCiBpZmVxICgke1BTQV9DUllQVE9fSU1QTEVNRU5URUR9LCAxKQotQ09NUElMRVJfT1BUSU9OUyArPSAtRFBTQV9DUllQVE9fSU1QTEVNRU5URUQKK0NPTVBJTEVSX09QVElPTlMgKz0gLURQU0FfQ1JZUFRPX0lNUExFTUVOVEVEPTEKIGVuZGlmCiAKIGlmZXEgKCR7UFNBX1BST1RFQ1RFRF9TVE9SQUdFX0lNUExFTUVOVEVEfSwgMSkKLUNPTVBJTEVSX09QVElPTlMgKz0gLURQU0FfUFJPVEVDVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQKK0NPTVBJTEVSX09QVElPTlMgKz0gLURQU0FfUFJPVEVDVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQ9MQogZW5kaWYKIAogaWZlcSAoJHtQU0FfSU5URVJOQUxfVFJVU1RFRF9TVE9SQUdFX0lNUExFTUVOVEVEfSwgMSkKLUNPTVBJTEVSX09QVElPTlMgKz0gLURQU0FfSU5URVJOQUxfVFJVU1RFRF9TVE9SQUdFX0lNUExFTUVOVEVECitDT01QSUxFUl9PUFRJT05TICs9IC1EUFNBX0lOVEVSTkFMX1RSVVNURURfU1RPUkFHRV9JTVBMRU1FTlRFRD0xCiBlbmRpZgogCiBpZmVxICgke1BTQV9JTklUSUFMX0FUVEVTVEFUSU9OX0lNUExFTUVOVEVEfSwgMSkKLUNPTVBJTEVSX09QVElPTlMgKz0gLURQU0FfSU5JVElBTF9BVFRFU1RBVElPTl9JTVBMRU1FTlRFRAorQ09NUElMRVJfT1BUSU9OUyArPSAtRFBTQV9JTklUSUFMX0FUVEVTVEFUSU9OX0lNUExFTUVOVEVEPTEKIGVuZGlmCiAKIENDPSAkKENPTVBJTEVSKSAkKENPTVBJTEVSX09QVElPTlMpICQoQ0NfT1BUSU9OUykgJChVU0VSX0lOQ0xVREUpICQoSU5DTFVERSkKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy90b29scy9zY3JpcHRzL2dlbl90ZXN0c19saXN0LnBsIGIvYXBpLXRlc3RzL3Rvb2xzL3NjcmlwdHMvZ2VuX3Rlc3RzX2xpc3QucGwKaW5kZXggOGIyN2I1MC4uZjk4YmI1NiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3Rvb2xzL3NjcmlwdHMvZ2VuX3Rlc3RzX2xpc3QucGwKKysrIGIvYXBpLXRlc3RzL3Rvb2xzL3NjcmlwdHMvZ2VuX3Rlc3RzX2xpc3QucGwKQEAgLTMzLDggKzMzLDYgQEAKICAgICBteSAkdGVzdF9lbnRyeV9saXN0ICAgICAgICAgICAgID0gIiRidWlsZC92YWwvdGVzdF9lbnRyeV9saXN0LmluYyI7CiAgICAgbXkgJHRlc3RfZW50cnlfZm5fZGVjbGFyZV9saXN0ICA9ICIkYnVpbGQvdmFsL3Rlc3RfZW50cnlfZm5fZGVjbGFyZV9saXN0LmluYyI7CiAKLSAgICBwcmludCAiXG4+Pj4+IEdlbmVyYXRpbmcgdGVzdHMgbGlzdCBieSByZWZlcnJpbmcgdGVzdHN1aXRlLmRiIFxuIjsKLQogICAgIGlmICgkc3VpdGUgZXEgImNyeXB0byIpCiAgICAgewogICAgICAgICAkc3VpdGVfYmFzZSA9IDE7CkBAIC03Myw3ICs3MSw3IEBACiAgICAgY2xvc2UgSU47CiAgICAgY2xvc2UgT1VUMTsKICAgICBjbG9zZSBPVVQyOwotICAgIHByaW50ICJPdXRwdXQgZmlsZXMgYXJlOgorICAgIHByaW50ICJOb24tc2VjdXJlIHRlc3QgZW50cnkgc3ltYm9sIGxpc3Q6CiAgICAgJHRlc3RfZW50cnlfbGlzdCwKICAgICAkdGVzdF9lbnRyeV9mbl9kZWNsYXJlX2xpc3RcbiI7CiB9CkBAIC04Nyw4ICs4NSw2IEBACiAgICAgbXkgJHNlcnZlcl90ZXN0c19saXN0X2RlY2xhcmUgPSAiJGJ1aWxkL3BhcnRpdGlvbi9zZXJ2ZXJfdGVzdHNfbGlzdF9kZWNsYXJlLmluYyI7CiAgICAgbXkgJHNlcnZlcl90ZXN0c19saXN0ICAgICAgICAgPSAiJGJ1aWxkL3BhcnRpdGlvbi9zZXJ2ZXJfdGVzdHNfbGlzdC5pbmMiOwogCi0gICAgcHJpbnQgIlxuPj4+PiBHZW5lcmF0aW5nIHNlY3VyZSB0ZXN0cyBsaXN0IGZpbGVzIGJ5IHJlZmVycmluZyB0ZXN0c3VpdGUuZGIgXG4iOwotCiAgICAgb3BlbihJTiwgJHRlc3RzX2xpc3QpIG9yIGRpZSAiVW5hYmxlIHRvIG9wZW4gJHRlc3RzX2xpc3QgJCEiOwogICAgIG9wZW4oT1VUMSwgJz4nLCAkY2xpZW50X3Rlc3RzX2xpc3RfZGVjbGFyZSkgb3IgZGllICJVbmFibGUgdG8gb3BlbjogJCEiOwogICAgIG9wZW4oT1VUMiwgJz4nLCAkY2xpZW50X3Rlc3RzX2xpc3QpIG9yIGRpZSAiVW5hYmxlIHRvIG9wZW46ICQhIjsKQEAgLTEyMyw3ICsxMTksNyBAQAogICAgIGNsb3NlIE9VVDM7CiAgICAgY2xvc2UgT1VUNDsKIAotICAgIHByaW50ICJPdXRwdXQgZmlsZXMgYXJlOgorICAgIHByaW50ICJTZWN1cmUgdGVzdCBlbnRyeSBzeW1ib2wgbGlzdDoKICAgICAkY2xpZW50X3Rlc3RzX2xpc3RfZGVjbGFyZSwKICAgICAkY2xpZW50X3Rlc3RzX2xpc3QsCiAgICAgJHNlcnZlcl90ZXN0c19saXN0X2RlY2xhcmUsCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvdG9vbHMvc2NyaXB0cy9wcm9jZXNzX3Rlc3RfbGlua2VyX2ZpbGUucGwgYi9hcGktdGVzdHMvdG9vbHMvc2NyaXB0cy9wcm9jZXNzX3Rlc3RfbGlua2VyX2ZpbGUucGwKaW5kZXggM2EzMWIzYi4uNGIwYmIyNyAxMDA3NTUKLS0tIGEvYXBpLXRlc3RzL3Rvb2xzL3NjcmlwdHMvcHJvY2Vzc190ZXN0X2xpbmtlcl9maWxlLnBsCisrKyBiL2FwaS10ZXN0cy90b29scy9zY3JpcHRzL3Byb2Nlc3NfdGVzdF9saW5rZXJfZmlsZS5wbApAQCAtMTYsOCArMTYsNiBAQAogIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogIyoqLwogCi1wcmludCAiXG4+Pj4+IFVwZGF0aW5nIGxpbmtlciBmaWxlLi4uIFxuIjsKLQogI2lucHV0cwogJHNvdXJjZT0kQVJHVlswXTsKICRzdWl0ZV9vdXQ9JEFSR1ZbMV07CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvdG9vbHMvc2NyaXB0cy9zZXR1cC5zaCBiL2FwaS10ZXN0cy90b29scy9zY3JpcHRzL3NldHVwLnNoCmluZGV4IDQ2MDU4YTcuLjdkNmIzNmMgMTAwNzU1Ci0tLSBhL2FwaS10ZXN0cy90b29scy9zY3JpcHRzL3NldHVwLnNoCisrKyBiL2FwaS10ZXN0cy90b29scy9zY3JpcHRzL3NldHVwLnNoCkBAIC0yMSwxNiArMjEsMjEgQEAKIGRlY2xhcmUgLWEgSU5DTFVERV9QQVRIUwogZXhwb3J0IFNVSVRFPSIgIgogZXhwb3J0IFRFU1RfQ09NQklORV9BUkNISVZFPTAKK2V4cG9ydCBJTkNMVURFX1BBTklDX1RFU1RTPTAKK2V4cG9ydCBXQVRDSERPR19BVkFJTEFCTEU9MAorZXhwb3J0IFNQX0hFQVBfTUVNX1NVUFA9MAogZXhwb3J0IENMSUVOVF9GSUxFX0ZPVU5EPTAKIGV4cG9ydCBTRVJWSUNFX0ZJTEVfRk9VTkQ9MAorZXhwb3J0IE1BTklGRVNUX09VVF9GSUxFX0ZPVU5EPTAKIGV4cG9ydCBDUllQVE9fRklMRV9GT1VORD0wCiBleHBvcnQgUFJPVEVDVEVEX1NUT1JBR0VfRklMRV9GT1VORD0wCiBleHBvcnQgSU5URVJOQUxfVFJVU1RFRF9TVE9SQUdFX0ZJTEVfRk9VTkQ9MAogZXhwb3J0IElOSVRJQUxfQVRURVNUQVRJT05fRklMRV9GT1VORD0wCitleHBvcnQgTElGRUNZQ0xFX0ZJTEVfRk9VTkQ9MAogCiBJUENfSEVBREVSX0ZJTEVfUkVRPSJJZiBQU0EgSVBDIGltcGxlbWVudGVkIGluIHlvdXIgcGxhdGZvcm0sIGluY2x1ZGUgcGF0aCBtdXN0IHBvaW50IHRvIHBhdGgKLXdoZXJlIFwicHNhL2NsaWVudC5oXCIsIFwicHNhL3NlcnZpY2UuaFwiIGFuZCB0ZXN0IHBhcnRpdGlvbiBtYW5pZmVzdCBvdXRwdXQgZmlsZXMKLShcInBzYV9tYW5pZmVzdC9zaWQuaFwiIGFuZCBcInBzYV9tYW5pZmVzdC88bWFuaWZlc3RmaWxlbmFtZT4uaFwiKSBhcmUgbG9jYXRlZC4KK3doZXJlIFwicHNhL2NsaWVudC5oXCIsIFwicHNhL3NlcnZpY2UuaFwiLCBcInBzYS9saWZlY3ljbGUuaFwiIGFuZCB0ZXN0IHBhcnRpdGlvbiBtYW5pZmVzdCBvdXRwdXQgZmlsZXMKKyhcInBzYV9tYW5pZmVzdC9zaWQuaFwiLCBcInBzYV9tYW5pZmVzdC9waWQuaFwiIGFuZCBcInBzYV9tYW5pZmVzdC88bWFuaWZlc3RmaWxlbmFtZT4uaFwiKSBhcmUgbG9jYXRlZC4KICIKIENSWVBUT19IRUFERVJfRklMRV9SRVE9IklmIFBTQSBDUllQVE8gQVBJcyBhcmUgaW1wbGVtZW50ZWQgaW50byB5b3VyIHBsYXRmb3JtIHRoZW4geW91IG11c3QgcHJvdmlkZQogXCJwc2EvY3J5cHRvLmhcIiBmaWxlIHRvIHNldHVwLnNoIHNjcmlwdCB1c2luZyAtLWluY2x1ZGUgb3B0aW9uIHRvIGNvbXBpbGUgdGVzdHMgYW5kIGZyYW1ld29yay4KQEAgLTQyLDcgKzQ3LDcgQEAKIFwicHNhL2ludGVybmFsX3RydXN0ZWRfc3RvcmFnZS5oXCIgZmlsZSB0byBzZXR1cC5zaCBzY3JpcHQgdXNpbmcgLS1pbmNsdWRlIG9wdGlvbiB0byBjb21waWxlIHRlc3RzIGFuZCBmcmFtZXdvcmsuCiAiCiBBVFRFU1RBVElPTl9IRUFERVJfRklMRV9SRVE9IklmIFBTQSBJTklUSUFMX0FUVEVTVEFUSU9OIEFQSXMgYXJlIGltcGxlbWVudGVkIGludG8geW91ciBwbGF0Zm9ybSB0aGVuIHlvdSBtdXN0IHByb3ZpZGUKLVwicHNhL2luaXRpYWxfYXR0ZXN0YXRpb24uaFwiIGZpbGUgdG8gc2V0dXAuc2ggc2NyaXB0IHVzaW5nIC0taW5jbHVkZSBvcHRpb24gdG8gY29tcGlsZSB0ZXN0cyBhbmQgZnJhbWV3b3JrLgorXCJwc2EvaW5pdGlhbF9hdHRlc3RhdGlvbi5oXCIgYW5kIFwicHNhL2NyeXB0by5oXCIgZmlsZSB0byBzZXR1cC5zaCBzY3JpcHQgdXNpbmcgLS1pbmNsdWRlIG9wdGlvbiB0byBjb21waWxlIHRlc3RzIGFuZCBmcmFtZXdvcmsuCiAiCiAKIEhFTFA9IgpAQCAtNTAsNiArNTUsNyBAQAogVXNhZ2U6IHNldHVwLnNoIFstLXNvdXJjZSBTT1VSQ0VfRElSXSBbLS1idWlsZCBCVUlMRF9ESVJdIFstLXRhcmdldCBUQVJHRVRdIFstLXN1aXRlIFNVSVRFXQogICAgICAgICAgICAgICAgIFstLXRvb2xjaGFpbiBUT09MQ0hBSU5dIFstLWNwdV9hcmNoIENQVV9BUkNIXSBbLS12ZXJib3NlIFBSSU5UX0xFVkVMXQogICAgICAgICAgICAgICAgIFstLWluY2x1ZGUgSU5DTFVERV9QQVRIXSBbLS1oZWxwfC1oXQorVG9wbGV2ZWwgc2NyaXB0IHRvIGJ1aWxkIHRlc3RzIGFuZCBmcmFtZXdvcmsgc291cmNlcyBmb3IgZ2l2ZW4gdGVzdCBzdWl0ZS4KIAogQXJndW1lbnRzIEluZm86CiAgICAgLS1zb3VyY2UgPFNPVVJDRV9ESVI+ICAgOiBTT1VSQ0VfRElSIHBvaW50aW5nIHRvIGFyY2hpdGVjdHVyZSB0ZXN0IHN1aXRlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuCkBAIC01OSw3ICs2NSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuY2ZnIGZpbGUgY29ycmVzcG9uZGluZyB0byBpbnB1dCBzdHJpbmcgbXVzdCBiZSBhdmFpYWJsZSBhdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0vdGFyZ2V0cy88VEFSR0VUPi8KICAgICAtLXN1aXRlIDxTVUlURT4gICAgICAgICA6IENvbXBpbGUgdGVzdHMgZm9yIGdpdmVuIHN1aXRlLiBTdXBwb3J0IHZhbHVlcyBhcmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcGMsIGNyeXB0bywgaW50ZXJuYWxfdHJ1c3RlZF9zdG9yYWdlLCBwcm90ZWN0ZWRfc3RvcmFnZSBhbmQgaW5pdGlhbF9hdHRlc3RhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwYywgY3J5cHRvLCBpbnRlcm5hbF90cnVzdGVkX3N0b3JhZ2UsIHByb3RlY3RlZF9zdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGluaXRpYWxfYXR0ZXN0YXRpb24uCiAgICAgLS10b29sY2hhaW4gPFRPT0xDSEFJTj4gOiBCdWlsZCB1c2luZyB0aGUgZ2l2ZW4gVE9PTENIQUlOLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydGVkIHZhbHVlcyBhcmUgR05VQVJNIChHTlUgQXJtIEVtYmVkZGVkKSBhbmQgQVJNQ0xBTkcgKEFSTSBDb21waWxlciA2LngpLgogICAgIC0tY3B1X2FyY2ggPENQVV9BUkNIPiAgIDogUHJvdmlkZSBjcHUgYXJjaCBzdHJpbmcgYXMgYXJndW1lbnQuCkBAIC02OCw5ICs3NSwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydGVkIHByaW50IGxldmVscyBhcmU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBJTkZPICYgYWJvdmUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgLSBERUJVRyAmIGFib3ZlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIC0gVEVTVCAmIGFib3ZlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0IC0gV0FSTiAmIEVSUk9SLihEZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIC0gVEVTVCAmIGFib3ZlLihEZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0IC0gV0FSTiAmIEVSUk9SLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1IC0gRVJST1IuCisgICAgLS1hcmNoaXZlX3Rlc3RzICAgICAgICAgOiBDcmVhdGUgY29tYmluZSB0ZXN0IGFyY2hpdmUoLmEpIGZpbGUgYnkgY29tYmluaW5nIGF2YWlsYWJsZSB0ZXN0IG9iamVjdHMgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYnNlbmNlIG9mIHRoaXMgb3B0aW9uIHdvdWxkIGNyZWF0ZSBjb21iaW5lIHRlc3QgYmluYXJ5KC5iaW4pIGJ5IGNvbWJpbmluZyBhdmFpbGFibGUgdGVzdCBlbGZzCisgICAgLS1pbmNsdWRlX3BhbmljX3Rlc3RzICAgOiBDb25zaWRlciBwYW5pYyB0ZXN0cyAobWVudGlvbmVkIGluIHRlc3RzdWl0ZS5kYiBvZiByZXNwZWN0aXZlIHN1aXRlKSBhbG9uZyB3aXRoIGZ1bmN0aW9uYWwgdGVzdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBidWlsZGluZyB0aGUgZmluYWwgZXhlY3V0YWJsZXMuIEFic2VuY2Ugb2YgdGhpcyBvcHRpb24gd291bGQgY29uc2lkZXIgb25seSBub24tcGFuaWMgKGllLCBmdW5jdGlvbmFsKSB0ZXN0cwogICAgIC0taW5jbHVkZSA8SU5DTFVERV9QQVRIPjogQWRkaXRpb25hbCBkaXJlY3RvcnkgdG8gYmUgaW5jbHVkZWQgaW50byBjb21waWxlciBzZWFyY2ggcGF0aC4gUHJvdmlkZSAtLWluY2x1ZGUgPHBhdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBwYXRoIHBvaW50aW5nIHRvIGxvY2F0aW9uIG9mIFBTQSBkZWZpbmVkIGhlYWRlciBmaWxlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3BlY2lmeSBtdWx0aXBsZSBzb3VyY2UgbG9jYXRpb25zIHVzaW5nIC0taW5jbHVkZSBvcHRpb24uCkBAIC0xMTgsNiArMTI5LDkgQEAKICAgICAgICAtLWFyY2hpdmVfdGVzdHMgKQogICAgICAgICAgICAgICAgICAgZXhwb3J0IFRFU1RfQ09NQklORV9BUkNISVZFPTEKICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgLS1pbmNsdWRlX3BhbmljX3Rlc3RzICkKKyAgICAgICAgICAgICAgICAgIGV4cG9ydCBJTkNMVURFX1BBTklDX1RFU1RTPTEKKyAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgLS1pbmNsdWRlICkgIHNoaWZ0CiAgICAgICAgICAgICAgICAgICBleHBvcnQgSU5DTFVERT0iJElOQ0xVREUgLUkgJDEvIgogICAgICAgICAgICAgICAgICAgSU5DTFVERV9QQVRIUz0oIiR7SU5DTFVERV9QQVRIU1tAXX0iICQxKQpAQCAtMTM0LDcgKzE0OCw3IEBACiAgICAgICAgIHNoaWZ0CiBkb25lCiAKLWVjaG8gIj4+Pj4gUHJvY2Vzc2luZyBpbnB1dHMuLi4iCitlY2hvICItLS0tLS0tLS0tUHJvY2VzcyBpbnB1dCBhcmd1bWVudHMtIHN0YXJ0LS0tLS0tLS0tLS0tLSIKIGlmIFsgLXogIiRTT1VSQ0UiIF0KIHRoZW4KICAgIGV4cG9ydCBTT1VSQ0U9Li8KQEAgLTE3OSw2ICsxOTMsOCBAQAogUFNBX1BST1RFQ1RFRF9TVE9SQUdFX0lNUExFTUVOVEVEPWBncmVwIC1jICJeICpQU0FfUFJPVEVDVEVEX1NUT1JBR0VfSU1QTEVNRU5URURccyo6PVxzKjEiICRQTEFURk9STV9NQUtFRklMRWAKIFBTQV9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQ9YGdyZXAgLWMgIl4gKlBTQV9JTlRFUk5BTF9UUlVTVEVEX1NUT1JBR0VfSU1QTEVNRU5URURccyo6PVxzKjEiICRQTEFURk9STV9NQUtFRklMRWAKIFBTQV9JTklUSUFMX0FUVEVTVEFUSU9OX0lNUExFTUVOVEVEPWBncmVwIC1jICJeICpQU0FfSU5JVElBTF9BVFRFU1RBVElPTl9JTVBMRU1FTlRFRFxzKjo9XHMqMSIgJFBMQVRGT1JNX01BS0VGSUxFYAorV0FUQ0hET0dfQVZBSUxBQkxFPWBncmVwIC1jICJeICp3YXRjaGRvZy5udW1ccyo9XHMqMVxzKjsiICRTT1VSQ0UvcGxhdGZvcm0vdGFyZ2V0cy8kVEFSR0VUL3RhcmdldC5jZmdgCitTUF9IRUFQX01FTV9TVVBQPWBncmVwIC1jICJeICpkdXQuMC5zcF9oZWFwX21lbV9zdXBwXHMqPVxzKkFWQUlMQUJMRVxzKjsiICRTT1VSQ0UvcGxhdGZvcm0vdGFyZ2V0cy8kVEFSR0VUL3RhcmdldC5jZmdgCiAKICMgQ2hlY2sgUFNBX0lQQ19JTVBMRU1FTlRFRCB2YWxpZGl0eQogaWYgWyAkU1VJVEUgPT0gImlwYyIgXSAmJiBbICRQU0FfSVBDX0lNUExFTUVOVEVEID09ICIwIiBdCkBAIC0yMzgsNiArMjU0LDE0IEBACiAgICAgICAgICAgICB0aGVuCiAgICAgICAgICAgICAgICAgZXhwb3J0IFNFUlZJQ0VfRklMRV9GT1VORD0xCiAgICAgICAgICAgICBmaQorICAgICAgICAgICAgaWYgWyAtZiAiJHBhdGgvcHNhX21hbmlmZXN0L3NpZC5oIiBdICYmIFsgLWYgIiRwYXRoL3BzYV9tYW5pZmVzdC9waWQuaCIgXQorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIGV4cG9ydCBNQU5JRkVTVF9PVVRfRklMRV9GT1VORD0xCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgaWYgWyAtZiAiJHBhdGgvcHNhL2xpZmVjeWNsZS5oIiBdCisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgZXhwb3J0IExJRkVDWUNMRV9GSUxFX0ZPVU5EPTEKKyAgICAgICAgICAgIGZpCiAgICAgICAgIGRvbmUKICAgICAgICAgaWYgWyAkQ0xJRU5UX0ZJTEVfRk9VTkQgPT0gICIwIiBdCiAgICAgICAgIHRoZW4KQEAgLTI1MSw2ICsyNzUsMTggQEAKICAgICAgICAgICAgIGVjaG8gIiRJUENfSEVBREVSX0ZJTEVfUkVRIgogICAgICAgICAgICAgZXhpdCAxCiAgICAgICAgIGZpCisgICAgICAgIGlmIFsgJE1BTklGRVNUX09VVF9GSUxFX0ZPVU5EID09ICIwIiBdCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIGVjaG8gIkNvdWxkbid0IGZpbmQgcHNhX21hbmlmZXN0L3NpZC5oIG9yIHBzYV9tYW5pZmVzdC9waWQuaCBmaWxlIGluIHBhdGhzOiAke0lOQ0xVREVfUEFUSFNbQF19IgorICAgICAgICAgICAgZWNobyAiJElQQ19IRUFERVJfRklMRV9SRVEiCisgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAkTElGRUNZQ0xFX0ZJTEVfRk9VTkQgPT0gICIwIiBdCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIGVjaG8gIkNvdWxkbid0IGZpbmQgcHNhL2xpZmVjeWNsZS5oIGZpbGUgaW4gcGF0aHM6ICR7SU5DTFVERV9QQVRIU1tAXX0iCisgICAgICAgICAgICBlY2hvICIkSVBDX0hFQURFUl9GSUxFX1JFUSIKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQogICAgIGZpCiBmaQogCkBAIC0zNDQsNyArMzgwLDEyIEBACiAgICAgICAgICAgICB0aGVuCiAgICAgICAgICAgICAgICAgZXhwb3J0IElOSVRJQUxfQVRURVNUQVRJT05fRklMRV9GT1VORD0xCiAgICAgICAgICAgICBmaQorICAgICAgICAgICAgaWYgWyAtZiAiJHBhdGgvcHNhL2NyeXB0by5oIiBdCisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgZXhwb3J0IENSWVBUT19GSUxFX0ZPVU5EPTEKKyAgICAgICAgICAgIGZpCiAgICAgICAgIGRvbmUKKwogICAgICAgICBpZiBbICRJTklUSUFMX0FUVEVTVEFUSU9OX0ZJTEVfRk9VTkQgPT0gICIwIiBdCiAgICAgICAgIHRoZW4KICAgICAgICAgICAgIGVjaG8gIkNvdWxkbid0IGZpbmQgcHNhL2luaXRpYWxfYXR0ZXN0YXRpb24uaCBmaWxlIGluIHBhdGhzOiAke0lOQ0xVREVfUEFUSFNbQF19IgpAQCAtMzUyLDEwICszOTMsMTYgQEAKICAgICAgICAgICAgIGV4aXQgMQogICAgICAgICBlbGlmIFsgJElOSVRJQUxfQVRURVNUQVRJT05fRklMRV9GT1VORCA9PSAgIjEiIF0KICAgICAgICAgdGhlbgorICAgICAgICAgICAgaWYgWyAkQ1JZUFRPX0ZJTEVfRk9VTkQgPT0gICIwIiBdCisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiQ291bGRuJ3QgZmluZCBwc2EvY3J5cHRvLmggZmlsZSBpbiBwYXRoczogJHtJTkNMVURFX1BBVEhTW0BdfSIKKyAgICAgICAgICAgICAgICBlY2hvICIkQ1JZUFRPX0hFQURFUl9GSUxFX1JFUSIKKyAgICAgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgICAgIGZpCiAgICAgICAgICAgICBpZiBbICEgLWQgIiRTT1VSQ0UvcGxhdGZvcm0vdGFyZ2V0cy8kVEFSR0VUL25zcGUvaW5pdGlhbF9hdHRlc3RhdGlvbi9leHQiIF0KICAgICAgICAgICAgIHRoZW4KICAgICAgICAgICAgICAgICBnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL2xhdXJlbmNlbHVuZGJsYWRlL1FDQk9SLmdpdCAkU09VUkNFL3BsYXRmb3JtL3RhcmdldHMvJFRBUkdFVC9uc3BlL2luaXRpYWxfYXR0ZXN0YXRpb24vZXh0Ci0gICAgICAgICAgICAgICAgY2QgJFNPVVJDRS9wbGF0Zm9ybS90YXJnZXRzLyRUQVJHRVQvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL2V4dDsgZ2l0IGNoZWNrb3V0IDAxMTY4ZWYzZjIwZTgxZDVkYjFlYmQwY2ZhOWE3MDA1NWVlNWIxNTUgOyBjZCAtCisgICAgICAgICAgICAgICAgY2QgJFNPVVJDRS9wbGF0Zm9ybS90YXJnZXRzLyRUQVJHRVQvbnNwZS9pbml0aWFsX2F0dGVzdGF0aW9uL2V4dDsgZ2l0IGNoZWNrb3V0IGRhNTMyMjdkYjE0ODhkZGUwOTUyYmRmZjY2YzNkOTA0ZGNlMjcwYjMgOyBjZCAtCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZWNobyAiUUNCT1IgbGlicmFyeSBhbHJlYWR5IGNsb25lZCIKICAgICAgICAgICAgIGZpCkBAIC0zNjMsNyArNDEwLDYgQEAKICAgICBmaQogZmkKIAotCiBpZiBbIC16ICIkVE9PTENIQUlOIiBdCiB0aGVuCiAgICBleHBvcnQgVE9PTENIQUlOPUdOVUFSTQpAQCAtNDExLDkgKzQ1NywyMyBAQAogICAgICAgICBleGl0IDEKICAgICBmaQogZWxzZQotICAgIGV4cG9ydCBWRVJCT1NFPTQKKyAgICBleHBvcnQgVkVSQk9TRT0zCiBmaQogCitpZiBbICRJTkNMVURFX1BBTklDX1RFU1RTID09ICIxIiBdICYmIFsgJFdBVENIRE9HX0FWQUlMQUJMRSA9PSAiMCIgXQordGhlbgorICAgZWNobyAiCitXYXJuaW5nOiBZb3UgaGF2ZSBzZXQgd2F0Y2hkb2cubnVtIHRvIDAgaW4gJFNPVVJDRS9wbGF0Zm9ybS90YXJnZXRzLyRUQVJHRVQvdGFyZ2V0LmNmZworTm90ZSAtIFRvIHRlc3QgUFNBIEFQSXMgcGFuaWMgY29uZGl0aW9ucywgdGVzdCBoYXJuZXNzIG1heSByZXF1aXJlIHRvIGFjY2VzcyB3YXRjaGRvZyB0aW1lcgordG8gcmVjb3ZlciBmcm9tIHBhbmljIGFuZCB0byBiZSBhYmxlIHRvIGNvbnRpbnVlIHdpdGggbmV4dCB0ZXN0LgorSWdub3JlIHRoaXMgd2FybmluZyBpZiBzeXN0ZW0gdW5kZXIgdGVzdCBoYXMgY2FwYWJpbGl0eSB0byByZXNldCB0aGUgc3lzdGVtCit3aGVuIGl0IGVuY291bnRlcnMgcGFuaWMgY29uZGl0aW9uLgorIgorZmkKKworZWNobyAiLS0tLS0tLS0tLVByb2Nlc3MgaW5wdXQgYXJndW1lbnRzLSBjb21wbGV0ZS0tLS0tLS0tLS0tLS0iCitlY2hvICIiCisKIE1BS0VfT1BUSU9OUz0iIFNPVVJDRT0kU09VUkNFICIKIE1BS0VfT1BUSU9OUys9IiBCVUlMRD0kQlVJTEQgIgogTUFLRV9PUFRJT05TKz0iIFRBUkdFVD0kVEFSR0VUICIKQEAgLTQyMiw2ICs0ODIsOSBAQAogTUFLRV9PUFRJT05TKz0iIENQVV9BUkNIPSRDUFVfQVJDSCAiCiBNQUtFX09QVElPTlMrPSIgVkVSQk9TRT0kVkVSQk9TRSAiCiBNQUtFX09QVElPTlMrPSIgVEVTVF9DT01CSU5FX0FSQ0hJVkU9JFRFU1RfQ09NQklORV9BUkNISVZFICIKK01BS0VfT1BUSU9OUys9IiBJTkNMVURFX1BBTklDX1RFU1RTPSRJTkNMVURFX1BBTklDX1RFU1RTICIKK01BS0VfT1BUSU9OUys9IiBXQVRDSERPR19BVkFJTEFCTEU9JFdBVENIRE9HX0FWQUlMQUJMRSAiCitNQUtFX09QVElPTlMrPSIgU1BfSEVBUF9NRU1fU1VQUD0kU1BfSEVBUF9NRU1fU1VQUCAiCiBNQUtFX09QVElPTlMrPSIgUFNBX0lQQ19JTVBMRU1FTlRFRD0kUFNBX0lQQ19JTVBMRU1FTlRFRCAiCiBNQUtFX09QVElPTlMrPSIgUFNBX0NSWVBUT19JTVBMRU1FTlRFRD0kUFNBX0NSWVBUT19JTVBMRU1FTlRFRCAiCiBNQUtFX09QVElPTlMrPSIgUFNBX1BST1RFQ1RFRF9TVE9SQUdFX0lNUExFTUVOVEVEPSRQU0FfUFJPVEVDVEVEX1NUT1JBR0VfSU1QTEVNRU5URUQgIgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3Rvb2xzL3NjcmlwdHMvdGFyZ2V0Q29uZmlnR2VuLnBsIGIvYXBpLXRlc3RzL3Rvb2xzL3NjcmlwdHMvdGFyZ2V0Q29uZmlnR2VuLnBsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2MDJkZTk5Li4wMDAwMDAwCi0tLSBhL2FwaS10ZXN0cy90b29scy9zY3JpcHRzL3RhcmdldENvbmZpZ0dlbi5wbAorKysgL2Rldi9udWxsCkBAIC0xLDIzOCArMCwwIEBACi0jIS91c3IvYmluL2VudiBwZXJsCi0jLyoqIEBmaWxlCi0jICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAotIyAqCi0jICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIyAqCi0jICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIyAqCi0jICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIyoqLwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBVU0FHRToKLSMgMSkgcGVybCA8dGhpc19zY3JpcHQ+IDx0YXJnZXRDb25maWdfZmlsZT4KLSMgMikgZ2NjIDxnZW5lcmF0ZWRfQ19maWxlPiAtbyA8ZXhlY3V0YWJsZV9maWxlPgotIyAzKSAuLzxleGVjdXRhYmxlX2ZpbGU+Ci0jIDQpIFJlc3VsdGluZyBvdXRwdXQgZmlsZSBpcyB0YXJnZXQuaGV4Ci0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRISVMgU0NSSVBUIDoKLSMgMSkgUmVhZHMgdGhlIHRhcmdldENvbmZpZy5jZmcgZmlsZSB3cml0dGVuIGluIHByZS1kZWZpbmVkIGZvcm1hdC4KLSMgMikgKiBHZW5lcmF0ZXMgYSBDIGZpbGUgYmFzZWQgb24gdGFyZ2V0Q29uZmlnLCBjb21wbGV0ZSB3aXRoIGFsbAotIyAgICB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgYW5kIEMgc3ludGF4IGZvcm1hdHRpbmcuCi0jICAgICogSXQgd2lsbCAjaW5jbHVkZSB2YWxfdGFyZ2V0LmggaGVhZGVyIGZpbGUgd2hpY2ggY29udGFpbnMKLSMgICAgdGVtcGxhdGUgaW5mbyBhYm91dCBlYWNoIGRldmljZSBkZXNjcmliZWQgaW4gdGFyZ2V0Q29uZmlnLgotIyAgICAqIFRoaXMgaGVhZGVyIGZpbGUgaXMgYWxzbyB1c2VkIGJ5IHRlc3QgY29kZSB0byB1bnBhY2sgdGhlCi0jICAgIHJlc3VsdGluZyBoZXggZmlsZS4KLSMgMykgVGhlIGF1dG9nZW5lcmF0ZWQgQyBmaWxlIHdpbGwgdGhlbiBiZSBjb21waWxlZCBhbmQgdGhlIHJlc3VsdGluZwotIyAgICBleGVjdXRhYmxlIHJ1biB0byBnZW5lcmF0ZSB0YXJnZXQuaGV4IGZpbGU6IHdoaWNoIGlzIHRoZSBwYWNrZWQKLSMgICAgb3V0cHV0IG9mIHRoZSB0YXJnZXRDb25maWcuY2ZnIHBhcmFtZXRlcnMuCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIE5PVEU6IE9ubHkgQy1zdHlsZSBzaW5nbGUgbGluZSBjb21tZW50aW5nIGlzIHBlcm1pdHRlZCBpbnNpZGUgdGFyZ2V0Q29uZmlnLmNmZwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1wcmludCAiXG4+Pj4+IEdlbmVyYXRpbmcgdGFyZ2V0Q29uZmlnIGRhdGEgYmFzZS4uLiBcbiI7Ci0kc291cmNlPSRBUkdWWzBdOwotJGJ1aWxkPSRBUkdWWzFdOwotJHRhcmdldD0kQVJHVlsyXTsKLSR0YXJnZXRDb25maWdQYXRoID0gIiRzb3VyY2UvcGxhdGZvcm0vdGFyZ2V0cy8kdGFyZ2V0L3RhcmdldC5jZmciOwotJGZpbmFsX291dHB1dCA9ICIkYnVpbGQvcGxhdGZvcm0vJHRhcmdldC90YXJnZXRfZGF0YWJhc2UiOwotJG91dHB1dF9jID0gIiRidWlsZC9wbGF0Zm9ybS8kdGFyZ2V0L3RhcmdldENvbmZpZ0dlbi5jIjsKLSRpbnB1dF9oID0gIiRzb3VyY2UvdmFsL2NvbW1vbi92YWxfdGFyZ2V0LmgiOwotCi0kZmluYWxfb3V0cHV0X2ZpbGUgPSB1bmRlZjsKLWlmKCRmaW5hbF9vdXRwdXQgPX4gLyhbMC05YS16QS1aX10rKSQvKSB7Ci0JJGZpbmFsX291dHB1dF9maWxlID0gJDE7Ci19Ci0KLUB1bmlxdWVfZGV2aWNlcyA9IHVuZGVmOwotCi1zdWIgdW5pcSB7Ci0gICAgbXkgJXNlZW47Ci0gICAgZ3JlcCAhJHNlZW57JF99KyssIEBfOwotfQotCi1vcGVuKElOLCAkdGFyZ2V0Q29uZmlnUGF0aCkgb3IgZGllICJVbmFibGUgdG8gb3BlbiAkdGFyZ2V0Q29uZmlnUGF0aCAkISI7Ci1vcGVuKE9VVCwgJz4nLCAkb3V0cHV0X2MpIG9yIGRpZSAiVW5hYmxlIHRvIG9wZW46ICQhIjsKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBPcGVuIGhlYWRlciBmaWxlIGFuZCBnbyB0aHJvdWdoIGVudW0gZGVmaW5pdGlvbiB0byBmaW5kIGdyb3VwIG9mCi0jIGVhY2ggY29tcG9uZW50OyByYXRoZXIgdGhhbiBtYWtpbmcgcGFydG5lciBkbyBpdC4gU3RvcmUgaW4gYSBoYXNoLgotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotb3BlbihJTjAsICRpbnB1dF9oKSBvciBkaWUgIlVuYWJsZSB0byBvcGVuOiAkISI7Ci1teSAlY29tcF9ncm91cHM7Ci13aGlsZSg8SU4wPikgewotICAgIGlmKCRfID1+IC9DT01QT05FTlRfR1JPVVBJTkcvKSB7Ci0Jd2hpbGUoJG5leHRsaW5lICF+IC9cfS8pIHsKLQkgICAgJG5leHRsaW5lID0gPElOMD47Ci0JICAgICNwcmludCAiJG5leHRsaW5lIjsKLQkgICAgaWYoJG5leHRsaW5lID1+IC8oXFMrKShccyopXD0oXHMqKUdST1VQXyhbMC05YS16QS1aX10rKSgsKikvKSB7Ci0JCSRjb21wX2dyb3Vwc3skMX0gPSAkNDsKLQkgICAgfQotCX0KLSAgICB9Ci19Ci1jbG9zZSBJTjA7Ci0jcHJpbnQga2V5cyAlY29tcF9ncm91cHMsICJcbiI7Ci0jcHJpbnQgdmFsdWVzICVjb21wX2dyb3VwcywgIlxuIjsKLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotcHJpbnQgT1VUICcjaW5jbHVkZSAidmFsX3RhcmdldC5oIicsIlxuIjsKLXByaW50IE9VVCAnI2luY2x1ZGUgPHN0ZGlvLmg+JywiXG5cbiI7Ci0KLXByaW50IE9VVCAiaW50IG1haW5cKHZvaWRcKSBce1xuIjsKLQotd2hpbGUoPElOPikgewotICAgIGlmKCRfICF+IC9eXC8vKSB7IyBleGNsdWRlIGNvbW1lbnRlZCBsaW5lcwotCi0gICAgaWYoJF8gPX4gLyhcUyspXC5udW0oXHMqKVw9KFxzKikoXGQrKShccyopXDsvKSB7Ci0JcHJpbnQgT1VUIGxjKCRjb21wX2dyb3Vwc3t1YygkMSl9KSwiX2Rlc2NfdCAkMVxbJDRcXTtcbiI7Ci0JcHJpbnQgT1VUICJpbnQgJDEiLCJfbnVtX2luc3RhbmNlcyBcPSAkNFw7XG4iOwotCi0JIyBGb3IgZWFjaCBpbnN0YW5jZSBvZiB0aGlzIGRldmljZQotCWZvciAoJGNvdW50ID0gMDsgJGNvdW50IDwgJDQ7ICRjb3VudCsrKSB7Ci0JICAgIHByaW50IE9VVCAiJDFcWyRjb3VudFxdXC5jZmdfdHlwZVwuY2ZnX2lkIFw9IFwoR1JPVVBfIiwkY29tcF9ncm91cHN7dWMoJDEpfSwiIDw8IDI0XCkgXCsgXCgiLCRjb21wX2dyb3Vwc3t1YygkMSl9LCJfIix1YygkMSksIiA8PCAxNlwpIFwrICRjb3VudFw7XG4iOwotCSAgICBwcmludCBPVVQgIiQxXFskY291bnRcXVwuY2ZnX3R5cGVcLnNpemUgXD0gc2l6ZW9mXCgkMVwpXC8kMSIsIl9udW1faW5zdGFuY2VzXDtcbiI7Ci0JICAgIHByaW50IE9VVCAiJDFcWyRjb3VudFxdXC5jZmdfdHlwZVwuc2l6ZSBcfFw9ICQxIiwiX251bV9pbnN0YW5jZXMgPDwgMjRcO1xuIjsKLQl9Ci0KLQlwdXNoKEB1bmlxdWVfZGV2aWNlcywgJDEpOwotCXB1c2goQHVuaXF1ZV9ncm91cHMsICRjb21wX2dyb3Vwc3t1YygkMSl9KTsKLSAgICB9Ci0gICAgI2Vsc2lmKCRfID1+IC8oXFMrKVwuKFxkKylcLihcUyspKFxzKilcPShccyopKFxTKykoXHMqKVw7LykgewotCWVsc2lmKCRfID1+IC8oXFMrKVwuKFxkKylcLihcUyspKFxzKilcPShccyopKC4rKVw7LykgewotCXByaW50IE9VVCAiJDFcWyQyXF1cLiQzIFw9ICQ2XDtcbiI7Ci0gICAgfQotICAgIGVsc2UgewotCXByaW50IE9VVCAkXzsKLSAgICB9Ci0KLSAgICB9Ci19Ci0KLSMgUmVtb3ZlIGVtcHR5IGVsZW1lbnRzIGZyb20gYXJyYXkKLUB1bmlxdWVfZGV2aWNlcyA9IGdyZXAgeyAkXyBuZSAnJyB9IEB1bmlxdWVfZGV2aWNlczsKLSMgUmVtb3ZlIGR1cGxpY2F0ZSBncm91cHMKLUB1bmlxdWVfZ3JvdXBzID0gdW5pcSBAdW5pcXVlX2dyb3VwczsKLUB1bmlxdWVfZ3JvdXBzID0gZ3JlcCB7ICRfIG5lICcnIH0gQHVuaXF1ZV9ncm91cHM7Ci0KLSNwcmludCAiQHVuaXF1ZV9kZXZpY2VzXG4iOwotI3ByaW50ICJAdW5pcXVlX2dyb3Vwc1xuXG4iOwotCi1mb3JlYWNoICR0aGlzZ3JvdXAgKEB1bmlxdWVfZ3JvdXBzKSB7Ci0gICAgcHJpbnQgIlxuR1JPVVAgJHRoaXNncm91cCBcbiI7Ci0gICAgcHJpbnQgT1VUIGxjKCR0aGlzZ3JvdXApLCJfaGRyX3QgZ3JvdXBfIixsYygkdGhpc2dyb3VwKSwiXDtcbiI7Ci0gICAgcHJpbnQgT1VUICJpbnQgZ3JvdXBfIixsYygkdGhpc2dyb3VwKSwiX3NpemUgXD0gc2l6ZW9mKGdyb3VwXyIsbGMoJHRoaXNncm91cCksIlwpXDtcbiI7Ci0gICAgcHJpbnQgT1VUICJpbnQgZ3JvdXBfIixsYygkdGhpc2dyb3VwKSwiX2NvdW50IFw9IDBcO1xuIjsKLQotICAgIHByaW50IE9VVCAiZ3JvdXBfIixsYygkdGhpc2dyb3VwKSwiXC5jZmdfdHlwZVwuY2ZnX2lkIFw9IFwoR1JPVVBfIiwkdGhpc2dyb3VwLCIgPDwgMjRcKVw7XG4iOwotCi0gICAgZm9yZWFjaCAkdGhpc2RldmljZSAoQHVuaXF1ZV9kZXZpY2VzKSB7Ci0JaWYoJGNvbXBfZ3JvdXBze3VjKCR0aGlzZGV2aWNlKX0gZXEgJHRoaXNncm91cCkgewotCSAgICBwcmludCAiREVWSUNFICR0aGlzZGV2aWNlIFxuIjsKLQkgICAgcHJpbnQgT1VUICJncm91cF8iLGxjKCR0aGlzZ3JvdXApLCJfc2l6ZSBcPSBncm91cF8iLGxjKCR0aGlzZ3JvdXApLCJfc2l6ZSBcKyBzaXplb2ZcKCR0aGlzZGV2aWNlXClcO1xuIjsKLQkgICAgcHJpbnQgT1VUICJncm91cF8iLGxjKCR0aGlzZ3JvdXApLCJfY291bnQgXD0gZ3JvdXBfIixsYygkdGhpc2dyb3VwKSwiX2NvdW50IFwrICR0aGlzZGV2aWNlIiwiX251bV9pbnN0YW5jZXNcO1xuIjsKLQotCX0KLSAgICB9Ci0gICAgcHJpbnQgT1VUICJncm91cF8iLGxjKCR0aGlzZ3JvdXApLCJcLmNmZ190eXBlXC5zaXplIFw9IGdyb3VwXyIsbGMoJHRoaXNncm91cCksIl9zaXplXDtcbiI7Ci0gICAgcHJpbnQgT1VUICJncm91cF8iLGxjKCR0aGlzZ3JvdXApLCJcLm51bSBcPSBncm91cF8iLGxjKCR0aGlzZ3JvdXApLCJfY291bnRcO1xuIjsKLQotICAgIHByaW50IE9VVCAiXG4iOwotfQotCi1wcmludCBPVVQgIlxuIjsKLXByaW50IE9VVCAidWludDMyX3RcKiB3b3JkX3B0clw7XG4iOwotcHJpbnQgT1VUICJpbnQgYnl0ZV9ubyBcPSAwXDtcbiI7Ci0jcHJpbnQgT1VUICJpbnQgaW5zdGFuY2Vfbm8gXD0gMFw7XG4iOwotI3ByaW50IE9VVCAiaW50IGluc3RhbmNlX3NpemUgXD0gMFw7XG4iOwotI3ByaW50IE9VVCAiZGV2aWNlX3R5cGVfdCBkZXZpY2VfaWRcO1xuIjsKLXByaW50IE9VVCAiRklMRSBcKiBmcFw7XG4iOwotcHJpbnQgT1VUICJmcCBcPSBmb3BlblwoXCIiLCRmaW5hbF9vdXRwdXQsIlwuaFwiXCwgXCJ3XCJcKVw7XG5cbiI7Ci0KLSMgUHJpbnRpbmcgb3V0IG1haW4gaGVhZGVyIGluc2lkZSBoZXggZmlsZQotI3ByaW50IE9VVCAiZnByaW50ZlwoZnBcLCBcIiNpbmNsdWRlIFxcXCJwYWxfZnZwX2NvbmZpZ1wuaFxcXCJcXG5cXG5cIlwpXDtcbiI7Ci1wcmludCBPVVQgImZwcmludGZcKGZwXCwgXCIjaWZuZGVmICIsdWMoJGZpbmFsX291dHB1dF9maWxlKSwiXFxuXCJcKVw7XG4iOwotcHJpbnQgT1VUICJmcHJpbnRmXChmcFwsIFwiI2RlZmluZSAiLHVjKCRmaW5hbF9vdXRwdXRfZmlsZSksIlxcblxcblwiXClcO1xuIjsKLSNwcmludCBPVVQgImZwcmludGZcKGZwXCwgXCJfX2F0dHJpYnV0ZV9fXChcKHNlY3Rpb25cKFxcXCJcLnRhcmdldF9jb25maWdfbnNfZGF0YVxcXCJcKVwpXClcXG5cIlwpXDtcbiI7Ci1wcmludCBPVVQgImZwcmludGZcKGZwXCwgXCJjb25zdCB1aW50MzJfdFxcblwiXClcO1xuIjsKLXByaW50IE9VVCAiZnByaW50ZlwoZnBcLCBcInN0YXRpYyB0YXJnZXRfZGF0YWJhc2VbXSBcPSBce1xcblwiXClcO1xuIjsKLQotIyBwcmludCBPVVQgImZwcmludGZcKGZwXCwgXCIweFwlMDh4XCxcXG5cIlwsIFwiX0NGR1wiXClcO1xuIjsKLSMgcHJpbnQgT1VUICJmcHJpbnRmXChmcFwsIFwiMHhcJTA4eFwsXFxuXCJcLCBcIiBGVlBcIlwpXDtcbiI7Ci0jIHByaW50IE9VVCAiZnByaW50ZlwoZnBcLCBcIjB4XCUwOHhcLFxcblwiXCwgXCJfQ0ZHXCJcKVw7XG4iOwotIyBUQlNBX0NGRyBoZWFkZXIKLXByaW50IE9VVCAiZnByaW50ZlwoZnBcLCBcIjB4XCV4XCJcLCBcJ1RcJ1wpXDtcbiI7Ci1wcmludCBPVVQgImZwcmludGZcKGZwXCwgXCJcJXhcIlwsIFwnQlwnXClcO1xuIjsKLXByaW50IE9VVCAiZnByaW50ZlwoZnBcLCBcIlwleFwiXCwgXCdTXCdcKVw7XG4iOwotcHJpbnQgT1VUICJmcHJpbnRmXChmcFwsIFwiXCV4XCxcXG5cIlwsIFwnQVwnXClcO1xuIjsKLXByaW50IE9VVCAiZnByaW50ZlwoZnBcLCBcIjB4XCV4XCJcLCBcJ19cJ1wpXDtcbiI7Ci1wcmludCBPVVQgImZwcmludGZcKGZwXCwgXCJcJXhcIlwsIFwnQ1wnXClcO1xuIjsKLXByaW50IE9VVCAiZnByaW50ZlwoZnBcLCBcIlwleFwiXCwgXCdGXCdcKVw7XG4iOwotcHJpbnQgT1VUICJmcHJpbnRmXChmcFwsIFwiXCV4XCxcXG5cIlwsIFwnR1wnXClcO1xuIjsKLSMgRlZQX0NGRyBoZWFkZXIKLXByaW50IE9VVCAiZnByaW50ZlwoZnBcLCBcIjB4XCV4XCJcLCBcJyBcJ1wpXDtcbiI7Ci1wcmludCBPVVQgImZwcmludGZcKGZwXCwgXCJcJXhcIlwsIFwnRlwnXClcO1xuIjsKLXByaW50IE9VVCAiZnByaW50ZlwoZnBcLCBcIlwleFwiXCwgXCdWXCdcKVw7XG4iOwotcHJpbnQgT1VUICJmcHJpbnRmXChmcFwsIFwiXCV4XCxcXG5cIlwsIFwnUFwnXClcO1xuIjsKLXByaW50IE9VVCAiZnByaW50ZlwoZnBcLCBcIjB4XCV4XCJcLCBcJ19cJ1wpXDtcbiI7Ci1wcmludCBPVVQgImZwcmludGZcKGZwXCwgXCJcJXhcIlwsIFwnQ1wnXClcO1xuIjsKLXByaW50IE9VVCAiZnByaW50ZlwoZnBcLCBcIlwleFwiXCwgXCdGXCdcKVw7XG4iOwotcHJpbnQgT1VUICJmcHJpbnRmXChmcFwsIFwiXCV4XCxcXG5cIlwsIFwnR1wnXClcO1xuIjsKLQotcHJpbnQgT1VUICJ1aW50MzJfdCB2ZXJzaW9uIFw9IDFcO1xuIjsKLXByaW50IE9VVCAiZnByaW50ZlwoZnBcLCBcIjB4XCUwOHhcLFxcblwiXCwgdmVyc2lvblwpXDtcbiI7Ci0jcHJpbnQgT1VUICJmd3JpdGVcKFwmdmVyc2lvblwsIDRcLCAxXCwgZnBcKVw7XG4iOwotcHJpbnQgT1VUICJ1aW50MzJfdCB0b3RhbF9zaXplIFw9IDBcO1xuIjsKLQotZm9yZWFjaCAkdGhpc2dyb3VwIChAdW5pcXVlX2dyb3VwcykgewotICAgIHByaW50IE9VVCAidG90YWxfc2l6ZSBcPSB0b3RhbF9zaXplIFwrIGdyb3VwXyIsbGMoJHRoaXNncm91cCksIl9zaXplXDtcbiI7Ci19Ci0jIGZvcmVhY2ggJHRoaXNkZXZpY2UgKEB1bmlxdWVfZGV2aWNlcykgewotIyAgICAgcHJpbnQgT1VUICJ0b3RhbF9zaXplIFw9IHRvdGFsX3NpemUgXCsgc2l6ZW9mXCgkdGhpc2RldmljZVwpIFwrIFwoOFwqICR0aGlzZGV2aWNlIiwiX251bV9pbnN0YW5jZXNcKVw7XG4iOwotIyB9Ci0jIEFkZCBtYWluIGhlYWRlciBzaXplCi1wcmludCBPVVQgInRvdGFsX3NpemUgXD0gdG90YWxfc2l6ZSBcKzggXCs4IFwrNCBcKzQgXCs0XDtcbiI7Ci0jcHJpbnQgT1VUICJmd3JpdGVcKFwmdG90YWxfc2l6ZVwsIDRcLCAxXCwgZnBcKVw7XG5cbiI7Ci1wcmludCBPVVQgImZwcmludGZcKGZwXCwgXCIweFwlMDh4XCxcXG5cIlwsIHRvdGFsX3NpemVcKVw7XG4iOwotCi0KLWZvcmVhY2ggJHRoaXNncm91cCAoQHVuaXF1ZV9ncm91cHMpIHsKLSAgICBwcmludCBPVVQgIndvcmRfcHRyIFw9IFwodWludDMyX3QgXCpcKVwmZ3JvdXBfIixsYygkdGhpc2dyb3VwKSwiXDtcbiI7Ci0gICAgcHJpbnQgT1VUICJmb3JcKGJ5dGVfbm9cPTBcOyBieXRlX25vXDxcc2l6ZW9mXChncm91cF8iLGxjKCR0aGlzZ3JvdXApLCJcKVw7IGJ5dGVfbm9cPWJ5dGVfbm9cKzRcKVx7XG4iOwotICAgICNwcmludCBPVVQgImZ3cml0ZVwod29yZF9wdHJcLCA0XCwgMVwsIGZwXClcO1xuIjsKLSAgICAjcHJpbnQgT1VUICJwcmludGZcKFwiXCUwOHhcLFxcblwiXCwgXCp3b3JkX3B0clwpXDtcbiI7Ci0gICAgcHJpbnQgT1VUICJmcHJpbnRmXChmcFwsIFwiMHhcJTA4eFwsXFxuXCJcLCBcKndvcmRfcHRyXClcO1xuIjsKLSAgICBwcmludCBPVVQgIndvcmRfcHRyXCtcK1w7XG4iOwotICAgIHByaW50IE9VVCAiXH1cbiI7Ci0KLSAgICBmb3JlYWNoICR0aGlzZGV2aWNlIChAdW5pcXVlX2RldmljZXMpIHsKLQlpZigkY29tcF9ncm91cHN7dWMoJHRoaXNkZXZpY2UpfSBlcSAkdGhpc2dyb3VwKSB7Ci0JICAgIHByaW50IE9VVCAiXHR3b3JkX3B0ciBcPSBcKHVpbnQzMl90IFwqXClcJiIsIiR0aGlzZGV2aWNlIiwiXFswXF1cO1xuIjsKLQkgICAgcHJpbnQgT1VUICJcdGZvclwoYnl0ZV9ub1w9MFw7IGJ5dGVfbm9cPFxzaXplb2ZcKCR0aGlzZGV2aWNlXClcOyBieXRlX25vXD1ieXRlX25vXCs0XClce1xuIjsKLQkgICAgI3ByaW50IE9VVCAiXHRmd3JpdGVcKHdvcmRfcHRyXCwgNFwsIDFcLCBmcFwpXDtcbiI7Ci0JICAgICNwcmludCBPVVQgIlx0cHJpbnRmXChcIlwlMDh4XCxcXG5cIlwsIFwqd29yZF9wdHJcKVw7XG4iOwotCSAgICBwcmludCBPVVQgIlx0ZnByaW50ZlwoZnBcLCBcIjB4XCUwOHhcLFxcblwiXCwgXCp3b3JkX3B0clwpXDtcbiI7Ci0JICAgIHByaW50IE9VVCAiXHR3b3JkX3B0clwrXCtcO1xuIjsKLQkgICAgcHJpbnQgT1VUICJcdFx9XG4iOwotCX0KLSAgICB9Ci19Ci1wcmludCBPVVQgImZwcmludGZcKGZwXCwgXCIweFwlMDh4XFxuXCJcLCAweGZmZmZmZmZmXClcO1xuIjsKLXByaW50IE9VVCAiZnByaW50ZlwoZnBcLCBcIlx9XDtcXG5cXG5cIlwpXDtcbiI7Ci1wcmludCBPVVQgImZwcmludGZcKGZwXCwgXCIjZW5kaWYgXFxuXCJcKVw7XG4iOwotCi0KLXByaW50IE9VVCAiXG5yZXR1cm4gMDtcfVwvXC9pbnQgbWFpbiI7Ci0KLSNnZW5lcmF0ZSB0YXJnZXRfZGF0YWJhc2UuaCBmaWxlCi1wcmludCAiZ2NjIC1EX19hZGRyX3RfZGVmaW5lZCAtRFRBUkdFVF9DRkdfQlVJTEQgJG91dHB1dF9jIC1vICRidWlsZC9wbGF0Zm9ybS8kdGFyZ2V0L3RhcmdldENvbmZpZ0dlbiAtSSRzb3VyY2UvdmFsL25zcGUgLUkkc291cmNlL3ZhbC9jb21tb24gLUkkc291cmNlL3BsYXRmb3JtL3RhcmdldHMvJHRhcmdldC9uc3BlL2NvbW1vblxuIjsKLXN5c3RlbSgiZ2NjIC1EX19hZGRyX3RfZGVmaW5lZCAtRFRBUkdFVF9DRkdfQlVJTEQgJG91dHB1dF9jIC1vICRidWlsZC9wbGF0Zm9ybS8kdGFyZ2V0L3RhcmdldENvbmZpZ0dlbiAtSSRzb3VyY2UvdmFsL25zcGUgLUkkc291cmNlL3ZhbC9jb21tb24gLUkkc291cmNlL3BsYXRmb3JtL3RhcmdldHMvJHRhcmdldC9uc3BlL2NvbW1vbiIpICYmIGRpZSAoIkZhaWxlZCB0byBjb21waWxlIHRhcmdldENvbmZpZ0dlbi5jIFxuIik7Ci1wcmludCAiLi8kYnVpbGQvcGxhdGZvcm0vJHRhcmdldC90YXJnZXRDb25maWdHZW5cbiI7Ci1zeXN0ZW0oIi4vJGJ1aWxkL3BsYXRmb3JtLyR0YXJnZXQvdGFyZ2V0Q29uZmlnR2VuICIpICYmIGRpZSAoIkZhaWxlZCB0byBnZW5lcmF0ZSB0YXJnZXRDb25maWcgZGF0YSBiYXNlIFxuIik7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvdG9vbHMvc2NyaXB0cy90YXJnZXRDb25maWdHZW4ucHkgYi9hcGktdGVzdHMvdG9vbHMvc2NyaXB0cy90YXJnZXRDb25maWdHZW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ0MmY3NAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS10ZXN0cy90b29scy9zY3JpcHRzL3RhcmdldENvbmZpZ0dlbi5weQpAQCAtMCwwICsxLDE4MyBAQAorIyEvdXNyL2Jpbi9weXRob24KKyMvKiogQGZpbGUKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAorIyAqCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAqCisjICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAqCisjICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyoqLworCitpbXBvcnQgc3lzCisKK2lmIChsZW4oc3lzLmFyZ3YpICE9IDgpOgorCXByaW50KCJcblBsZWFzZSBwcm92aWRlIGZvbGxvd2luZyBpbnB1dHMiKQorCXByaW50KCJcbmFyZzEgOiB0YXJnZXQgbmFtZSIpCisJcHJpbnQoIlxuYXJnMiA6IHZhbF90YXJnZXQuaCIpCisJcHJpbnQoIlxuYXJnMyA6IHRic2FfdGd0LmNmZyIpCisJcHJpbnQoIlxuYXJnNCA6IGludGVybWVkaWF0ZSBzb3VyY2UgZmlsZSIpCisJcHJpbnQoIlxuYXJnNSA6IG91dHB1dCBkYXRhYmFzZSBmaWxlXG4iKQorCXByaW50KCJcbmFyZzYgOiBuYW1lIGZvciB0YWJsZVxuIikKKwlwcmludCgiXG5hcmc3IDogc2VjdGlvbiBuYW1lIGZvciBkYXRhYmFzZSB0YWJsZVxuIikKKwlzeXMuZXhpdCgxKQorCit0YXJnZXQgICAgICAgPSBzeXMuYXJndlsxXQoraW5fdmFsX3RndCAgID0gc3lzLmFyZ3ZbMl0KK2luX3Ric2FfdGd0ICA9IHN5cy5hcmd2WzNdCitvdXRfc291cmNlICAgPSBzeXMuYXJndls0XQorb3V0X2RhdGFiYXNlID0gc3lzLmFyZ3ZbNV0KK3RhYmxlX25hbWUgICA9IHN5cy5hcmd2WzZdCitzZWN0aW9uX25hbWUgPSBzeXMuYXJndls3XQorCittaW5vcl9tYWpvcl9tYXAgPSB7fQordW5pcXVlX21ham9yX2dyb3VwcyA9IFtdCit1bmlxdWVfbWlub3JfY29tcG9uZW50cyA9IFtdCisKK2RlZiBnZXRfbWlub3JfbWFqb3JfbWFwKCk6CisJIiIiIFRoaXMgbWV0aG9kIHBvcHVsYXRlcyB0aGUgZGljdGlvbmFyeSB3aGljaCBtYXBzIGJldHdlZW4gZXZlcnkgYXZhaWxhYmxlIG1pbm9yIGNvbXBvbmVudCB0byB0aGVpciBtYWpvciBncm91cCAiIiIKKwl0cnk6CisJCXdpdGggb3Blbihpbl92YWxfdGd0LCBtb2RlPSJyIikgYXMgZjoKKwkJCWZvciBsaW5lIGluIGY6CisJCQkJaWYgIkdST1VQXyIgaW4gbGluZToKKwkJCQkJdGVtcF9saXN0ID0gbGluZS5zcGxpdCgpCisJCQkJCWlmICI9IiBpbiB0ZW1wX2xpc3RbMV0gYW5kICJHUk9VUF8iIGluIHRlbXBfbGlzdFsyXToKKwkJCQkJCW1pbm9yX21ham9yX21hcC51cGRhdGUoe3RlbXBfbGlzdFswXTp0ZW1wX2xpc3RbMl1bNjp0ZW1wX2xpc3RbMl0uZmluZCgnLCcpXX0pCisJCQkJCQlpZiBtaW5vcl9tYWpvcl9tYXBbdGVtcF9saXN0WzBdXSBub3QgaW4gdW5pcXVlX21ham9yX2dyb3VwczoKKwkJCQkJCQl1bmlxdWVfbWFqb3JfZ3JvdXBzLmFwcGVuZChtaW5vcl9tYWpvcl9tYXBbdGVtcF9saXN0WzBdXSkKKwlleGNlcHQ6CisJCXByaW50KCJDYW5ub3Qgb3BlbiAlcyIgJWluX3ZhbF90Z3QpCisKK2RlZiBnZW5lcmF0ZV9zb3VyY2UoKToKKwkiIiIiIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyB0aGUgc291cmNlIGZpbGUgd2hpY2ggZ2V0cyBjb21waWxlZCBvbiBob3N0IG1hY2hpbmUuCisJCVRoZSBjb21waWxlZCBvdXRwdXQgdGhlbiBnZW5lcmF0ZXMgdGhlIGRhdGFiYXNlIGZpbGUgZm9yIGEgZ2l2ZW4gdGFyZ2V0ICIiIgorCXRyeToKKwkJd2l0aCBvcGVuKG91dF9zb3VyY2UsIG1vZGU9ImEiKSBhcyBvX2Y6CisJCQlvX2Yud3JpdGUoIiNpbmNsdWRlIDxzdGRpby5oPlxuIikKKwkJCW9fZi53cml0ZSgiI2luY2x1ZGUgXCJ2YWxfdGFyZ2V0LmhcIlxuXG4iKQorCQkJb19mLndyaXRlKCJpbnQgbWFpbiAodm9pZClcbiIpCisJCQlvX2Yud3JpdGUoIntcbiIpCisJCQl0cnk6CisJCQkJd2l0aCBvcGVuKGluX3Ric2FfdGd0LCBtb2RlPSJyIikgYXMgaV9mOgorCQkJCQludW0gPSAnJworCQkJCQlmb3IgbGluZSBpbiBpX2Y6CisJCQkJCQlpZiAiLyIgaW4gbGluZVswOjFdOgorCQkJCQkJCSIiIiBJZ25vcmluZyB0aGUgY29tbWVudGVkIGxpbmVzICIiIgorCQkJCQkJCXBhc3MKKwkJCQkJCWVsaWYgKCIubnVtIiBpbiBsaW5lKSBhbmQgKGxpbmVbbGluZS5maW5kKCcuJykrMTpsaW5lLmZpbmQoJy4nKSs0XSA9PSAibnVtIik6CisJCQkJCQkJIiIiIFBpY2sgdGhlIGxpbmVzIHdoaWNoIHRlbGxzIHRoZSB0b3RhbCBpbnN0YW5jZXMgb2YgYSBjb21wb25lbnQgIiIiCisJCQkJCQkJbWlub3JfY29tcCA9IGxpbmVbOmxpbmUuZmluZCgnLicpXQorCQkJCQkJCW51bSAgICAgICAgPSAiIi5qb2luKGxpbmVbbGluZS5maW5kKCc9JykrMTpsaW5lLmZpbmQoJzsnKV0ucmVwbGFjZSgiICIsIiIpKQorCQkJCQkJCWlmIChpbnQobnVtKSkgIT0gMDoKKwkJCQkJCQkJb19mLndyaXRlKCJcdCVzX2Rlc2NfdCAlc1slc10gPSB7MH07XG4iICUobWlub3JfbWFqb3JfbWFwW21pbm9yX2NvbXAudXBwZXIoKV0ubG93ZXIoKSwgbWlub3JfY29tcCwgbnVtKSkKKwkJCQkJCQkJb19mLndyaXRlKCJcdGludCAlc19udW1faW5zdGFuY2VzID0gJXM7XG4iICUobWlub3JfY29tcCwgbnVtKSkKKwkJCQkJCQkJbnVtID0gaW50KG51bSkKKwkJCQkJCQkJZm9yIGluc3RhbmNlIGluIHJhbmdlKG51bSk6CisJCQkJCQkJCQlvX2Yud3JpdGUoIlx0JXNbJWRdLmNmZ190eXBlLmNmZ19pZCA9ICgoR1JPVVBfJXMgPDwgMjQpICsgKCVzXyVzIDw8IDE2KSArICVkKTtcbiIgXAorCQkJCQkJCQkJCSUobWlub3JfY29tcCwgaW5zdGFuY2UsIG1pbm9yX21ham9yX21hcFttaW5vcl9jb21wLnVwcGVyKCldLFwKKwkJCQkJCQkJCQkJbWlub3JfbWFqb3JfbWFwW21pbm9yX2NvbXAudXBwZXIoKV0sIG1pbm9yX2NvbXAudXBwZXIoKSwgaW5zdGFuY2UpKQorCQkJCQkJCQkJb19mLndyaXRlKCJcdCVzWyVkXS5jZmdfdHlwZS5zaXplICAgPSBzaXplb2YoJXMpLyVzX251bV9pbnN0YW5jZXM7XG4iICUobWlub3JfY29tcCwgaW5zdGFuY2UsIG1pbm9yX2NvbXAsIG1pbm9yX2NvbXApKQorCQkJCQkJCQkJb19mLndyaXRlKCJcdCVzWyVkXS5jZmdfdHlwZS5zaXplICB8PSAoJXNfbnVtX2luc3RhbmNlcyA8PCAyNCk7XG4iICUobWlub3JfY29tcCwgaW5zdGFuY2UsIG1pbm9yX2NvbXApKQorCQkJCQkJCQl1bmlxdWVfbWlub3JfY29tcG9uZW50cy5hcHBlbmQobWlub3JfY29tcC51cHBlcigpKQorCQkJCQkJZWxpZiAoIj0iIGluIGxpbmUpIGFuZCAoIjsiIGluIGxpbmUpIGFuZCAoaW50KG51bSkgIT0gMCk6CisJCQkJCQkJIiIiIFBpY2sgdGhlIGxpbmVzIHdoaWNoIHRlbGxzIHRoZSBjb21wb25lbnQgZGV0YWlscyAiIiIKKwkJCQkJCQlwZXJpb2RfMSA9IGxpbmUuZmluZCgnLicpCisJCQkJCQkJcGVyaW9kXzIgPSBwZXJpb2RfMSArIGxpbmVbcGVyaW9kXzErMTpdLmZpbmQoJy4nKSArIDEKKwkJCQkJCQlvX2Yud3JpdGUoIlx0JXNbJXNdLiVzO1xuIiAlKGxpbmVbOnBlcmlvZF8xXSwgbGluZVtwZXJpb2RfMSsxOnBlcmlvZF8yXSwgbGluZVtwZXJpb2RfMisxOmxpbmUuZmluZCgnOycpXSkpCisJCQkJCQllbHNlOgorCQkJCQkJCW9fZi53cml0ZSgiXG4iKQorCQkJCQlvX2Yud3JpdGUoIlxuIikKKwkJCWV4Y2VwdDoKKwkJCQlwcmludCgiQ2Fubm90IG9wZW4gaW5wdXQgZmlsZSAlcyIgJWluX3Ric2FfdGd0KQorCisJCQkiIiIgUG9wdWxhdGUgbWFqb3Igc3RydWN0dXJlIGRldGFpbHMgIiIiCisJCQlmb3IgZ3JvdXAgaW4gdW5pcXVlX21ham9yX2dyb3VwczoKKwkJCQlvX2Yud3JpdGUoIlx0JXNfaGRyX3QgZ3JvdXBfJXMgPSB7MH07XG4iICUoZ3JvdXAubG93ZXIoKSwgZ3JvdXAubG93ZXIoKSkpCisJCQkJb19mLndyaXRlKCJcdGdyb3VwXyVzLmNmZ190eXBlLmNmZ19pZCA9IChHUk9VUF8lcyA8PCAyNCk7XG4iICUoZ3JvdXAubG93ZXIoKSwgZ3JvdXApKQorCQkJCW9fZi53cml0ZSgiXHRncm91cF8lcy5jZmdfdHlwZS5zaXplICArPSBzaXplb2YoZ3JvdXBfJXMpO1xuIiAlKGdyb3VwLmxvd2VyKCksIGdyb3VwLmxvd2VyKCkpKQorCQkJCWZvciBtaW5vciBpbiB1bmlxdWVfbWlub3JfY29tcG9uZW50czoKKwkJCQkJaWYgZ3JvdXAgPT0gbWlub3JfbWFqb3JfbWFwW21pbm9yXToKKwkJCQkJCW9fZi53cml0ZSgiXHRncm91cF8lcy5jZmdfdHlwZS5zaXplICArPSBzaXplb2YoJXMpO1xuIiAlKGdyb3VwLmxvd2VyKCksIG1pbm9yLmxvd2VyKCkpKQorCQkJCQkJb19mLndyaXRlKCJcdGdyb3VwXyVzLm51bSAgICAgICAgICAgICs9ICVzX251bV9pbnN0YW5jZXM7XG4iICUoZ3JvdXAubG93ZXIoKSwgbWlub3IubG93ZXIoKSkpCisJCQkJb19mLndyaXRlKCJcbiIpCisKKwkJCSIiIiBTdGFydCBwdXNoaW5nIGZwcmludGYgaW50byB0aGUgc291cmNlIHJlc3Bvc2libGUgZm9yIGdlbmVyYXRpbmcgdGhlIGRhdGFiYXNlIHRhYmxlICIiIgorCQkJb19mLndyaXRlKCJcdHVpbnQzMl90ICp3b3JkX3B0cjtcbiIpCisJCQlvX2Yud3JpdGUoIlx0aW50ICAgICAgYnl0ZV9ubyAgPSAwO1xuIikKKwkJCW9fZi53cml0ZSgiXHRGSUxFICAgICAqZnA7XG5cbiIpCisJCQlvX2Yud3JpdGUoIlx0ZnAgPSBmb3BlbihcIiVzXCIsIFwid1wiKTtcblxuIiAlKG91dF9kYXRhYmFzZSkpCisJCQl0ZW1wX291dF9maWxlID0gb3V0X2RhdGFiYXNlCisJCQl3aGlsZSAnLycgaW4gdGVtcF9vdXRfZmlsZToKKwkJCQl0ZW1wX291dF9maWxlID0gIiIuam9pbih0ZW1wX291dF9maWxlW3RlbXBfb3V0X2ZpbGUuZmluZCgnLycpKzE6XSkKKwkJCW9fZi53cml0ZSgiXHRmcHJpbnRmKGZwLCBcIiNpZm5kZWYgXyVzX0hfXFxuXCIpO1xuIiAlKHRlbXBfb3V0X2ZpbGVbOnRlbXBfb3V0X2ZpbGUuZmluZCgnLicpXS51cHBlcigpKSkKKwkJCW9fZi53cml0ZSgiXHRmcHJpbnRmKGZwLCBcIiNkZWZpbmUgXyVzX0hfXFxuXCIpO1xuXG4iICUodGVtcF9vdXRfZmlsZVs6dGVtcF9vdXRfZmlsZS5maW5kKCcuJyldLnVwcGVyKCkpKQorCQkJaWYgc2VjdGlvbl9uYW1lOgorCQkJCW9fZi53cml0ZSgiXHRmcHJpbnRmKGZwLCBcIl9fYXR0cmlidXRlX18oKHNlY3Rpb24oXFxcIiVzXFxcIikpKVxcblwiKTtcbiIgJShzZWN0aW9uX25hbWUpKQorCQkJb19mLndyaXRlKCJcdGZwcmludGYoZnAsIFwiY29uc3QgdWludDMyX3Qgc3RhdGljICVzW10gPSB7XFxuXCIpO1xuIiAlKHRhYmxlX25hbWUpKQorCQkJb19mLndyaXRlKCJcdGZwcmludGYoZnAsIFwiMHgleFwiLCBcJ1RcJyk7XG4iKQorCQkJb19mLndyaXRlKCJcdGZwcmludGYoZnAsIFwiJXhcIiwgXCdCXCcpO1xuIikKKwkJCW9fZi53cml0ZSgiXHRmcHJpbnRmKGZwLCBcIiV4XCIsIFwnU1wnKTtcbiIpCisJCQlvX2Yud3JpdGUoIlx0ZnByaW50ZihmcCwgXCIleCxcXG5cIiwgXCdBXCcpO1xuIikKKwkJCW9fZi53cml0ZSgiXHRmcHJpbnRmKGZwLCBcIjB4JXhcIiwgXCdfXCcpO1xuIikKKwkJCW9fZi53cml0ZSgiXHRmcHJpbnRmKGZwLCBcIiV4XCIsIFwnQ1wnKTtcbiIpCisJCQlvX2Yud3JpdGUoIlx0ZnByaW50ZihmcCwgXCIleFwiLCBcJ0ZcJyk7XG4iKQorCQkJb19mLndyaXRlKCJcdGZwcmludGYoZnAsIFwiJXgsXFxuXCIsIFwnR1wnKTtcbiIpCisJCQlyZXF1aXJlZF90YXJnZXRfbmFtZV9sZW4gPSA0CisJCQluZXdfdGFyZ2V0ID0gdGFyZ2V0CisJCQlpZiAobGVuKHRhcmdldCkgPCByZXF1aXJlZF90YXJnZXRfbmFtZV9sZW4pOgorCQkJCXdoaWxlKHJlcXVpcmVkX3RhcmdldF9uYW1lX2xlbiAtIGxlbih0YXJnZXQpKToKKwkJCQkJbmV3X3RhcmdldCArPSAiICIKKwkJCQkJcmVxdWlyZWRfdGFyZ2V0X25hbWVfbGVuIC09IDEKKwkJCW9fZi53cml0ZSgiXHRmcHJpbnRmKGZwLCBcIjB4JXhcIiwgIikKKwkJCW9fZi53cml0ZSgiXCclY1wnKTtcbiIgJShuZXdfdGFyZ2V0WzA6MV0pKQorCQkJb19mLndyaXRlKCJcdGZwcmludGYoZnAsIFwiJXhcIiwgIikKKwkJCW9fZi53cml0ZSgiXCclY1wnKTtcbiIgJShuZXdfdGFyZ2V0WzE6Ml0pKQorCQkJb19mLndyaXRlKCJcdGZwcmludGYoZnAsIFwiJXhcIiwgIikKKwkJCW9fZi53cml0ZSgiXCclY1wnKTtcbiIgJShuZXdfdGFyZ2V0WzI6M10pKQorCQkJb19mLndyaXRlKCJcdGZwcmludGYoZnAsIFwiJXgsXFxuXCIsICIpCisJCQlvX2Yud3JpdGUoIlwnJWNcJyk7XG4iICUobmV3X3RhcmdldFszOjRdKSkKKwkJCW9fZi53cml0ZSgiXHRmcHJpbnRmKGZwLCBcIjB4JXhcIiwgXCdfXCcpO1xuIikKKwkJCW9fZi53cml0ZSgiXHRmcHJpbnRmKGZwLCBcIiV4XCIsIFwnQ1wnKTtcbiIpCisJCQlvX2Yud3JpdGUoIlx0ZnByaW50ZihmcCwgXCIleFwiLCBcJ0ZcJyk7XG4iKQorCQkJb19mLndyaXRlKCJcdGZwcmludGYoZnAsIFwiJXgsXFxuXCIsIFwnR1wnKTtcbiIpCisJCQlvX2Yud3JpdGUoIlx0dWludDMyX3QgdmVyc2lvbiA9IDE7XG4iKQorCQkJb19mLndyaXRlKCJcdGZwcmludGYoZnAsIFwiMHglMDh4LFxcblwiLCB2ZXJzaW9uKTtcbiIpCisJCQlvX2Yud3JpdGUoIlx0dWludDMyX3QgdG90YWxfc2l6ZSA9IDA7XG4iKQorCQkJZm9yIGdyb3VwIGluIHVuaXF1ZV9tYWpvcl9ncm91cHM6CisJCQkJb19mLndyaXRlKCJcdHRvdGFsX3NpemUgKz0gZ3JvdXBfJXMuY2ZnX3R5cGUuc2l6ZTtcbiIgJShncm91cC5sb3dlcigpKSkKKwkJCW9fZi53cml0ZSgiXHR0b3RhbF9zaXplICs9ICg4ICsgOCArIDQgKyA0KTtcbiIpCisJCQlvX2Yud3JpdGUoIlx0ZnByaW50ZihmcCwgXCIweCUwOHgsXFxuXCIsIHRvdGFsX3NpemUpO1xuIikKKworCQkJIiIiIFN0YXJ0IHdyaXRpbmcgY29tcG9uZW50IHZhbHVlcyB0byBkYXRhYmFzZSBmaWxlICIiIgorCQkJZm9yIGdyb3VwIGluIHVuaXF1ZV9tYWpvcl9ncm91cHM6CisJCQkJb19mLndyaXRlKCJcdC8qIFdyaXRpbmcgbWFqb3IgZ3JvdXAgZGV0YWlscyB0byB0aGUgZmlsZSAqL1xuIikKKwkJCQlvX2Yud3JpdGUoIlx0d29yZF9wdHIgPSAodWludDMyX3QgKikmZ3JvdXBfJXM7XG4iICUoZ3JvdXAubG93ZXIoKSkpCisJCQkJb19mLndyaXRlKCJcdGZvcihieXRlX25vPTA7IGJ5dGVfbm88c2l6ZW9mKGdyb3VwXyVzKTsgYnl0ZV9ubyArPSA0KSB7XG4iICUoZ3JvdXAubG93ZXIoKSkpCisJCQkJb19mLndyaXRlKCJcdFx0ZnByaW50ZihmcCwgXCIweCUwOHgsXFxuXCIsICp3b3JkX3B0cik7XG4iKQorCQkJCW9fZi53cml0ZSgiXHRcdHdvcmRfcHRyKys7XG4iKQorCQkJCW9fZi53cml0ZSgiXHR9XG4iKQorCQkJCW9fZi53cml0ZSgiXHQvKiBXcml0aW5nIG1pbm9yIGdyb3VwIGRldGFpbHMgdG8gdGhlIGZpbGUgKi9cbiIpCisJCQkJZm9yIG1pbm9yIGluIHVuaXF1ZV9taW5vcl9jb21wb25lbnRzOgorCQkJCQlpZiBncm91cCA9PSBtaW5vcl9tYWpvcl9tYXBbbWlub3JdOgorCQkJCQkJb19mLndyaXRlKCJcdHdvcmRfcHRyID0gKHVpbnQzMl90ICopJiVzWzBdO1xuIiAlKG1pbm9yLmxvd2VyKCkpKQorCQkJCQkJb19mLndyaXRlKCJcdGZvcihieXRlX25vPTA7IGJ5dGVfbm88c2l6ZW9mKCVzKTsgYnl0ZV9ubyArPSA0KSB7XG4iICUobWlub3IubG93ZXIoKSkpCisJCQkJCQlvX2Yud3JpdGUoIlx0XHRmcHJpbnRmKGZwLCBcIjB4JTA4eCxcXG5cIiwgKndvcmRfcHRyKTtcbiIpCisJCQkJCQlvX2Yud3JpdGUoIlx0XHR3b3JkX3B0cisrO1xuIikKKwkJCQkJCW9fZi53cml0ZSgiXHR9XG4iKQorCQkJb19mLndyaXRlKCJcdGZwcmludGYoZnAsIFwiMHglMDh4XFxuXCIsIDB4ZmZmZmZmZmYpO1xuIikKKwkJCW9fZi53cml0ZSgiXHRmcHJpbnRmKGZwLCBcIn07XFxuXFxuXCIpO1xuIikKKwkJCW9fZi53cml0ZSgiXHRmcHJpbnRmKGZwLCBcIiNlbmRpZlxcblwiKTtcbiIpCisJCQlvX2Yud3JpdGUoIlx0cmV0dXJuIDA7XG4iKQorCQkJb19mLndyaXRlKCJ9XG4iKQorCWV4Y2VwdDoKKwkJcHJpbnQoIkNhbm5vdCBvcGVuIG91dHB1dCBmaWxlICVzIiAlb3V0X3NvdXJjZSkKKworZ2V0X21pbm9yX21ham9yX21hcCgpCitnZW5lcmF0ZV9zb3VyY2UoKQpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3Rvb2xzL3NjcmlwdHMvdGVzdF9lbGZfY29tYmluZS5wbCBiL2FwaS10ZXN0cy90b29scy9zY3JpcHRzL3Rlc3RfZWxmX2NvbWJpbmUucGwKaW5kZXggMTA5YTRlNy4uZmI1MGUzMiAxMDA3NTUKLS0tIGEvYXBpLXRlc3RzL3Rvb2xzL3NjcmlwdHMvdGVzdF9lbGZfY29tYmluZS5wbAorKysgYi9hcGktdGVzdHMvdG9vbHMvc2NyaXB0cy90ZXN0X2VsZl9jb21iaW5lLnBsCkBAIC0xLDYgKzEsNiBAQAogIyEvdXNyL2Jpbi9lbnYgcGVybAogIy8qKiBAZmlsZQotIyAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIDogQXBhY2hlLTIuMAogIyAqCiAjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xOSw4ICsxOSw2IEBACiB1c2UgRmlsZTo6RmluZDsKIHVzZSBGaWxlOjpCYXNlbmFtZTsKIAotcHJpbnQgIlxuPj4+PiBDb21iaW5pbmcgdGVzdCBFTEZzLi4uIFxuIjsKLQogI0lucHV0cwogJHRlc3RfbGlzdF9maWxlID0gJEFSR1ZbMF07CiAKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy92YWwvY29tbW9uL3ZhbC5oIGIvYXBpLXRlc3RzL3ZhbC9jb21tb24vdmFsLmgKaW5kZXggYjNkYmNkNS4uMmFmMjg1OCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3ZhbC9jb21tb24vdmFsLmgKKysrIGIvYXBpLXRlc3RzL3ZhbC9jb21tb24vdmFsLmgKQEAgLTE3OCwxMiArMTc4LDE4IEBACiB9IHRlc3RfaXNvbGF0aW9uX2xldmVsX3Q7CiAKIHR5cGVkZWYgZW51bSB7Ci0gICAgQk9PVF9VTktOT1dOICAgICAgICAgICAgICAgPSAweDEsCi0gICAgQk9PVF9OT1RfRVhQRUNURUQgICAgICAgICAgPSAweDIsCi0gICAgQk9PVF9FWFBFQ1RFRF9OUyAgICAgICAgICAgPSAweDMsCi0gICAgQk9PVF9FWFBFQ1RFRF9TICAgICAgICAgICAgPSAweDQsCi0gICAgQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVEICAgPSAweDUsCi0gICAgQk9PVF9FWFBFQ1RFRF9DUllQVE8gICAgICAgPSAweDYsCisgICAgLyogVkFMIHVzZXMgdGhpcyBib290IGZsYWcgdG8gbWFyayBmaXJzdCB0aW1lIGJvb3Qgb2YgdGhlIHN5c3RlbSAgKi8KKyAgICBCT09UX1VOS05PV04gICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAorICAgIC8qIFZBTC9UZXN0IHVzZXMgdGhpcyBib290IGZsYWcgdG8gY2F0Y2ggYW55IHVud2FudGVkIHN5c3RlbSByZWJvb3QgLSBTSU0gRVJST1IgQ2FzZXMqLworICAgIEJPT1RfTk9UX0VYUEVDVEVEICAgICAgICAgICAgICAgICAgPSAweDIsCisgICAgLyogVGVzdCBwZXJmb3JtcyBwYW5pYyBjaGVjayBmb3Igbm9uLXNlY3VyZSB0ZXN0IHJ1biBhbmQgZXhwZWN0IHJlYm9vdCAqLworICAgIEJPT1RfRVhQRUNURURfTlMgICAgICAgICAgICAgICAgICAgPSAweDMsCisgICAgLyogVGVzdCBwZXJmb3JtcyBwYW5pYyBjaGVjayBmb3Igc2VjdXJlIHRlc3QgcnVuIGFuZCBleHBlY3QgcmVib290ICovCisgICAgQk9PVF9FWFBFQ1RFRF9TICAgICAgICAgICAgICAgICAgICA9IDB4NCwKKyAgICAvKiBUZXN0IGV4cGVjdGVkIHJlYm9vdCBidXQgaXQgZGlkbid0IGhhcHBlbiAqLworICAgIEJPT1RfRVhQRUNURURfQlVUX0ZBSUxFRCAgICAgICAgICAgPSAweDUsCisgICAgLyogVGVzdCBleHBlY3QgcmVib290IGZvciBzZWN1cmUvbm9uLXNlY3VyZSB0ZXN0IHJ1bi4gSWYgcmVib290IGhhcHBlbnMsIHJlLWVudGVyIHNhbWUgdGVzdCAqLworICAgIEJPT1RfRVhQRUNURURfUkVFTlRFUl9URVNUICAgICAgICAgPSAweDYsCiB9IGJvb3Rfc3RhdGVfdDsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTIyNCw2ICsyMzAsNyBAQAogICBWQUxfU1RBVFVTX0lOSVRfQUxSRUFEWV9ET05FICAgICAgICAgICA9IDB4MjksCiAgIFZBTF9TVEFUVVNfSEVBUF9OT1RfQVZBSUxBQkxFICAgICAgICAgID0gMHgyQSwKICAgVkFMX1NUQVRVU19VTlNVUFBPUlRFRCAgICAgICAgICAgICAgICAgPSAweDJCLAorICBWQUxfU1RBVFVTX0RSSVZFUl9GTl9GQUlMRUQgICAgICAgICAgICA9IDB4MkMsCiAgIFZBTF9TVEFUVVNfRVJST1JfTUFYICAgICAgICAgICAgICAgICAgID0gSU5UX01BWCwKIH0gdmFsX3N0YXR1c190OwogCkBAIC0yMzcsMTMgKzI0NCwyMSBAQAogICAgIFBSSU5UX0FMV0FZUyAgPSA5CiB9IHByaW50X3ZlcmJvc2l0eV90OwogCi0vKiBJbnRlcnJ1cHQgdGVzdCBmdW5jdGlvbiBpZCBlbnVtcyAqLworLyogRHJpdmVyIHRlc3QgZnVuY3Rpb24gaWQgZW51bXMgKi8KIHR5cGVkZWYgZW51bSB7CiAgICAgVEVTVF9QU0FfRU9JX1dJVEhfTk9OX0lOVFJfU0lHTkFMICAgID0gMSwKICAgICBURVNUX1BTQV9FT0lfV0lUSF9NVUxUSVBMRV9TSUdOQUxTICAgPSAyLAogICAgIFRFU1RfUFNBX0VPSV9XSVRIX1VOQVNTRVJURURfU0lHTkFMICA9IDMsCiAgICAgVEVTVF9JTlRSX1NFUlZJQ0UgICAgICAgICAgICAgICAgICAgID0gNCwKLX0gdGVzdF9pbnRyX2ZuX2lkX3Q7CisgICAgVEVTVF9JU09MQVRJT05fUFNBX1JPVF9EQVRBX1JEICAgICAgID0gNSwKKyAgICBURVNUX0lTT0xBVElPTl9QU0FfUk9UX0RBVEFfV1IgICAgICAgPSA2LAorICAgIFRFU1RfSVNPTEFUSU9OX1BTQV9ST1RfU1RBQ0tfUkQgICAgICA9IDcsCisgICAgVEVTVF9JU09MQVRJT05fUFNBX1JPVF9TVEFDS19XUiAgICAgID0gOCwKKyAgICBURVNUX0lTT0xBVElPTl9QU0FfUk9UX0hFQVBfUkQgICAgICAgPSA5LAorICAgIFRFU1RfSVNPTEFUSU9OX1BTQV9ST1RfSEVBUF9XUiAgICAgICA9IDEwLAorICAgIFRFU1RfSVNPTEFUSU9OX1BTQV9ST1RfTU1JT19SRCAgICAgICA9IDExLAorICAgIFRFU1RfSVNPTEFUSU9OX1BTQV9ST1RfTU1JT19XUiAgICAgICA9IDEyLAorfSBkcml2ZXJfdGVzdF9mbl9pZF90OwogCiAvKiB0eXBlZGVmJ3MgKi8KIHR5cGVkZWYgc3RydWN0IHsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy92YWwvY29tbW9uL3ZhbF90YXJnZXQuYyBiL2FwaS10ZXN0cy92YWwvY29tbW9uL3ZhbF90YXJnZXQuYwppbmRleCBhZTNjMmY0Li4zNTY0YzdkIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvdmFsL2NvbW1vbi92YWxfdGFyZ2V0LmMKKysrIGIvYXBpLXRlc3RzL3ZhbC9jb21tb24vdmFsX3RhcmdldC5jCkBAIC0xOCw3ICsxOCw4IEBACiAjaW5jbHVkZSAidmFsX3RhcmdldC5oIgogI2luY2x1ZGUgInRhcmdldF9kYXRhYmFzZS5oIgogCi0jaWZkZWYgVVNFX1JBV19QUklOVF9GT1JfRFJJVkVSX1BBUlRJVElPTgorLyogVXNlIHJhdyBwcmludCBmb3IgZHJpdmVyIHBhcnRpdGlvbiAqLworI2lmZGVmIERSSVZFUl9QQVJUSVRJT05fSU5DTFVERQogI2RlZmluZSB2YWxfcHJpbnQoeCwgeSwgeikgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgaWYgKHggPj0gVkVSQk9TRSkgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMjYsNyArMjcsNyBAQAogICAgICAgIH0gd2hpbGUoMCkKICNlbHNlCiBfX1VOVVNFRCBTVEFUSUNfREVDTEFSRSB2YWxfc3RhdHVzX3QgdmFsX3ByaW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAocHJpbnRfdmVyYm9zaXR5X3QgdmVyYm9zaXR5LCBjaGFyICpzdHJpbmcsIHVpbnQzMl90IGRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgKHByaW50X3ZlcmJvc2l0eV90IHZlcmJvc2l0eSwgY2hhciAqc3RyaW5nLCBpbnQzMl90IGRhdGEpOwogI2VuZGlmCiAKIC8qKgpAQCAtNTIsNyArNTMsNyBAQAogICAgICAgICAvKiBTYW5pdHkgY2hlY2sgc2lnbmF0dXJlIGFuZCB2ZXJzaW9uIGhlcmUgKi8KICAgICAgICBpZiAoKGhkci0+dmVyc2lvbiAhPSAxKSB8fCAoaGRyLT5zaXplID09IDApKQogICAgICAgIHsKLSAgICAgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlRhcmdldCBjb25maWcgZGF0YWJhc2UgRXJyb3IuIFxuIiwgMCk7CisgICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdFRhcmdldCBjb25maWcgZGF0YWJhc2UgRXJyb3IuIFxuIiwgMCk7CiAgICAgICAgICAgICByZXR1cm4gVkFMX1NUQVRVU19FUlJPUjsKICAgICAgICAgfQogICAgICAgICBoZHIrKzsKQEAgLTgyLDcgKzgzLDcgQEAKICAgICB2YWxfc3RhdHVzX3QgICAgc3RhdHVzOwogICAgIHZvaWQgICAgICAgICAgICAqY29uZmlnX2Jsb2IgPSBOVUxMOwogCi0gICAgdmFsX3ByaW50KFBSSU5UX0lORk8sICJJbnB1dCBpZCBpcyAleCBcbiIsIGNmZ19pZCk7CisgICAgdmFsX3ByaW50KFBSSU5UX0lORk8sICJcdElucHV0IGlkIGlzICV4IFxuIiwgY2ZnX2lkKTsKICAgICBkbwogICAgIHsKIApAQCAtMTM4LDcgKzEzOSw3IEBACiAKICAgICBpZiAoKGNmZ19pZCA8IFRBUkdFVF9NSU5fQ0ZHX0lEKSB8fCAoY2ZnX2lkID4gVEFSR0VUX01BWF9DRkdfSUQpKQogICAgIHsKLSAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiSW52YWxpZCBUYXJnZXQgZGF0YSBjb25maWcgSUQgPSAleCBcbiIsIGNmZ19pZCk7CisgICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0SW52YWxpZCBUYXJnZXQgZGF0YSBjb25maWcgSUQgPSAleCBcbiIsIGNmZ19pZCk7CiAgICAgICAgIHJldHVybiBWQUxfU1RBVFVTX0lOU1VGRklDSUVOVF9TSVpFOwogICAgIH0KIApAQCAtMTQ2LDggKzE0Nyw4IEBACiAKICAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCiAgICAgewotICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcbiAgICAgICAgR2V0IENvbmZpZyBmYWlsZWQgd2l0aCBzdGF0dXMgPSAleCIsIHN0YXR1cyk7Ci0gICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIiBmb3IgY2ZnX2lkID0gJXgiLCBjZmdfaWQpOworICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJcdEdldCBDb25maWcgZmFpbGVkIHdpdGggc3RhdHVzID0gJXgiLCBzdGF0dXMpOworICAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICIgZm9yIGNmZ19pZCA9ICV4XG4iLCBjZmdfaWQpOwogICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KICAgICByZXR1cm4gVkFMX1NUQVRVU19TVUNDRVNTOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3ZhbC9jb21tb24vdmFsX3RhcmdldC5oIGIvYXBpLXRlc3RzL3ZhbC9jb21tb24vdmFsX3RhcmdldC5oCmluZGV4IGMzMmYwYTUuLmM4YjE0NjYgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy92YWwvY29tbW9uL3ZhbF90YXJnZXQuaAorKysgYi9hcGktdGVzdHMvdmFsL2NvbW1vbi92YWxfdGFyZ2V0LmgKQEAgLTY0LDcgKzY0LDcgQEAKIHR5cGVkZWYgZW51bSBfTUVNT1JZX0NPTkZJR19JRF8gewogICBNRU1PUllfTlZNRU0gICAgICAgICAgICAgICAgICAgID0gMHgyLAogICBNRU1PUllfTlNQRV9NTUlPICAgICAgICAgICAgICAgID0gMHgzLAotICBNRU1PUllfQ0xJRU5UX1BBUlRJVElPTl9NTUlPICAgID0gMHg0LAorICBNRU1PUllfU0VSVkVSX1BBUlRJVElPTl9NTUlPICAgID0gMHg0LAogICBNRU1PUllfRFJJVkVSX1BBUlRJVElPTl9NTUlPICAgID0gMHg1LAogfSBtZW1vcnlfY2ZnX2lkX3Q7CiAKQEAgLTgyLDcgKzgyLDcgQEAKICAgV0FUQ0hET0cgICAgICAgICAgICAgICAgID0gR1JPVVBfU09DX1BFUklQSEVSQUwsCiAgIE5WTUVNICAgICAgICAgICAgICAgICAgICA9IEdST1VQX01FTU9SWSwKICAgTlNQRV9NTUlPICAgICAgICAgICAgICAgID0gR1JPVVBfTUVNT1JZLAotICBDTElFTlRfUEFSVElUSU9OX01NSU8gICAgPSBHUk9VUF9NRU1PUlksCisgIFNFUlZFUl9QQVJUSVRJT05fTU1JTyAgICA9IEdST1VQX01FTU9SWSwKICAgRFJJVkVSX1BBUlRJVElPTl9NTUlPICAgID0gR1JPVVBfTUVNT1JZLAogICBCT09UICAgICAgICAgICAgICAgICAgICAgPSBHUk9VUF9NSVNDRUxMQU5FT1VTLAogICBEVVQgICAgICAgICAgICAgICAgICAgICAgPSBHUk9VUF9NSVNDRUxMQU5FT1VTLApAQCAtMTk1LDExICsxOTUsMTUgQEAKICAgICBhZGRyX3QgICAgICAgICAgICAgICAgICBuc19zdGFydF9hZGRyX29mX2NvbWJpbmVfdGVzdF9iaW5hcnk7CiAgICAgaXNfYXZhaWxhYmxlX3QgICAgICAgICAgY29tYmluZV90ZXN0X2JpbmFyeV9pbl9yYW07CiAgICAgYWRkcl90ICAgICAgICAgICAgICAgICAgbnNfdGVzdF9hZGRyOworICAgIGlzX2F2YWlsYWJsZV90ICAgICAgICAgIHNwX2hlYXBfbWVtX3N1cHA7CiB9IG1pc2NlbGxhbmVvdXNfZGVzY190OwogCiAvKnZhbCB0YXJnZXQgY29uZmlnIHJlYWQgYXBpcyAqLworI2lmZGVmIFZBTF9OU1BFX0JVSUxECiBTVEFUSUNfREVDTEFSRSB2YWxfc3RhdHVzX3QgdmFsX3RhcmdldF9nZXRfY29uZmlnKGNmZ19pZF90IGNmZ19pZCwgdWludDhfdCAqKmRhdGEsIHVpbnQzMl90ICpzaXplKTsKIFNUQVRJQ19ERUNMQVJFIHZhbF9zdGF0dXNfdCB2YWxfdGFyZ2V0X2NmZ19nZXRfbmV4dCh2b2lkICoqYmxvYik7Ci1TVEFUSUNfREVDTEFSRSB2YWxfc3RhdHVzX3QgdmFsX3RhcmdldF9nZXRfY2ZnX2Jsb2IoY2ZnX2lkX3QgY2ZnX2lkLCB1aW50OF90ICoqZGF0YSwgdWludDMyX3QgKnNpemUpOworU1RBVElDX0RFQ0xBUkUgdmFsX3N0YXR1c190IHZhbF90YXJnZXRfZ2V0X2NmZ19ibG9iKGNmZ19pZF90IGNmZ19pZCwgdWludDhfdCAqKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnNpemUpOwogU1RBVElDX0RFQ0xBUkUgdmFsX3N0YXR1c190IHZhbF90YXJnZXRfZ2V0X2NvbmZpZyhjZmdfaWRfdCBjZmdfaWQsIHVpbnQ4X3QgKipkYXRhLCB1aW50MzJfdCAqc2l6ZSk7CiAjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3ZhbC9uc3BlL3BhbF9pbnRlcmZhY2VzX25zLmggYi9hcGktdGVzdHMvdmFsL25zcGUvcGFsX2ludGVyZmFjZXNfbnMuaAppbmRleCAxODZhNWZjLi4wYjUwNjEyIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvdmFsL25zcGUvcGFsX2ludGVyZmFjZXNfbnMuaAorKysgYi9hcGktdGVzdHMvdmFsL25zcGUvcGFsX2ludGVyZmFjZXNfbnMuaApAQCAtMTAwLDcgKzEwMCw3IEBACiAgKiAgIEByZXR1cm4gICAtIFNVQ0NFU1MvRkFJTFVSRQogKiovCiAKLWludCBwYWxfcHJpbnRfbnMoY2hhciAqc3RyLCB1aW50MzJfdCBkYXRhKTsKK2ludCBwYWxfcHJpbnRfbnMoY2hhciAqc3RyLCBpbnQzMl90IGRhdGEpOwogCiAvKioKICAqICAgQGJyaWVmICAgICAgICAgICAtIEluaXRpYWxpemVzIGFuIGhhcmR3YXJlIHdhdGNoZG9nIHRpbWVyCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvdmFsL25zcGUvdmFsX2F0dGVzdGF0aW9uLmggYi9hcGktdGVzdHMvdmFsL25zcGUvdmFsX2F0dGVzdGF0aW9uLmgKaW5kZXggZDg2MDczOS4uNThlYTU5YyAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9hdHRlc3RhdGlvbi5oCisrKyBiL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfYXR0ZXN0YXRpb24uaApAQCAtMTksNyArMTksNiBAQAogI2RlZmluZSBfVkFMX0lOSVRJQUxfQVRURVNUQVRJT05fSF8KIAogI2luY2x1ZGUgInZhbC5oIgotCiAjZGVmaW5lIE1BWF9DSEFMTEVOR0VfU0laRSAgICAgIFBTQV9JTklUSUFMX0FUVEVTVF9DSEFMTEVOR0VfU0laRV82NAogCiBlbnVtIGF0dGVzdGF0aW9uX2Z1bmN0aW9uX2NvZGUgewpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9jcnlwdG8uYyBiL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfY3J5cHRvLmMKaW5kZXggNzY0YjQ0YS4uZGExYWNlZCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9jcnlwdG8uYworKysgYi9hcGktdGVzdHMvdmFsL25zcGUvdmFsX2NyeXB0by5jCkBAIC0zMCw3ICszMCw3IEBACiBpbnQzMl90IHZhbF9jcnlwdG9fZnVuY3Rpb24oaW50IHR5cGUsIC4uLikKIHsKICAgICB2YV9saXN0ICAgICAgdmFsaXN0OwotICAgIHZhbF9zdGF0dXNfdCBzdGF0dXM7CisgICAgaW50MzJfdCAgICAgIHN0YXR1czsKIAogICAgIHZhX3N0YXJ0KHZhbGlzdCwgdHlwZSk7CiAgICAgc3RhdHVzID0gcGFsX2NyeXB0b19mdW5jdGlvbih0eXBlLCB2YWxpc3QpOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9jcnlwdG8uaCBiL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfY3J5cHRvLmgKaW5kZXggNmNiMWIyZi4uNmZjM2Y1NiAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9jcnlwdG8uaAorKysgYi9hcGktdGVzdHMvdmFsL25zcGUvdmFsX2NyeXB0by5oCkBAIC00OCw2ICs0OCw3IEBACiAKICNkZWZpbmUgUFNBX0tFWV9MSUZFVElNRV9JTlZBTElEICAgICAgICAweEZGRkZGRkZGCiAjZGVmaW5lIFBTQV9LRVlfVVNBR0VfSU5WQUxJRCAgICAgICAgICAgMHhGRkZGRkZGRgorI2RlZmluZSBQU0FfSEFTSF9BTEdfSU5WQUxJRCAgICAgICAgICAgIDB4MDFGRkZGRkYKICNkZWZpbmUgUFNBX0FMR19JTlZBTElEICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCiAKIGVudW0gY3J5cHRvX2Z1bmN0aW9uX2NvZGUgewpAQCAtOTgsNiArOTksNyBAQAogICAgIFZBTF9DUllQVE9fQVNZTU1URVJJQ19WRVJJRlkgICAgICAgID0gMHgzMSwKICAgICBWQUxfQ1JZUFRPX0tFWV9BR1JFRU1FTlQgICAgICAgICAgICA9IDB4MzIsCiAgICAgVkFMX0NSWVBUT19BTExPQ0FURV9LRVkgICAgICAgICAgICAgPSAweDMzLAorICAgIFZBTF9DUllQVE9fQ09QWV9LRVkgICAgICAgICAgICAgICAgID0gMHgzNCwKICAgICBWQUxfQ1JZUFRPX0ZSRUUgICAgICAgICAgICAgICAgICAgICA9IDB4RkUsCiB9OwogCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvdmFsL25zcGUvdmFsX2Rpc3BhdGNoZXIuYyBiL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfZGlzcGF0Y2hlci5jCmluZGV4IDI5YzcyZGMuLjg2NzU1MTggMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfZGlzcGF0Y2hlci5jCisrKyBiL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfZGlzcGF0Y2hlci5jCkBAIC0xMjYsNyArMTI2LDcgQEAKICoqLwogdmFsX3N0YXR1c190IHZhbF90ZXN0X2xvYWQodGVzdF9pZF90ICp0ZXN0X2lkLCB0ZXN0X2lkX3QgdGVzdF9pZF9wcmV2KQogewotI2lmbmRlZiBURVNUX0NPTUJJTkVfQVJDSElWRQorI2lmIChURVNUX0NPTUJJTkVfQVJDSElWRSA9PSAwKQogICAgIHRlc3RfaGVhZGVyX3QgICB0ZXN0X2hlYWRlcjsKICAgICBhZGRyX3QgICAgICAgICAgZmxhc2hfYWRkciA9IGNvbWJpbmVfdGVzdF9iaW5hcnlfYWRkcjsKIApAQCAtMjYwLDcgKzI2MCw3IEBACiAqKi8KIHZhbF9zdGF0dXNfdCB2YWxfZ2V0X3Rlc3RfZW50cnlfYWRkcihhZGRyX3QgKnBhZGRyKQogewotI2lmbmRlZiBURVNUX0NPTUJJTkVfQVJDSElWRQorI2lmIChURVNUX0NPTUJJTkVfQVJDSElWRSA9PSAwKQogICAgICpwYWRkciA9IChhZGRyX3QpKCgodmFsX3Rlc3RfaW5mb190ICopZ190ZXN0X2luZm9fYWRkciktPmVudHJ5X2FkZHIpOwogI2Vsc2UKICAgICAqcGFkZHIgPSBnX3Rlc3RfaW5mb19hZGRyOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9lbnRyeS5oIGIvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9lbnRyeS5oCmluZGV4IDJiODg1ZTAuLjIyMzYwMTYgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfZW50cnkuaAorKysgYi9hcGktdGVzdHMvdmFsL25zcGUvdmFsX2VudHJ5LmgKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlICJ2YWxfZnJhbWV3b3JrLmgiCiAKICNkZWZpbmUgUFNBX0FDU19NQUpPUl9WRVIgICAgMAotI2RlZmluZSBQU0FfQUNTX01JTk9SX1ZFUiAgICA4CisjZGVmaW5lIFBTQV9BQ1NfTUlOT1JfVkVSICAgIDkKIAogLyoqCiAgICAgQGJyaWVmICAgIC0gUFNBIFRlc3QgU3VpdGUgQyBtYWluIGZ1bmN0aW9uLCBkb2VzIFZBTCBpbml0IGFuZCBjYWxscyB0ZXN0IGRpc3BhdGNoZXIKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfZnJhbWV3b3JrLmMgYi9hcGktdGVzdHMvdmFsL25zcGUvdmFsX2ZyYW1ld29yay5jCmluZGV4IDFiYzNiMTIuLjRmNjE2M2MgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfZnJhbWV3b3JrLmMKKysrIGIvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9mcmFtZXdvcmsuYwpAQCAtMTExLDExICsxMTEsMzEgQEAKICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgIH0KIAotICAgIGlmIChib290LnN0YXRlID09IEJPT1RfTk9UX0VYUEVDVEVEIHx8IGJvb3Quc3RhdGUgPT0gQk9PVF9FWFBFQ1RFRF9DUllQVE8pCisgICAgaWYgKGJvb3Quc3RhdGUgPT0gQk9PVF9OT1RfRVhQRUNURUQgfHwgYm9vdC5zdGF0ZSA9PSBCT09UX0VYUEVDVEVEX1JFRU5URVJfVEVTVCkKICAgICB7Ci0gICAgICAgIHZhbF9wcmludChQUklOVF9URVNULCJbSW5mb10gRXhlY3V0aW5nIHRlc3RzIGZyb20gbm9uLXNlY3VyZVxuIiwgMCk7CiAgICAgICAgIHdoaWxlICh0ZXN0c19saXN0W2ldICE9IE5VTEwpCiAgICAgICAgIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBSZWJvb3QgaGF2ZSBiZWVuIGV4cGVjdGVkIGJ5IHRlc3QgaW4gcHJldmlvdXMgbnMgcnVuLAorICAgICAgICAgICAgICogY29uc2lkZXIgcHJldmlvdXMgcnVuIHBhc3MgYW5kIGp1bXAgdG8gc2Vjb25kIHRlc3QgZnVuY3Rpb24KKyAgICAgICAgICAgICAqIG9mIHRoZSBzYW1lIHRlc3QgaWYgYXZhaWxhYmxlLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoKGJvb3Quc3RhdGUgPT0gIEJPT1RfRVhQRUNURURfUkVFTlRFUl9URVNUKSAmJiAoaSA9PSAxKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfREVCVUcsICJbQ2hlY2sxXSBQQVNTRURcbiIsIDApOworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RhdHVzID0gdmFsX3NldF9ib290X2ZsYWcoQk9PVF9OT1RfRVhQRUNURUQpOworICAgICAgICAgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpID09IDEpCisgICAgICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX1RFU1QsIltJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBub24tc2VjdXJlXG4iLCAwKTsKKwogICAgICAgICAgICAgaWYgKHNlcnZlcl9ocyA9PSBUUlVFKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIC8qIEhhbmRzaGFrZSB3aXRoIHNlcnZlciB0ZXN0cyAqLwpAQCAtMjA0LDYgKzIyNCwxNyBAQAogCiAgICAgaWYgKGJvb3Quc3RhdGUgIT0gQk9PVF9FWFBFQ1RFRF9TKQogICAgIHsKKyAgICAgICAvKgorICAgICAgICAqIFJlYm9vdCBoYXZlIGJlZW4gZXhwZWN0ZWQgYnkgdGVzdCBpbiBwcmV2aW91cyBzIHJ1biwKKyAgICAgICAgKiBjb25zaWRlciBwcmV2aW91cyBydW4gcGFzcyBhbmQganVtcCB0byBzZWNvbmQgdGVzdCBmdW5jdGlvbgorICAgICAgICAqIG9mIHRoZSBzYW1lIHRlc3QgaWYgYXZhaWxhYmxlLgorICAgICAgICAqLworICAgICAgIGlmIChib290LnN0YXRlID09ICBCT09UX0VYUEVDVEVEX1JFRU5URVJfVEVTVCkKKyAgICAgICB7CisgICAgICAgICAgICB0ZXN0X2luZm8uYmxvY2tfbnVtKys7CisgICAgICAgICAgICB2YWxfcHJpbnQoUFJJTlRfREVCVUcsICJbQ2hlY2sxXSBQQVNTRURcbiIsIDApOworICAgICAgIH0KKwogICAgICAgIHN0YXR1cyA9IHZhbF9zZXRfYm9vdF9mbGFnKEJPT1RfTk9UX0VYUEVDVEVEKTsKICAgICAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCiAgICAgICAgewpAQCAtMzk5LDcgKzQzMCw3IEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHN0YXR1cyA9IHZhbF9nZXRfc3RhdHVzKCk7CisgICAgICAgIHN0YXR1cyA9ICh2YWxfZ2V0X3N0YXR1cygpICYgVEVTVF9TVEFUVVNfTUFTSyk7CiAgICAgICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKICAgICAgICAgewogICAgICAgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHRDaGVja3BvaW50ICVkIDogIiwgY2hlY2twb2ludCk7CkBAIC00NTEsMTUgKzQ4MiwxNiBAQAogICAgICAgIEdFVF9URVNUX0lTT0xBVElPTl9MRVZFTCh0ZXN0X2JpdGZpZWxkKSkKICAgIHsKICAgICAgICB2YWxfc2V0X3N0YXR1cyhSRVNVTFRfU0tJUChWQUxfU1RBVFVTX0lTT0xBVElPTl9MRVZFTF9OT1RfU1VQUCkpOwotICAgICAgIHZhbF9wcmludChQUklOVF9BTFdBWVMsICJTa2lwcGluZyB0ZXN0LiBSZXF1aXJlZCBpc29sYXRpb24gbGV2ZWwgaXMgbm90IHN1cHBvcnRlZFxuIiwgMCk7CisgICAgICAgdmFsX3ByaW50KFBSSU5UX0FMV0FZUywgIlx0U2tpcHBpbmcgdGVzdC4gUmVxdWlyZWQgaXNvbGF0aW9uIGxldmVsIGlzIG5vdCBzdXBwb3J0ZWRcbiIsIDApOwogICAgICAgIHJldHVybjsKICAgIH0KIAorI2lmIChXQVRDSERPR19BVkFJTEFCTEUgPT0gMSkKICAgIC8qIEluaXRpYWxpc2Ugd2F0Y2hkb2cgKi8KICAgIHN0YXR1cyA9IHZhbF93ZF90aW1lcl9pbml0KEdFVF9XRF9USU1PVVRfVFlQRSh0ZXN0X2JpdGZpZWxkKSk7CiAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCiAgICB7Ci0gICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAidmFsX3dkX3RpbWVyX2luaXQgZmFpbGVkIEVycm9yPTB4JXhcbiIsIHN0YXR1cyk7CisgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHR2YWxfd2RfdGltZXJfaW5pdCBmYWlsZWQgRXJyb3I9MHgleFxuIiwgc3RhdHVzKTsKICAgICAgICByZXR1cm47CiAgICB9CiAKQEAgLTQ2Nyw5ICs0OTksMTAgQEAKICAgIHN0YXR1cyA9IHZhbF93ZF90aW1lcl9lbmFibGUoKTsKICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKICAgIHsKLSAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJ2YWxfd2RfdGltZXJfZW5hYmxlIGZhaWxlZCBFcnJvcj0weCV4XG4iLCBzdGF0dXMpOworICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0dmFsX3dkX3RpbWVyX2VuYWJsZSBmYWlsZWQgRXJyb3I9MHgleFxuIiwgc3RhdHVzKTsKICAgICAgICByZXR1cm47CiAgICB9CisjZW5kaWYKIAogICAgdmFsX3NldF9zdGF0dXMoUkVTVUxUX1NUQVJUKFZBTF9TVEFUVVNfU1VDQ0VTUykpOwogICAgcmV0dXJuOwpAQCAtNDgzLDEwICs1MTYsMjAgQEAKIAogdm9pZCB2YWxfdGVzdF9leGl0KHZvaWQpCiB7Ci0gICAgdmFsX3N0YXR1c190ICAgIHN0YXR1czsKKyAgICB2YWxfc3RhdHVzX3QgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CiAKLSAgICB2YWxfd2RfdGltZXJfZGlzYWJsZSgpOworI2lmIChXQVRDSERPR19BVkFJTEFCTEUgPT0gMSkKKyAgICBzdGF0dXMgPSB2YWxfd2RfdGltZXJfZGlzYWJsZSgpOworICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgICB7CisgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHR2YWxfd2RfdGltZXJfZGlzYWJsZSBmYWlsZWQgRXJyb3I9MHgleFxuIiwgc3RhdHVzKTsKKyAgICAgICB2YWxfc2V0X3N0YXR1cyhSRVNVTFRfRkFJTChzdGF0dXMpKTsKKyAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKICAgICBzdGF0dXMgPSB2YWxfZ2V0X3N0YXR1cygpOworCiAgICAgLyogcmV0dXJuIGlmIHRlc3Qgc2tpcHBlZCBvciBmYWlsZWQgKi8KICAgICBpZiAoSVNfVEVTVF9GQUlMKHN0YXR1cykgfHwgSVNfVEVTVF9TS0lQKHN0YXR1cykpCiAgICAgewpAQCAtNTA5LDkgKzU1MiwxMiBAQAogICAgIHRlc3RfY291bnRfdCAgICB0ZXN0X2NvdW50OwogICAgIGJvb3RfdCAgICAgICAgICBib290OwogICAgIGludCAgICAgICAgICAgICBpID0gMCwgaW50ZXJtZWRpYXRlX2Jvb3QgPSAwOwotICAgIGJvb3Rfc3RhdGVfdCAgICBib290X3N0YXRlW10gPSB7Qk9PVF9OT1RfRVhQRUNURUQsIEJPT1RfRVhQRUNURURfTlMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PVF9FWFBFQ1RFRF9TLCBCT09UX0VYUEVDVEVEX0JVVF9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PVF9FWFBFQ1RFRF9DUllQVE99OworICAgIGJvb3Rfc3RhdGVfdCAgICBib290X3N0YXRlW10gPSB7Qk9PVF9OT1RfRVhQRUNURUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09UX0VYUEVDVEVEX05TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PVF9FWFBFQ1RFRF9TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PVF9FWFBFQ1RFRF9CVVRfRkFJTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PVF9FWFBFQ1RFRF9SRUVOVEVSX1RFU1QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAKICAgICBzdGF0dXMgPSB2YWxfZ2V0X2Jvb3RfZmxhZygmYm9vdC5zdGF0ZSk7CiAgICAgaWYgKFZBTF9FUlJPUihzdGF0dXMpKQpAQCAtNTE5LDYgKzU2NSw4IEBACiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgfQogCisgICAgdmFsX3ByaW50KFBSSU5UX0lORk8sICJcblx0Ym9vdC5zdGF0ZT0weCV4IiwgYm9vdC5zdGF0ZSk7CisKICAgICBmb3IgKGkgPSAwOyBpIDwgKHNpemVvZihib290X3N0YXRlKS9zaXplb2YoYm9vdF9zdGF0ZVswXSkpOyBpKyspCiAgICAgewogICAgICAgICBpZiAoYm9vdC5zdGF0ZSA9PSBib290X3N0YXRlW2ldKQpAQCAtNTg1LDcgKzYzMyw3IEBACiAgICBzdGF0dXMgPSB2YWxfbnZtZW1fd3JpdGUoVkFMX05WTUVNX09GRlNFVChOVl9CT09UKSwgJmJvb3QsIHNpemVvZihib290X3QpKTsKICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKICAgIHsKLSAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJ2YWxfbnZtZW1fd3JpdGUgZmFpbGVkLiBFcnJvcj0weCV4XG4iLCBzdGF0dXMpOworICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0dmFsX252bWVtX3dyaXRlIGZhaWxlZC4gRXJyb3I9MHgleFxuIiwgc3RhdHVzKTsKICAgICAgICByZXR1cm4gc3RhdHVzOwogICAgfQogICAgcmV0dXJuIHN0YXR1czsKQEAgLTYwNCw3ICs2NTIsNyBAQAogICAgc3RhdHVzID0gdmFsX252bWVtX3JlYWQoVkFMX05WTUVNX09GRlNFVChOVl9CT09UKSwgJmJvb3QsIHNpemVvZihib290X3QpKTsKICAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKICAgIHsKLSAgICAgICB2YWxfcHJpbnQoUFJJTlRfRVJST1IsICJ2YWxfbnZtZW1fcmVhZCBmYWlsZWQuIEVycm9yPTB4JXhcbiIsIHN0YXR1cyk7CisgICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAiXHR2YWxfbnZtZW1fcmVhZCBmYWlsZWQuIEVycm9yPTB4JXhcbiIsIHN0YXR1cyk7CiAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgIH0KICAgICpzdGF0ZSA9IGJvb3Quc3RhdGU7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvdmFsL25zcGUvdmFsX2ludGVyZmFjZXMuaCBiL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfaW50ZXJmYWNlcy5oCmluZGV4IGI0MWFhYjEuLjhlOWM1NmIgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfaW50ZXJmYWNlcy5oCisrKyBiL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfaW50ZXJmYWNlcy5oCkBAIC0yNSw3ICsyNSw3IEBACiAvKiB0eXBlZGVmJ3MgKi8KIHR5cGVkZWYgc3RydWN0IHsKICAgICB2YWxfc3RhdHVzX3QgICAgICgqcHJpbnQpICAgICAgICAgICAgICAgICAgICAgKHByaW50X3ZlcmJvc2l0eV90IHZlcmJvc2l0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnN0cmluZywgdWludDMyX3QgZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzdHJpbmcsIGludDMyX3QgZGF0YSk7CiAgICAgdmFsX3N0YXR1c190ICAgICAoKnNldF9zdGF0dXMpICAgICAgICAgICAgICAgICh1aW50MzJfdCBzdGF0dXMpOwogICAgIHVpbnQzMl90ICAgICAgICAgKCpnZXRfc3RhdHVzKSAgICAgICAgICAgICAgICAodm9pZCk7CiAgICAgdm9pZCAgICAgICAgICAgICAoKnRlc3RfaW5pdCkgICAgICAgICAgICAgICAgICh1aW50MzJfdCB0ZXN0X251bSwgIGNoYXI4X3QgKmRlc2MsCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvdmFsL25zcGUvdmFsX3BlcmlwaGVyYWxzLmMgYi9hcGktdGVzdHMvdmFsL25zcGUvdmFsX3BlcmlwaGVyYWxzLmMKaW5kZXggOWYxNTNlMC4uZGNjYzRlNCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9wZXJpcGhlcmFscy5jCisrKyBiL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfcGVyaXBoZXJhbHMuYwpAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICAgICAgICAtIGRhdGEgICAgIDogVmFsdWUgZm9yIGZvcm1hdCBzcGVjaWZpZXIKICAgICBAcmV0dXJuICAgLSB2YWxfc3RhdHVzX3QKICoqLwotdmFsX3N0YXR1c190IHZhbF9wcmludChwcmludF92ZXJib3NpdHlfdCB2ZXJib3NpdHksIGNoYXIgKnN0cmluZywgdWludDMyX3QgZGF0YSkKK3ZhbF9zdGF0dXNfdCB2YWxfcHJpbnQocHJpbnRfdmVyYm9zaXR5X3QgdmVyYm9zaXR5LCBjaGFyICpzdHJpbmcsIGludDMyX3QgZGF0YSkKIHsKICAgICBpZiAoKGlzX3VhcnRfaW5pdF9kb25lID09IDApIHx8ICh2ZXJib3NpdHkgPCBWRVJCT1NFKSkKICAgICB7CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvdmFsL25zcGUvdmFsX3BlcmlwaGVyYWxzLmggYi9hcGktdGVzdHMvdmFsL25zcGUvdmFsX3BlcmlwaGVyYWxzLmgKaW5kZXggZGZlYTE0My4uZDFiNzUzOCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3ZhbC9uc3BlL3ZhbF9wZXJpcGhlcmFscy5oCisrKyBiL2FwaS10ZXN0cy92YWwvbnNwZS92YWxfcGVyaXBoZXJhbHMuaApAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgInZhbC5oIgogCiB2YWxfc3RhdHVzX3QgdmFsX3VhcnRfaW5pdCh2b2lkKTsKLXZhbF9zdGF0dXNfdCB2YWxfcHJpbnQocHJpbnRfdmVyYm9zaXR5X3QgdmVyYm9zaXR5LCBjaGFyICpzdHJpbmcsIHVpbnQzMl90IGRhdGEpOwordmFsX3N0YXR1c190IHZhbF9wcmludChwcmludF92ZXJib3NpdHlfdCB2ZXJib3NpdHksIGNoYXIgKnN0cmluZywgaW50MzJfdCBkYXRhKTsKIHZhbF9zdGF0dXNfdCB2YWxfc3BpX3JlYWQoYWRkcl90IGFkZHIsIHVpbnQ4X3QgKmRhdGEsIHVpbnQzMl90IGxlbik7CiB2YWxfc3RhdHVzX3QgdmFsX252bWVtX3JlYWQodWludDMyX3Qgb2Zmc2V0LCB2b2lkICpidWZmZXIsIGludCBzaXplKTsKIHZhbF9zdGF0dXNfdCB2YWxfbnZtZW1fd3JpdGUodWludDMyX3Qgb2Zmc2V0LCB2b2lkICpidWZmZXIsIGludCBzaXplKTsKZGlmZiAtLWdpdCBhL2FwaS10ZXN0cy92YWwvc3BlL3BhbF9pbnRlcmZhY2VzX3MuaCBiL2FwaS10ZXN0cy92YWwvc3BlL3BhbF9pbnRlcmZhY2VzX3MuaAppbmRleCBhOWVkZDcwLi4yY2E5ZTI4IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvdmFsL3NwZS9wYWxfaW50ZXJmYWNlc19zLmgKKysrIGIvYXBpLXRlc3RzL3ZhbC9zcGUvcGFsX2ludGVyZmFjZXNfcy5oCkBAIC0xLDUgKzEsNSBAQAogLyoqIEBmaWxlCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIEFybSBMaW1pdGVkIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXIgOiBBcGFjaGUtMi4wCiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CkBAIC0xOSw3ICsxOSw3IEBACiAjZGVmaW5lIF9WQUxfUEFMX0lOVEVSRkFDRV9BUElTX0hfCiAKIAotI2luY2x1ZGUgInZhbC9jb21tb24vdmFsLmgiCisjaW5jbHVkZSAidmFsLmgiCiAKIC8qIFBlcmlwaGVyYWxzIEFQSXMgKi8KIApAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICAgICAgICAgLSBkYXRhICAgICAgICAgICA6IFZhbHVlIGZvciBGb3JtYXQgc3BlY2lmaWVyCiAgICAgQHJldHVybiAgICAtIHZvaWQKICAqLwotdm9pZCBwYWxfcHJpbnQoY2hhciAqc3RyLCB1aW50MzJfdCBkYXRhKTsKK3ZvaWQgcGFsX3ByaW50KGNoYXIgKnN0ciwgaW50MzJfdCBkYXRhKTsKIAogLyoqCiAgICAgQGJyaWVmICAgICAgICAgICAtIEluaXRpYWxpemVzIGFuIGhhcmR3YXJlIHdhdGNoZG9nIHRpbWVyCkBAIC05MCw0ICs5MCwxOSBAQAogICAgIEByZXR1cm4gICAgLSBlcnJvciBzdGF0dXMgMDpTVUNDRVNTLCAxOkZBSUwKICovCiBpbnQgIHBhbF9udm1lbV9yZWFkKGFkZHJfdCBiYXNlLCB1aW50MzJfdCBvZmZzZXQsIHZvaWQgKmJ1ZmZlciwgaW50IHNpemUpOworCisvKioKKyAgICBAYnJpZWYgICAtIFRyaWdnZXIgaW50ZXJydXB0IGZvciBpcnEgc2lnbmFsIGFzc2lnbmVkIHRvIGRyaXZlciBwYXJ0aXRpb24KKyAgICAgICAgICAgICAgIGJlZm9yZSByZXR1cm4gdG8gY2FsbGVyLgorICAgIEBwYXJhbSAgIC0gdm9pZAorICAgIEByZXR1cm4gIC0gdm9pZAorKiovCit2b2lkIHBhbF9nZW5lcmF0ZV9pbnRlcnJ1cHQodm9pZCk7CisKKy8qKgorICAgIEBicmllZiAgIC0gRGlzYWJsZSBpbnRlcnJ1cHQgdGhhdCB3YXMgZ2VuZXJhdGVkIHVzaW5nIHBhbF9nZW5lcmF0ZV9pbnRlcnJ1cHQgQVBJLgorICAgIEBwYXJhbSAgIC0gdm9pZAorICAgIEByZXR1cm4gIC0gdm9pZAorKiovCit2b2lkIHBhbF9kaXNhYmxlX2ludGVycnVwdCh2b2lkKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3ZhbC9zcGUvdmFsX2RyaXZlcl9zZXJ2aWNlX2FwaXMuYyBiL2FwaS10ZXN0cy92YWwvc3BlL3ZhbF9kcml2ZXJfc2VydmljZV9hcGlzLmMKaW5kZXggNDZhMzE2Mi4uMDViMTRmZCAxMDA2NDQKLS0tIGEvYXBpLXRlc3RzL3ZhbC9zcGUvdmFsX2RyaXZlcl9zZXJ2aWNlX2FwaXMuYworKysgYi9hcGktdGVzdHMvdmFsL3NwZS92YWxfZHJpdmVyX3NlcnZpY2VfYXBpcy5jCkBAIC0xNyw3ICsxNyw3IEBACiAKIAogI2luY2x1ZGUgInZhbF9kcml2ZXJfc2VydmljZV9hcGlzLmgiCi0jaW5jbHVkZSAidmFsL2NvbW1vbi92YWxfdGFyZ2V0LmMiCisjaW5jbHVkZSAidmFsX3RhcmdldC5jIgogCiBwcmludF92ZXJib3NpdHlfdCAgZ19wcmludF9sZXZlbCA9IFBSSU5UX0lORk87CiBzdGF0aWMgaW50IGlzX3VhcnRfaW5pdF9kb25lID0gMDsKQEAgLTM5LDEwICszOSwxMCBAQAogICAgIEBicmllZiAgICAgLSBUaGlzIGZ1bmN0aW9uIHBhcnNlcyB0aGUgaW5wdXQgc3RyaW5nIGFuZCB3cml0ZXMgYnl0ZSBieSBieXRlIHRvCiAgICAgICAgICAgICAgICAgIHByaW50IHRoZSBpbnB1dCBzdHJpbmcKICAgICBAcGFyYW0gICAgIC0gcG9pbnRlciAgICAgICAgIDogSW5wdXQgU3RyaW5nCi0gICAgICAgICAgICAgICAtIGRhdGEgICAgICAgICAgIDogVmFsdWUgZm9yIEZvcm1hdCBzcGVjaWZpZXIKKyAgICAgICAgICAgICAgIC0gZGF0YSAgICAgICAgICAgIDogVmFsdWUgZm9yIEZvcm1hdCBzcGVjaWZpZXIKICAgICBAcmV0dXJuICAgIC0gZXJyb3Igc3RhdHVzCiAgKi8KLXZhbF9zdGF0dXNfdCB2YWxfcHJpbnRfc2YoY2hhciAqc3RyaW5nLCB1aW50MzJfdCBkYXRhKQordmFsX3N0YXR1c190IHZhbF9wcmludF9zZihjaGFyICpzdHJpbmcsIGludDMyX3QgZGF0YSkKIHsKICAgICBpZiAoaXNfdWFydF9pbml0X2RvbmUgPT0gMSkKICAgICB7CkBAIC0xOTksMyArMTk5LDQ3IEBACiAKICAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7CiB9CisKKy8qKgorICAgIEBicmllZiAgICAtIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZHJpdmVyIHJlc2VydmVkIG1taW8gcmVnaW9uIGJhc2UKKyAgICBAcGFyYW0gICAgLSBiYXNlIHBvaW50ZXIKKyAgICBAcmV0dXJuICAgLSB2YWxfc3RhdHVzX3QKKyoqLwordmFsX3N0YXR1c190IHZhbF9nZXRfZHJpdmVyX21taW9fYWRkcihhZGRyX3QgKmJhc2VfYWRkcikKK3sKKyAgIHZhbF9zdGF0dXNfdCAgICAgc3RhdHVzOworICAgbWVtb3J5X2Rlc2NfdCAgICptZW1vcnlfZGVzYzsKKworICAgc3RhdHVzID0gdmFsX3RhcmdldF9nZXRfY29uZmlnKFRBUkdFVF9DT05GSUdfQ1JFQVRFX0lEKEdST1VQX01FTU9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRU1PUllfRFJJVkVSX1BBUlRJVElPTl9NTUlPLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKikmbWVtb3J5X2Rlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90ICopc2l6ZW9mKG1lbW9yeV9kZXNjX3QpKTsKKyAgIGlmIChWQUxfRVJST1Ioc3RhdHVzKSkKKyAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgIH0KKworICAgKmJhc2VfYWRkciA9IG1lbW9yeV9kZXNjLT5zdGFydDsKKyAgIHJldHVybiBWQUxfU1RBVFVTX1NVQ0NFU1M7Cit9CisKKy8qKgorICAgIEBicmllZiAgIC0gVHJpZ2dlciBpbnRlcnJ1cHQgZm9yIGlycSBzaWduYWwgYXNzaWduZWQgdG8gZHJpdmVyIHBhcnRpdGlvbgorICAgICAgICAgICAgICAgYmVmb3JlIHJldHVybiB0byBjYWxsZXIuCisgICAgQHBhcmFtICAgLSB2b2lkCisgICAgQHJldHVybiAgLSB2b2lkCisqKi8KK3ZvaWQgdmFsX2dlbmVyYXRlX2ludGVycnVwdCh2b2lkKQoreworICAgIHBhbF9nZW5lcmF0ZV9pbnRlcnJ1cHQoKTsKK30KKworLyoqCisgICAgQGJyaWVmICAgLSBEaXNhYmxlIGludGVycnVwdCB0aGF0IHdhcyBnZW5lcmF0ZWQgdXNpbmcgdmFsX2dlbmVyYXRlX2ludGVycnVwdCBBUEkuCisgICAgQHBhcmFtICAgLSB2b2lkCisgICAgQHJldHVybiAgLSB2b2lkCisqKi8KK3ZvaWQgdmFsX2Rpc2FibGVfaW50ZXJydXB0KHZvaWQpCit7CisgICAgcGFsX2Rpc2FibGVfaW50ZXJydXB0KCk7Cit9CmRpZmYgLS1naXQgYS9hcGktdGVzdHMvdmFsL3NwZS92YWxfZHJpdmVyX3NlcnZpY2VfYXBpcy5oIGIvYXBpLXRlc3RzL3ZhbC9zcGUvdmFsX2RyaXZlcl9zZXJ2aWNlX2FwaXMuaAppbmRleCA5NjE0ZTM1Li4yNTFhMDY1IDEwMDY0NAotLS0gYS9hcGktdGVzdHMvdmFsL3NwZS92YWxfZHJpdmVyX3NlcnZpY2VfYXBpcy5oCisrKyBiL2FwaS10ZXN0cy92YWwvc3BlL3ZhbF9kcml2ZXJfc2VydmljZV9hcGlzLmgKQEAgLTIwLDIwICsyMCwxMyBAQAogCiAjaW5jbHVkZSAidmFsLmgiCiAjaW5jbHVkZSAidmFsX2NsaWVudF9kZWZzLmgiCi0jaW5jbHVkZSAidmFsX3NlcnZpY2VfZGVmcy5oIgogI2luY2x1ZGUgInBhbF9pbnRlcmZhY2VzX3MuaCIKIAotLyogInBzYV9tYW5pZmVzdC88bWFuaWZlc3RmaWxlbmFtZT4uaCIgTWFuaWZlc3QgZGVmaW5pdGlvbnMuIE9ubHkgYWNjZXNzaWJsZSB0byBTZWN1cmUgUGFydGl0aW9uLgotICogVGhlIGZpbGUgbmFtZSBpcyBiYXNlZCBvbiB0aGUgbmFtZSBvZiB0aGUgU2VjdXJlIFBhcnRpdGlvbnMgbWFuaWZlc3QgZmlsZS4KLSAqIFRoZSBuYW1lIG11c3Qgbm90IGNvbGxpZGUgd2l0aCBvdGhlciBoZWFkZXIgZmlsZXMuCi0gKiBDb21wbGlhbmNlIHRlc3RzIGV4cGVjdCB0aGUgYmVsb3cgbWFuaWZlc3Qgb3V0cHV0IGZpbGVzIGltcGxlbWVudGF0aW9uIGZyb20gYnVpbGQgdG9vbC4KLSAqLwotI2luY2x1ZGUgInBzYV9tYW5pZmVzdC9kcml2ZXJfcGFydGl0aW9uX3BzYS5oIgotCi0jZGVmaW5lIFVTRV9SQVdfUFJJTlRfRk9SX0RSSVZFUl9QQVJUSVRJT04gMQorI2RlZmluZSBEUklWRVJfUEFSVElUSU9OX0lOQ0xVREUKKyNpbmNsdWRlICJ2YWxfc2VydmljZV9kZWZzLmgiCiAKIHZhbF9zdGF0dXNfdCB2YWxfdWFydF9pbml0X3NmKGFkZHJfdCB1YXJ0X2Jhc2VfYWRkcik7Ci12YWxfc3RhdHVzX3QgdmFsX3ByaW50X3NmKGNoYXIgKnN0cmluZywgdWludDMyX3QgZGF0YSk7Cit2YWxfc3RhdHVzX3QgdmFsX3ByaW50X3NmKGNoYXIgKnN0cmluZywgaW50MzJfdCBkYXRhKTsKIHZhbF9zdGF0dXNfdCB2YWxfd2RfdGltZXJfaW5pdF9zZihhZGRyX3QgYmFzZV9hZGRyLCB1aW50MzJfdCB0aW1lX3VzLCB1aW50MzJfdCB0aW1lcl90aWNrX3VzKTsKIHZhbF9zdGF0dXNfdCB2YWxfd2RfdGltZXJfZW5hYmxlX3NmKGFkZHJfdCBiYXNlX2FkZHIpOwogdmFsX3N0YXR1c190IHZhbF93ZF90aW1lcl9kaXNhYmxlX3NmKGFkZHJfdCBiYXNlX2FkZHIpOwpAQCAtNDIsNCArMzUsNyBAQAogdmFsX3N0YXR1c190IHZhbF9udm1lbV93cml0ZV9zZihhZGRyX3QgYmFzZSwgdWludDMyX3Qgb2Zmc2V0LCB2b2lkICpidWZmZXIsIGludCBzaXplKTsKIHZhbF9zdGF0dXNfdCB2YWxfZHJpdmVyX3ByaXZhdGVfc2V0X2Jvb3RfZmxhZ19mbihib290X3N0YXRlX3Qgc3RhdGUpOwogdmFsX3N0YXR1c190IHZhbF9pbml0X2RyaXZlcl9tZW1vcnkodm9pZCk7Cit2YWxfc3RhdHVzX3QgdmFsX2dldF9kcml2ZXJfbW1pb19hZGRyKGFkZHJfdCAqYmFzZV9hZGRyKTsKK3ZvaWQgdmFsX2dlbmVyYXRlX2ludGVycnVwdCh2b2lkKTsKK3ZvaWQgdmFsX2Rpc2FibGVfaW50ZXJydXB0KHZvaWQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcGktdGVzdHMvdmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oIGIvYXBpLXRlc3RzL3ZhbC9zcGUvdmFsX3BhcnRpdGlvbl9jb21tb24uaAppbmRleCBkZjM2NDAyLi43NmI1YzhjIDEwMDY0NAotLS0gYS9hcGktdGVzdHMvdmFsL3NwZS92YWxfcGFydGl0aW9uX2NvbW1vbi5oCisrKyBiL2FwaS10ZXN0cy92YWwvc3BlL3ZhbF9wYXJ0aXRpb25fY29tbW9uLmgKQEAgLTMwLDE2ICszMCw4IEBACiAjaW5jbHVkZSAidmFsX3RhcmdldC5jIgogI2luY2x1ZGUgInZhbF9zZXJ2aWNlX2RlZnMuaCIKIAotLyogInBzYV9tYW5pZmVzdC88bWFuaWZlc3RmaWxlbmFtZT4uaCIgTWFuaWZlc3QgZGVmaW5pdGlvbnMuIE9ubHkgYWNjZXNzaWJsZSB0byBTZWN1cmUgUGFydGl0aW9uLgotICogVGhlIGZpbGUgbmFtZSBpcyBiYXNlZCBvbiB0aGUgbmFtZSBvZiB0aGUgU2VjdXJlIFBhcnRpdGlvbnMgbWFuaWZlc3QgZmlsZS4KLSAqIFRoZSBuYW1lIG11c3Qgbm90IGNvbGxpZGUgd2l0aCBvdGhlciBoZWFkZXIgZmlsZXMuCi0gKiBDb21wbGlhbmNlIHRlc3RzIGV4cGVjdCB0aGUgYmVsb3cgbWFuaWZlc3Qgb3V0cHV0IGZpbGVzIGltcGxlbWVudGF0aW9uIGZyb20gYnVpbGQgdG9vbC4KLSAqLwotI2luY2x1ZGUgInBzYV9tYW5pZmVzdC9jbGllbnRfcGFydGl0aW9uX3BzYS5oIgotI2luY2x1ZGUgInBzYV9tYW5pZmVzdC9zZXJ2ZXJfcGFydGl0aW9uX3BzYS5oIgotCiBfX1VOVVNFRCBTVEFUSUNfREVDTEFSRSB2YWxfc3RhdHVzX3QgdmFsX3ByaW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAocHJpbnRfdmVyYm9zaXR5X3QgdmVyYm9zaXR5LCBjaGFyICpzdHJpbmcsIHVpbnQzMl90IGRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgKHByaW50X3ZlcmJvc2l0eV90IHZlcmJvc2l0eSwgY2hhciAqc3RyaW5nLCBpbnQzMl90IGRhdGEpOwogX19VTlVTRUQgU1RBVElDX0RFQ0xBUkUgdmFsX3N0YXR1c190IHZhbF9pcGNfY29ubmVjdAogICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90IHNpZCwgdWludDMyX3QgbWlub3JfdmVyc2lvbiwgcHNhX2hhbmRsZV90ICpoYW5kbGUgKTsKIF9fVU5VU0VEIFNUQVRJQ19ERUNMQVJFIHZhbF9zdGF0dXNfdCB2YWxfaXBjX2NhbGwKQEAgLTUyLDcgKzQ0LDcgQEAKIF9fVU5VU0VEIFNUQVRJQ19ERUNMQVJFIHZhbF9zdGF0dXNfdCB2YWxfcHJvY2Vzc19kaXNjb25uZWN0X3JlcXVlc3QKICAgICAgICAgICAgICAgICAgICAgICAgIChwc2Ffc2lnbmFsX3Qgc2lnLCBwc2FfbXNnX3QgKm1zZyk7CiBfX1VOVVNFRCBTVEFUSUNfREVDTEFSRSB2YWxfc3RhdHVzX3QgdmFsX2V4ZWN1dGVfc2VjdXJlX3Rlc3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QgdGVzdF9udW0sIGNsaWVudF90ZXN0X3QgKnRlc3RzX2xpc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3RfaW5mb190IHRlc3RfaW5mbywgY2xpZW50X3Rlc3RfdCAqdGVzdHNfbGlzdCk7CiBfX1VOVVNFRCBTVEFUSUNfREVDTEFSRSB2YWxfc3RhdHVzX3QgdmFsX2V4ZWN1dGVfc2VjdXJlX3Rlc3RfZnVuYwogICAgICAgICAgICAgICAgICAgICAgICAgKHBzYV9oYW5kbGVfdCAqaGFuZGxlLCB0ZXN0X2luZm9fdCB0ZXN0X2luZm8sIHVpbnQzMl90IHNpZCk7CiBfX1VOVVNFRCBTVEFUSUNfREVDTEFSRSB2YWxfc3RhdHVzX3QgdmFsX2dldF9zZWN1cmVfdGVzdF9yZXN1bHQocHNhX2hhbmRsZV90ICpoYW5kbGUpOwpAQCAtNzAsNiArNjIsOSBAQAogICAgIC5pcGNfY2xvc2UgICAgICAgICAgICAgICAgID0gdmFsX2lwY19jbG9zZSwKICAgICAuc2V0X2Jvb3RfZmxhZyAgICAgICAgICAgICA9IHZhbF9zZXRfYm9vdF9mbGFnLAogICAgIC50YXJnZXRfZ2V0X2NvbmZpZyAgICAgICAgID0gdmFsX3RhcmdldF9nZXRfY29uZmlnLAorICAgIC5wcm9jZXNzX2Nvbm5lY3RfcmVxdWVzdCAgID0gdmFsX3Byb2Nlc3NfY29ubmVjdF9yZXF1ZXN0LAorICAgIC5wcm9jZXNzX2NhbGxfcmVxdWVzdCAgICAgID0gdmFsX3Byb2Nlc3NfY2FsbF9yZXF1ZXN0LAorICAgIC5wcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdD0gdmFsX3Byb2Nlc3NfZGlzY29ubmVjdF9yZXF1ZXN0LAogfTsKIAogX19VTlVTRUQgc3RhdGljIHBzYV9hcGlfdCBwc2FfYXBpID0gewpAQCAtNzgsNiArNzMsMTcgQEAKICAgICAuY29ubmVjdCAgICAgICAgICAgICAgID0gcHNhX2Nvbm5lY3QsCiAgICAgLmNhbGwgICAgICAgICAgICAgICAgICA9IHBzYV9jYWxsLAogICAgIC5jbG9zZSAgICAgICAgICAgICAgICAgPSBwc2FfY2xvc2UsCisgICAgLndhaXQgICAgICAgICAgICAgICAgICA9IHBzYV93YWl0LAorICAgIC5zZXRfcmhhbmRsZSAgICAgICAgICAgPSBwc2Ffc2V0X3JoYW5kbGUsCisgICAgLmdldCAgICAgICAgICAgICAgICAgICA9IHBzYV9nZXQsCisgICAgLnJlYWQgICAgICAgICAgICAgICAgICA9IHBzYV9yZWFkLAorICAgIC5za2lwICAgICAgICAgICAgICAgICAgPSBwc2Ffc2tpcCwKKyAgICAud3JpdGUgICAgICAgICAgICAgICAgID0gcHNhX3dyaXRlLAorICAgIC5yZXBseSAgICAgICAgICAgICAgICAgPSBwc2FfcmVwbHksCisgICAgLm5vdGlmeSAgICAgICAgICAgICAgICA9IHBzYV9ub3RpZnksCisgICAgLmNsZWFyICAgICAgICAgICAgICAgICA9IHBzYV9jbGVhciwKKyAgICAuZW9pICAgICAgICAgICAgICAgICAgID0gcHNhX2VvaSwKKyAgICAucm90X2xpZmVjeWNsZV9zdGF0ZSAgID0gcHNhX3JvdF9saWZlY3ljbGVfc3RhdGUsCiB9OwogCiAvKioKQEAgLTg4LDcgKzk0LDcgQEAKICAgICAgICAgICAgICAgLSBkYXRhICAgICA6IFZhbHVlIGZvciBmb3JtYXQgc3BlY2lmaWVyCiAgICAgQHJldHVybiAgIC0gdmFsX3N0YXR1c190CiAqKi8KLVNUQVRJQ19ERUNMQVJFIHZhbF9zdGF0dXNfdCB2YWxfcHJpbnQocHJpbnRfdmVyYm9zaXR5X3QgdmVyYm9zaXR5LCBjaGFyICpzdHJpbmcsIHVpbnQzMl90IGRhdGEpCitTVEFUSUNfREVDTEFSRSB2YWxfc3RhdHVzX3QgdmFsX3ByaW50KHByaW50X3ZlcmJvc2l0eV90IHZlcmJvc2l0eSwgY2hhciAqc3RyaW5nLCBpbnQzMl90IGRhdGEpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHN0cmluZ19sZW4gPSAwOwogICAgIGNoYXIgICAgICAgICAgICAqcCA9IHN0cmluZzsKQEAgLTEwOCw3ICsxMTQsNyBAQAogICAgICAgICBwKys7CiAgICAgfQogCi0gICAgcHNhX2ludmVjIGRhdGExWzNdID0ge3smdWFydF9mbiwgc2l6ZW9mKHVhcnRfZm4pfSwge3N0cmluZywgc3RyaW5nX2xlbisxfSwgeyZkYXRhLCA0fX07CisgICAgcHNhX2ludmVjIGRhdGExWzNdID0ge3smdWFydF9mbiwgc2l6ZW9mKHVhcnRfZm4pfSwge3N0cmluZywgc3RyaW5nX2xlbisxfSwgeyZkYXRhLCBzaXplb2YoZGF0YSl9fTsKICAgICBwcmludF9oYW5kbGUgPSBwc2FfY29ubmVjdChEUklWRVJfVUFSVF9TSUQsIDApOwogCiAgICAgaWYgKHByaW50X2hhbmRsZSA8IDApCkBAIC0zMDEsMjMgKzMwNywyMSBAQAogLyoqCiAgICAgQGJyaWVmICAgIC0gVGhpcyBmdW5jdGlvbiBleGVjdXRlcyBnaXZlbiBsaXN0IG9mIHRlc3RzIGZyb20gc2VjdXJlIHNlcXVlbnRpYWxseQogICAgICAgICAgICAgICAgIFRoaXMgY292ZXJzIHNlY3VyZSB0byBzZWN1cmUgSVBDIEFQSSBzY2VuYXJpbwotICAgIEBwYXJhbSAgICAtIHRlc3RfbnVtICA6IFRlc3RfbnVtCisgICAgQHBhcmFtICAgIC0gdGVzdF9pbmZvX3QgOiB0ZXN0X251bSBhbmQgYmxvY2tfbnVtCiAgICAgQHBhcmFtICAgIC0gdGVzdHNfbGlzdCA6IGxpc3Qgb2YgdGVzdHMgdG8gYmUgZXhlY3V0ZWQKICAgICBAcmV0dXJuICAgLSB2YWxfc3RhdHVzX3QKICoqLwotU1RBVElDX0RFQ0xBUkUgdmFsX3N0YXR1c190IHZhbF9leGVjdXRlX3NlY3VyZV90ZXN0cyh1aW50MzJfdCB0ZXN0X251bSwgY2xpZW50X3Rlc3RfdCAqdGVzdHNfbGlzdCkKK1NUQVRJQ19ERUNMQVJFIHZhbF9zdGF0dXNfdCB2YWxfZXhlY3V0ZV9zZWN1cmVfdGVzdHModGVzdF9pbmZvX3QgdGVzdF9pbmZvLCBjbGllbnRfdGVzdF90ICp0ZXN0c19saXN0KQogewogICAgIHZhbF9zdGF0dXNfdCAgICAgICAgICBzdGF0dXMgPSBWQUxfU1RBVFVTX1NVQ0NFU1M7CiAgICAgdmFsX3N0YXR1c190ICAgICAgICAgIHRlc3Rfc3RhdHVzID0gVkFMX1NUQVRVU19TVUNDRVNTOwogICAgIHBzYV9oYW5kbGVfdCAgICAgICAgICBoYW5kbGU7Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgIGkgPSAxOwotICAgIHRlc3RfaW5mb190ICAgICAgICAgICB0ZXN0X2luZm87Ci0KLSAgICB0ZXN0X2luZm8udGVzdF9udW0gPSB0ZXN0X251bTsKLSAgICB2YWxfcHJpbnQoUFJJTlRfVEVTVCwgIltJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBzZWN1cmVcbiIsIDApOworICAgIGludCAgICAgICAgICAgICAgICAgICBpID0gdGVzdF9pbmZvLmJsb2NrX251bTsKIAogICAgIHdoaWxlICh0ZXN0c19saXN0W2ldICE9IE5VTEwpCiAgICAgeworICAgICAgICBpZiAoaSA9PSAxKQorICAgICAgICB2YWxfcHJpbnQoUFJJTlRfVEVTVCwgIltJbmZvXSBFeGVjdXRpbmcgdGVzdHMgZnJvbSBzZWN1cmVcbiIsIDApOwogCiAgICAgICAgIC8qIEhhbmRzaGFrZSB3aXRoIHNlcnZlciB0ZXN0cyAqLwogICAgICAgICB0ZXN0X2luZm8uYmxvY2tfbnVtID0gaTsKQEAgLTUxMyw3ICs1MTcsNyBAQAogICAgc3RhdHVzID0gdmFsX252bWVtX3dyaXRlKFZBTF9OVk1FTV9PRkZTRVQoTlZfQk9PVCksICZib290LCBzaXplb2YoYm9vdF90KSk7CiAgICBpZiAoVkFMX0VSUk9SKHN0YXR1cykpCiAgICB7Ci0gICAgICAgdmFsX3ByaW50KFBSSU5UX0VSUk9SLCAidmFsX252bWVtX3dyaXRlIGZhaWxlZCBFcnJvcj0weCV4XG4iLCBzdGF0dXMpOworICAgICAgIHZhbF9wcmludChQUklOVF9FUlJPUiwgIlx0dmFsX252bWVtX3dyaXRlIGZhaWxlZCBFcnJvcj0weCV4XG4iLCBzdGF0dXMpOwogICAgICAgIHJldHVybiBzdGF0dXM7CiAgICB9CiAgICByZXR1cm4gc3RhdHVzOwpkaWZmIC0tZ2l0IGEvYXBpLXRlc3RzL3ZhbC9zcGUvdmFsX3NlcnZpY2VfZGVmcy5oIGIvYXBpLXRlc3RzL3ZhbC9zcGUvdmFsX3NlcnZpY2VfZGVmcy5oCmluZGV4IDUxYjZkNWMuLmI0OTliNWQgMTAwNjQ0Ci0tLSBhL2FwaS10ZXN0cy92YWwvc3BlL3ZhbF9zZXJ2aWNlX2RlZnMuaAorKysgYi9hcGktdGVzdHMvdmFsL3NwZS92YWxfc2VydmljZV9kZWZzLmgKQEAgLTEsNSArMSw1IEBACiAvKiogQGZpbGUKLSAqIENvcHlyaWdodCAoYykgMjAxOCwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgQXJtIExpbWl0ZWQgb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllciA6IEFwYWNoZS0yLjAKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKQEAgLTIwLDE2ICsyMCwyNSBAQAogCiAvKioqKioqKioqKioqKioqKiogUFNBIFNlY3VyZSBGdW5jdGlvbiBBUEkgKioqKioqKioqKioqKioqKiovCiAKLS8qIE5vdGUgLSBUaGlzIGhlYWRlciBmaWxlIGNvbnRhaW50cyB0aGUgZGVjbGFyYXRpb24gb2YgUFNBIGRlZmluZWQgc2VjdXJlIHBhcnRpdGlvbiBzZXJ2aWNlIEFQSQotICAgZWxlbWVudHMuIElkZWFsbHksIFRoZXNlIGVsZW1lbnRzIG11c3QgYmUgZGVmaW5lZCBpbiBhIGhlYWRlciBmaWxlIDxwc2Ffc2VydmljZS5oPiBieSBTUE0KLSAgIGltcGxlbWVudGVkIGxpYnJhcnkgYW5kIHByb3ZpZGVkIHRvIGNsaWVudHMgb3BlcmF0aW9uIGluIE5TUEUgYW5kIFNQRSBhcyBwZXIgdGhlIHNwZWNpZmljYXRpb24uCi0gICBJZiB0aGlzIGlzIGF2YWlsYWJsZSBpbiB0aGUgcGxhdGZvcm0sIHRoZSBlbGVtZW50cyBkZWNsYXJlZCBhcyBwYXJ0IG9mIHRoaXMKLSAgIGZpbGUgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHBhc3NpbmcgIC0taW5jbHVkZSA8cGF0aF90b19wc2Ffc2VydmljZV9oPiB0byBzZXR1cC5zaCBzY3JpcHQuCi0gICovCi0KIC8qIHBzYS9zZXJ2aWNlLmg6IFNlY3VyZSBQYXJ0aXRpb24gQVBJIGVsZW1lbnRzLiBPbmx5IGFjY2Vzc2libGUgdG8gU2VjdXJlIFBhcnRpdGlvbiAqLwogI2luY2x1ZGUgInBzYS9zZXJ2aWNlLmgiCiAKKy8qIHBzYS9saWZlY3ljbGUuaDogQ29udGFpbnMgdGhlIFBTQSBMaWZlY3ljbGUgQVBJIGVsZW1lbnRzICovCisjaW5jbHVkZSAicHNhL2xpZmVjeWNsZS5oIgorCisvKiAicHNhX21hbmlmZXN0LzxtYW5pZmVzdGZpbGVuYW1lPi5oIiBNYW5pZmVzdCBkZWZpbml0aW9ucy4gT25seSBhY2Nlc3NpYmxlIHRvIFNlY3VyZSBQYXJ0aXRpb24uCisgKiBUaGUgZmlsZSBuYW1lIGlzIGJhc2VkIG9uIHRoZSBuYW1lIG9mIHRoZSBTZWN1cmUgUGFydGl0aW9ucyBtYW5pZmVzdCBmaWxlLgorICogVGhlIG5hbWUgbXVzdCBub3QgY29sbGlkZSB3aXRoIG90aGVyIGhlYWRlciBmaWxlcy4KKyAqIENvbXBsaWFuY2UgdGVzdHMgZXhwZWN0IHRoZSBiZWxvdyBtYW5pZmVzdCBvdXRwdXQgZmlsZXMgaW1wbGVtZW50YXRpb24gZnJvbSBidWlsZCB0b29sLgorICovCisjaW5jbHVkZSAicHNhX21hbmlmZXN0L2RyaXZlcl9wYXJ0aXRpb25fcHNhLmgiCisjaWZuZGVmIERSSVZFUl9QQVJUSVRJT05fSU5DTFVERQorI2luY2x1ZGUgInBzYV9tYW5pZmVzdC9jbGllbnRfcGFydGl0aW9uX3BzYS5oIgorI2luY2x1ZGUgInBzYV9tYW5pZmVzdC9zZXJ2ZXJfcGFydGl0aW9uX3BzYS5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJ2YWxfdGFyZ2V0LmgiCisKIC8qIHN0cnVjdCBvZiBmdW5jdGlvbiBwb2ludGVycyB0byB1bmlxaWZ5ICBuc3BlIGFuZCBzcGUgY2xpZW50IGludGVyZmFjZSBmb3IgdGVzdCAqLwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIHVpbnQzMl90ICAgICAgICAgKCpmcmFtZXdvcmtfdmVyc2lvbikgICAgICh2b2lkKTsKQEAgLTQyLDIxICs1MSwzOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvdXRfbGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICB2b2lkICAgICAgICAgICAgICgqY2xvc2UpICAgICAgICAgICAgICAgICAocHNhX2hhbmRsZV90IGhhbmRsZSk7CisgICAgcHNhX3NpZ25hbF90ICAgICAoKndhaXQpICAgICAgICAgICAgICAgICAgKHBzYV9zaWduYWxfdCBzaWduYWxfbWFzaywgdWludDMyX3QgdGltZW91dCk7CisgICAgdm9pZCAgICAgICAgICAgICAoKnNldF9yaGFuZGxlKSAgICAgICAgICAgKHBzYV9oYW5kbGVfdCBtc2dfaGFuZGxlLCB2b2lkICpyaGFuZGxlKTsKKyAgICBwc2Ffc3RhdHVzX3QgICAgICgqZ2V0KSAgICAgICAgICAgICAgICAgICAocHNhX3NpZ25hbF90IHNpZ25hbCwgcHNhX21zZ190ICptc2cpOworICAgIHNpemVfdCAgICAgICAgICAgKCpyZWFkKSAgICAgICAgICAgICAgICAgIChwc2FfaGFuZGxlX3QgbXNnX2hhbmRsZSwgdWludDMyX3QgaW52ZWNfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBudW1fYnl0ZXMpOworICAgIHNpemVfdCAgICAgICAgICAgKCpza2lwKSAgICAgICAgICAgICAgICAgIChwc2FfaGFuZGxlX3QgbXNnX2hhbmRsZSwgdWludDMyX3QgaW52ZWNfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbnVtX2J5dGVzKTsKKyAgICB2b2lkICAgICAgICAgICAgICgqd3JpdGUpICAgICAgICAgICAgICAgICAocHNhX2hhbmRsZV90IG1zZ19oYW5kbGUsIHVpbnQzMl90IG91dHZlY19pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IG51bV9ieXRlcyk7CisgICAgdm9pZCAgICAgICAgICAgICAoKnJlcGx5KSAgICAgICAgICAgICAgICAgKHBzYV9oYW5kbGVfdCBtc2dfaGFuZGxlLCBwc2Ffc3RhdHVzX3Qgc3RhdHVzKTsKKyAgICB2b2lkICAgICAgICAgICAgICgqbm90aWZ5KSAgICAgICAgICAgICAgICAoaW50MzJfdCBwYXJ0aXRpb25faWQpOworICAgIHZvaWQgICAgICAgICAgICAgKCpjbGVhcikgICAgICAgICAgICAgICAgICh2b2lkKTsKKyAgICB2b2lkICAgICAgICAgICAgICgqZW9pKSAgICAgICAgICAgICAgICAgICAocHNhX3NpZ25hbF90IGlycV9zaWduYWwpOworICAgIHVpbnQzMl90ICAgICAgICAgKCpyb3RfbGlmZWN5Y2xlX3N0YXRlKSAgICh2b2lkKTsKIH0gcHNhX2FwaV90OwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gIHZhbF9zdGF0dXNfdCAoKnByaW50KSAgICAgICAgICAgICAgICAgICAgKHByaW50X3ZlcmJvc2l0eV90IHZlcmJvc2l0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqc3RyaW5nLCB1aW50MzJfdCBkYXRhKTsKLSAgdmFsX3N0YXR1c190ICgqZXJyX2NoZWNrX3NldCkgICAgICAgICAgICAodWludDMyX3QgY2hlY2twb2ludCwgdmFsX3N0YXR1c190IHN0YXR1cyk7Ci0gIHZhbF9zdGF0dXNfdCAoKmV4ZWN1dGVfc2VjdXJlX3Rlc3RfZnVuYykgKHBzYV9oYW5kbGVfdCAqaGFuZGxlLCB0ZXN0X2luZm9fdCB0ZXN0X2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpZCk7Ci0gIHZhbF9zdGF0dXNfdCAoKmdldF9zZWN1cmVfdGVzdF9yZXN1bHQpICAgKHBzYV9oYW5kbGVfdCAqaGFuZGxlKTsKLSAgdmFsX3N0YXR1c190ICgqaXBjX2Nvbm5lY3QpICAgICAgICAgICAgICAodWludDMyX3Qgc2lkLCB1aW50MzJfdCBtaW5vcl92ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2FfaGFuZGxlX3QgKmhhbmRsZSApOwotICB2YWxfc3RhdHVzX3QgKCppcGNfY2FsbCkgICAgICAgICAgICAgICAgIChwc2FfaGFuZGxlX3QgaGFuZGxlLCBwc2FfaW52ZWMgKmluX3ZlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGluX2xlbiwgIHBzYV9vdXR2ZWMgKm91dF92ZWMsIHNpemVfdCBvdXRfbGVuKTsKLSAgdm9pZCAgICAgICAgICgqaXBjX2Nsb3NlKSAgICAgICAgICAgICAgICAocHNhX2hhbmRsZV90IGhhbmRsZSk7Ci0gIHZhbF9zdGF0dXNfdCAoKnNldF9ib290X2ZsYWcpICAgICAgICAgICAgKGJvb3Rfc3RhdGVfdCBzdGF0ZSk7Ci0gIHZhbF9zdGF0dXNfdCAoKnRhcmdldF9nZXRfY29uZmlnKSAgICAgICAgKGNmZ19pZF90IGNmZ19pZCwgdWludDhfdCAqKmRhdGEsIHVpbnQzMl90ICpzaXplKTsKKyAgdmFsX3N0YXR1c190ICgqcHJpbnQpICAgICAgICAgICAgICAgICAgICAgIChwcmludF92ZXJib3NpdHlfdCB2ZXJib3NpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqc3RyaW5nLCBpbnQzMl90IGRhdGEpOworICB2YWxfc3RhdHVzX3QgKCplcnJfY2hlY2tfc2V0KSAgICAgICAgICAgICAgKHVpbnQzMl90IGNoZWNrcG9pbnQsIHZhbF9zdGF0dXNfdCBzdGF0dXMpOworICB2YWxfc3RhdHVzX3QgKCpleGVjdXRlX3NlY3VyZV90ZXN0X2Z1bmMpICAgKHBzYV9oYW5kbGVfdCAqaGFuZGxlLCB0ZXN0X2luZm9fdCB0ZXN0X2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2lkKTsKKyAgdmFsX3N0YXR1c190ICgqZ2V0X3NlY3VyZV90ZXN0X3Jlc3VsdCkgICAgIChwc2FfaGFuZGxlX3QgKmhhbmRsZSk7CisgIHZhbF9zdGF0dXNfdCAoKmlwY19jb25uZWN0KSAgICAgICAgICAgICAgICAodWludDMyX3Qgc2lkLCB1aW50MzJfdCBtaW5vcl92ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzYV9oYW5kbGVfdCAqaGFuZGxlICk7CisgIHZhbF9zdGF0dXNfdCAoKmlwY19jYWxsKSAgICAgICAgICAgICAgICAgICAocHNhX2hhbmRsZV90IGhhbmRsZSwgcHNhX2ludmVjICppbl92ZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGluX2xlbiwgIHBzYV9vdXR2ZWMgKm91dF92ZWMsIHNpemVfdCBvdXRfbGVuKTsKKyAgdm9pZCAgICAgICAgICgqaXBjX2Nsb3NlKSAgICAgICAgICAgICAgICAgIChwc2FfaGFuZGxlX3QgaGFuZGxlKTsKKyAgdmFsX3N0YXR1c190ICgqc2V0X2Jvb3RfZmxhZykgICAgICAgICAgICAgIChib290X3N0YXRlX3Qgc3RhdGUpOworICB2YWxfc3RhdHVzX3QgKCp0YXJnZXRfZ2V0X2NvbmZpZykgICAgICAgICAgKGNmZ19pZF90IGNmZ19pZCwgdWludDhfdCAqKmRhdGEsIHVpbnQzMl90ICpzaXplKTsKKyAgdmFsX3N0YXR1c190ICgqcHJvY2Vzc19jb25uZWN0X3JlcXVlc3QpICAgIChwc2Ffc2lnbmFsX3Qgc2lnLCBwc2FfbXNnX3QgKm1zZyk7CisgIHZhbF9zdGF0dXNfdCAoKnByb2Nlc3NfY2FsbF9yZXF1ZXN0KSAgICAgICAocHNhX3NpZ25hbF90IHNpZywgcHNhX21zZ190ICptc2cpOworICB2YWxfc3RhdHVzX3QgKCpwcm9jZXNzX2Rpc2Nvbm5lY3RfcmVxdWVzdCkgKHBzYV9zaWduYWxfdCBzaWcsIHBzYV9tc2dfdCAqbXNnKTsKIH0gdmFsX2FwaV90OwogI2VuZGlmCg==