LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICogICAgICAgICBBVE1FTCBNaWNyb2NvbnRyb2xsZXIgU29mdHdhcmUgU3VwcG9ydCANCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqIENvcHlyaWdodCAoYykgMjAwOCwgQXRtZWwgQ29ycG9yYXRpb24NCiAqDQogKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KICoNCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQogKg0KICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQogKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGRpc2NsYWltZXIgYmVsb3cuDQogKg0KICogQXRtZWwncyBuYW1lIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQogKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KICoNCiAqIERJU0NMQUlNRVI6IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVRNRUwgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1INCiAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YNCiAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQgQVJFDQogKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBVE1FTCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULA0KICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVA0KICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsDQogKiBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GDQogKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORw0KICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLA0KICogRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqLw0KDQovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8vIFx1bml0DQovLy8NCi8vLyAhUHVycG9zZQ0KLy8vIA0KLy8vIE1ldGhvZHMgdG8gbWFuYWdlIHRoZSBDb3Byb2Nlc3NvciAxNS4gQ29wcm9jZXNzb3IgMTUsIG9yIFN5c3RlbSBDb250cm9sIA0KLy8vIENvcHJvY2Vzc29yIENQMTUsIGlzIHVzZWQgdG8gY29uZmlndXJlIGFuZCBjb250cm9sIGFsbCB0aGUgaXRlbXMgaW4gdGhlIA0KLy8vIGxpc3QgYmVsb3c6DQovLy8glSBBUk0gY29yZQ0KLy8vIJUgQ2FjaGVzIChJQ2FjaGUsIERDYWNoZSBhbmQgd3JpdGUgYnVmZmVyKQ0KLy8vIJUgVENNDQovLy8glSBNTVUNCi8vLyCVIE90aGVyIHN5c3RlbSBvcHRpb25zDQovLy8gDQovLy8gIVVzYWdlDQovLy8NCi8vLyAtIyBFbmFibGUgb3IgZGlzYWJsZSBEIGNhY2hlIHdpdGggRW5hYmxlX0RfQ2FjaGUgYW5kIERpc2FibGVfRF9DYWNoZQ0KLy8vIC0jIEVuYWJsZSBvciBkaXNhYmxlIEkgY2FjaGUgd2l0aCBFbmFibGVfSV9DYWNoZSBhbmQgRGlzYWJsZV9JX0NhY2hlDQovLy8NCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiNpZm5kZWYgX0NQMTVfSA0KI2RlZmluZSBfQ1AxNV9IDQoNCiNpZmRlZiBDUDE1X1BSRVNFTlQNCg0KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gICAgICAgICBFeHBvcnRlZCBmdW5jdGlvbnMNCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmV4dGVybiB2b2lkIENQMTVfRW5hYmxlX0lfQ2FjaGUodm9pZCk7DQpleHRlcm4gdW5zaWduZWQgaW50IENQMTVfSXNfSV9DYWNoZUVuYWJsZWQodm9pZCk7DQpleHRlcm4gdm9pZCBDUDE1X0VuYWJsZV9JX0NhY2hlKHZvaWQpOw0KZXh0ZXJuIHZvaWQgQ1AxNV9EaXNhYmxlX0lfQ2FjaGUodm9pZCk7DQpleHRlcm4gdW5zaWduZWQgaW50IENQMTVfSXNfTU1VRW5hYmxlZCh2b2lkKTsNCmV4dGVybiB2b2lkIENQMTVfRW5hYmxlTU1VKHZvaWQpOw0KZXh0ZXJuIHZvaWQgQ1AxNV9EaXNhYmxlTU1VKHZvaWQpOw0KZXh0ZXJuIHVuc2lnbmVkIGludCBDUDE1X0lzX0RDYWNoZUVuYWJsZWQodm9pZCk7DQpleHRlcm4gdm9pZCBDUDE1X0VuYWJsZV9EX0NhY2hlKHZvaWQpOw0KZXh0ZXJuIHZvaWQgQ1AxNV9EaXNhYmxlX0RfQ2FjaGUodm9pZCk7DQoNCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vICAgICAgICAgRXh0ZXJuYWwgZnVuY3Rpb25zIGRlZmluZWQgaW4gY3AxNS5TDQovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpleHRlcm4gdW5zaWduZWQgaW50IF9yZWFkQ29udHJvbFJlZ2lzdGVyKHZvaWQpOw0KZXh0ZXJuIHZvaWQgX3dyaXRlQ29udHJvbFJlZ2lzdGVyKHVuc2lnbmVkIGludCB2YWx1ZSk7DQpleHRlcm4gdm9pZCBfd2FpdEZvckludGVycnVwdCh2b2lkKTsNCmV4dGVybiB2b2lkIF93cml0ZVRUQih1bnNpZ25lZCBpbnQgdmFsdWUpOw0KZXh0ZXJuIHZvaWQgX3dyaXRlRG9tYWluKHVuc2lnbmVkIGludCB2YWx1ZSk7DQpleHRlcm4gdm9pZCBfd3JpdGVJVExCTG9ja2Rvd24odW5zaWduZWQgaW50IHZhbHVlKTsNCmV4dGVybiB2b2lkIF9wcmVmZXRjaElDYWNoZUxpbmUodW5zaWduZWQgaW50IHZhbHVlKTsNCg0KI2VuZGlmIC8vIENQMTVfUFJFU0VOVA0KDQojZW5kaWYgLy8gI2lmbmRlZiBfQ1AxNV9IDQoNCg==