From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [RFC 3/4] arm: tee: add OP-TEE header files Date: Mon, 16 Oct 2017 15:04:44 +0100 Message-ID: References: <1507748484-16871-1-git-send-email-volodymyr_babchuk@epam.com> <1507748484-16871-4-git-send-email-volodymyr_babchuk@epam.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1507748484-16871-4-git-send-email-volodymyr_babchuk@epam.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Volodymyr Babchuk , Stefano Stabellini , Julien Grall , xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org SGkgVm9sb2R5bXlyLAoKT24gMTEvMTAvMTcgMjA6MDEsIFZvbG9keW15ciBCYWJjaHVrIHdyb3Rl Ogo+IFRoaXMgaGVhZGVyIGZpbGVzIGRlc2NyaWJlIHByb3RvY29sIGJldHdlZW4gT1AtVEVFIGFu ZCBPUC1URUUgY2xpZW50Cj4gZHJpdmVyIGluIExpbnV4LiBUaGV5IGFyZSBuZWVkZWQgZm9yIHVw Y29taWVudCBPUC1URUUgbWVkaWF0b3IsIHdoaWNoCj4gaXMgYWRkZWQgaW4gdGhlIG5leHQgcGF0 Y2guCj4gUmVhc29uIHRvIGFkZCB0aG9zZSBoZWFkZXJzIGluIHNlcGFyYXRlIHBhdGNoIGlzIHRv IGVhc2UgdXAgcmV2aWV3Lgo+IFRob3NlIGZpbGVzIHdlcmUgdGFrZW4gZnJvbSBsaW51eCB0cmVl IChkcml2ZXJzL3RlZS9vcHRlZS8pIGFuZCBtYW5nbGVkCj4gYSBiaXQgdG8gY29tcGlsZSB3aXRo IFhFTi4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBWb2xvZHlteXIgQmFiY2h1ayA8dm9sb2R5bXlyX2Jh YmNodWtAZXBhbS5jb20+Cj4gLS0tCj4gICB4ZW4vYXJjaC9hcm0vdGVlL29wdGVlX21zZy5oIHwg NDQ0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gICB4ZW4vYXJj aC9hcm0vdGVlL29wdGVlX3NtYy5oIHwgNDU3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKCkhlYWRlcnMgc2hvdWxkIGdvIGluIGluY2x1ZGUvYXNtLWFybS90ZWUg YW5kIG5vdCBhcmNoL2FybS4KCkNoZWVycywKCj4gICAyIGZpbGVzIGNoYW5nZWQsIDkwMSBpbnNl cnRpb25zKCspCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2FyY2gvYXJtL3RlZS9vcHRlZV9t c2cuaAo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9hcmNoL2FybS90ZWUvb3B0ZWVfc21jLmgK PiAKPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL3RlZS9vcHRlZV9tc2cuaCBiL3hlbi9hcmNo L2FybS90ZWUvb3B0ZWVfbXNnLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAuLjEwNzQ3YjIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIveGVuL2FyY2gvYXJtL3RlZS9vcHRl ZV9tc2cuaAo+IEBAIC0wLDAgKzEsNDQ0IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAx NS0yMDE2LCBMaW5hcm8gTGltaXRlZAo+ICsgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKgo+ ICsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKPiArICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Cj4gKyAqCj4gKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSwKPiArICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4KPiArICoKPiArICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAo+ICsgKiB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBk b2N1bWVudGF0aW9uCj4gKyAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUgZGlzdHJpYnV0aW9uLgo+ICsgKgo+ICsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKPiArICogQU5E IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQo+ICsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQo+ICsgKiBBUkUgRElTQ0xBSU1F RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JT IEJFCj4gKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IKPiArICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKPiArICogU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTCj4gKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCj4gKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCj4gKyAqIEFSSVNJ TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQgT0YgVEhFCj4gKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgo+ICsgKi8KPiAr I2lmbmRlZiBfT1BURUVfTVNHX0gKPiArI2RlZmluZSBfT1BURUVfTVNHX0gKPiArCj4gKyNpbmNs dWRlIDx4ZW4vYml0b3BzLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vdHlwZXMuaD4KPiArCj4gKy8qCj4g KyAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBPUC1URUUgbWVzc2FnZSBwcm90b2NvbCB1c2VkIHRv IGNvbW11bmljYXRlCj4gKyAqIHdpdGggYW4gaW5zdGFuY2Ugb2YgT1AtVEVFIHJ1bm5pbmcgaW4g c2VjdXJlIHdvcmxkLgo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMgZGl2aWRlZCBpbnRvIHRocmVl IHNlY3Rpb25zLgo+ICsgKiAxLiBGb3JtYXR0aW5nIG9mIG1lc3NhZ2VzLgo+ICsgKiAyLiBSZXF1 ZXN0cyBmcm9tIG5vcm1hbCB3b3JsZAo+ICsgKiAzLiBSZXF1ZXN0cyBmcm9tIHNlY3VyZSB3b3Js ZCwgUmVtb3RlIFByb2NlZHVyZSBDYWxsIChSUEMpLCBoYW5kbGVkIGJ5Cj4gKyAqICAgIHRlZS1z dXBwbGljYW50Lgo+ICsgKi8KPiArCj4gKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+ICsgKiBQYXJ0 IDEgLSBmb3JtYXR0aW5nIG9mIG1lc3NhZ2VzCj4gKyAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPiAr Cj4gKyNkZWZpbmUgT1BURUVfTVNHX0FUVFJfVFlQRV9OT05FCQkweDAKPiArI2RlZmluZSBPUFRF RV9NU0dfQVRUUl9UWVBFX1ZBTFVFX0lOUFVUCQkweDEKPiArI2RlZmluZSBPUFRFRV9NU0dfQVRU Ul9UWVBFX1ZBTFVFX09VVFBVVAkweDIKPiArI2RlZmluZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1ZB TFVFX0lOT1VUCQkweDMKPiArI2RlZmluZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1JNRU1fSU5QVVQJ CTB4NQo+ICsjZGVmaW5lIE9QVEVFX01TR19BVFRSX1RZUEVfUk1FTV9PVVRQVVQJCTB4Ngo+ICsj ZGVmaW5lIE9QVEVFX01TR19BVFRSX1RZUEVfUk1FTV9JTk9VVAkJMHg3Cj4gKyNkZWZpbmUgT1BU RUVfTVNHX0FUVFJfVFlQRV9UTUVNX0lOUFVUCQkweDkKPiArI2RlZmluZSBPUFRFRV9NU0dfQVRU Ul9UWVBFX1RNRU1fT1VUUFVUCQkweGEKPiArI2RlZmluZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1RN RU1fSU5PVVQJCTB4Ygo+ICsKPiArI2RlZmluZSBPUFRFRV9NU0dfQVRUUl9UWVBFX01BU0sJCUdF Tk1BU0soNywgMCkKPiArCj4gKy8qCj4gKyAqIE1ldGEgcGFyYW1ldGVyIHRvIGJlIGFic29yYmVk IGJ5IHRoZSBTZWN1cmUgT1MgYW5kIG5vdCBwYXNzZWQKPiArICogdG8gdGhlIFRydXN0ZWQgQXBw bGljYXRpb24uCj4gKyAqCj4gKyAqIEN1cnJlbnRseSBvbmx5IHVzZWQgd2l0aCBPUFRFRV9NU0df Q01EX09QRU5fU0VTU0lPTi4KPiArICovCj4gKyNkZWZpbmUgT1BURUVfTVNHX0FUVFJfTUVUQQkJ CUJJVCg4KQo+ICsKPiArLyoKPiArICogUG9pbnRlciB0byBhIGxpc3Qgb2YgcGFnZXMgdXNlZCB0 byByZWdpc3RlciB1c2VyLWRlZmluZWQgU0hNIGJ1ZmZlci4KPiArICogVXNlZCB3aXRoIE9QVEVF X01TR19BVFRSX1RZUEVfVE1FTV8qLgo+ICsgKiBidWZfcHRyIHNob3VsZCBwb2ludCB0byB0aGUg YmVnaW5uaW5nIG9mIHRoZSBidWZmZXIuIEJ1ZmZlciB3aWxsIGNvbnRhaW4KPiArICogbGlzdCBv ZiBwYWdlIGFkZHJlc3Nlcy4gT1AtVEVFIGNvcmUgY2FuIHJlY29uc3RydWN0IGNvbnRpZ3VvdXMg YnVmZmVyIGZyb20KPiArICogdGhhdCBwYWdlIGFkZHJlc3NlcyBsaXN0LiBQYWdlIGFkZHJlc3Nl cyBhcmUgc3RvcmVkIGFzIDY0IGJpdCB2YWx1ZXMuCj4gKyAqIExhc3QgZW50cnkgb24gYSBwYWdl IHNob3VsZCBwb2ludCB0byB0aGUgbmV4dCBwYWdlIG9mIGJ1ZmZlci4KPiArICogRXZlcnkgZW50 cnkgaW4gYnVmZmVyIHNob3VsZCBwb2ludCB0byBhIDRrIHBhZ2UgYmVnaW5uaW5nICgxMiBsZWFz dAo+ICsgKiBzaWduaWZpY2FudCBiaXRzIG11c3QgYmUgZXF1YWwgdG8gemVybykuCj4gKyAqCj4g KyAqIDEyIGxlYXN0IHNpZ25pZmljYW50IGJpbnRzIG9mIG9wdGVlX21zZ19wYXJhbS51LnRtZW0u YnVmX3B0ciBzaG91bGQgaG9sZCBwYWdlCj4gKyAqIG9mZnNldCBvZiB0aGUgdXNlciBidWZmZXIu Cj4gKyAqCj4gKyAqIFNvLCBlbnRyaWVzIHNob3VsZCBiZSBwbGFjZWQgbGlrZSBtZW1iZXJzIG9m IHRoaXMgc3RydWN0dXJlOgo+ICsgKgo+ICsgKiBzdHJ1Y3QgcGFnZV9kYXRhIHsKPiArICogICB1 aW50NjRfdCBwYWdlc19hcnJheVtPUFRFRV9NU0dfTk9OQ09OVElHX1BBR0VfU0laRS9zaXplb2Yo dWludDY0X3QpIC0gMV07Cj4gKyAqICAgdWludDY0X3QgbmV4dF9wYWdlX2RhdGE7Cj4gKyAqIH07 Cj4gKyAqCj4gKyAqIFN0cnVjdHVyZSBpcyBkZXNpZ25lZCB0byBleGFjdGx5IGZpdCBpbnRvIHRo ZSBwYWdlIHNpemUKPiArICogT1BURUVfTVNHX05PTkNPTlRJR19QQUdFX1NJWkUgd2hpY2ggaXMg YSBzdGFuZGFyZCA0S0IgcGFnZS4KPiArICoKPiArICogVGhlIHNpemUgb2YgNEtCIGlzIGNob3Nl biBiZWNhdXNlIHRoaXMgaXMgdGhlIHNtYWxsZXN0IHBhZ2Ugc2l6ZSBmb3IgQVJNCj4gKyAqIGFy Y2hpdGVjdHVyZXMuIElmIFJFRSB1c2VzIGxhcmdlciBwYWdlcywgaXQgc2hvdWxkIGRpdmlkZSB0 aGVtIHRvIDRLQiBvbmVzLgo+ICsgKi8KPiArI2RlZmluZSBPUFRFRV9NU0dfQVRUUl9OT05DT05U SUcJCUJJVCg5KQo+ICsKPiArLyoKPiArICogTWVtb3J5IGF0dHJpYnV0ZXMgZm9yIGNhY2hpbmcg cGFzc2VkIHdpdGggdGVtcCBtZW1yZWZzLiBUaGUgYWN0dWFsIHZhbHVlCj4gKyAqIHVzZWQgaXMg ZGVmaW5lZCBvdXRzaWRlIHRoZSBtZXNzYWdlIHByb3RvY29sIHdpdGggdGhlIGV4Y2VwdGlvbiBv Zgo+ICsgKiBPUFRFRV9NU0dfQVRUUl9DQUNIRV9QUkVERUZJTkVEIHdoaWNoIG1lYW5zIHRoZSBh dHRyaWJ1dGVzIGFscmVhZHkKPiArICogZGVmaW5lZCBmb3IgdGhlIG1lbW9yeSByYW5nZSBzaG91 bGQgYmUgdXNlZC4gSWYgb3B0ZWVfc21jLmggaXMgdXNlZCBhcwo+ICsgKiBiZWFyZXIgb2YgdGhp cyBwcm90b2NvbCBPUFRFRV9TTUNfU0hNXyogaXMgdXNlZCBmb3IgdmFsdWVzLgo+ICsgKi8KPiAr I2RlZmluZSBPUFRFRV9NU0dfQVRUUl9DQUNIRV9TSElGVAkJMTYKPiArI2RlZmluZSBPUFRFRV9N U0dfQVRUUl9DQUNIRV9NQVNLCQlHRU5NQVNLKDIsIDApCj4gKyNkZWZpbmUgT1BURUVfTVNHX0FU VFJfQ0FDSEVfUFJFREVGSU5FRAkJMAo+ICsKPiArLyoKPiArICogU2FtZSB2YWx1ZXMgYXMgVEVF X0xPR0lOXyogZnJvbSBURUUgSW50ZXJuYWwgQVBJCj4gKyAqLwo+ICsjZGVmaW5lIE9QVEVFX01T R19MT0dJTl9QVUJMSUMJCQkweDAwMDAwMDAwCj4gKyNkZWZpbmUgT1BURUVfTVNHX0xPR0lOX1VT RVIJCQkweDAwMDAwMDAxCj4gKyNkZWZpbmUgT1BURUVfTVNHX0xPR0lOX0dST1VQCQkJMHgwMDAw MDAwMgo+ICsjZGVmaW5lIE9QVEVFX01TR19MT0dJTl9BUFBMSUNBVElPTgkJMHgwMDAwMDAwNAo+ ICsjZGVmaW5lIE9QVEVFX01TR19MT0dJTl9BUFBMSUNBVElPTl9VU0VSCTB4MDAwMDAwMDUKPiAr I2RlZmluZSBPUFRFRV9NU0dfTE9HSU5fQVBQTElDQVRJT05fR1JPVVAJMHgwMDAwMDAwNgo+ICsK PiArLyoKPiArICogUGFnZSBzaXplIHVzZWQgaW4gbm9uLWNvbnRpZ3VvdXMgYnVmZmVyIGVudHJp ZXMKPiArICovCj4gKyNkZWZpbmUgT1BURUVfTVNHX05PTkNPTlRJR19QQUdFX1NJWkUJCTQwOTYK PiArCj4gKy8qKgo+ICsgKiBzdHJ1Y3Qgb3B0ZWVfbXNnX3BhcmFtX3RtZW0gLSB0ZW1wb3Jhcnkg bWVtb3J5IHJlZmVyZW5jZSBwYXJhbWV0ZXIKPiArICogQGJ1Zl9wdHI6CUFkZHJlc3Mgb2YgdGhl IGJ1ZmZlcgo+ICsgKiBAc2l6ZToJU2l6ZSBvZiB0aGUgYnVmZmVyCj4gKyAqIEBzaG1fcmVmOglU ZW1wb3Jhcnkgc2hhcmVkIG1lbW9yeSByZWZlcmVuY2UsIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgdGVl X3NobQo+ICsgKgo+ICsgKiBTZWN1cmUgYW5kIG5vcm1hbCB3b3JsZCBjb21tdW5pY2F0ZXMgcG9p bnRlcnMgYXMgcGh5c2ljYWwgYWRkcmVzcwo+ICsgKiBpbnN0ZWFkIG9mIHRoZSB2aXJ0dWFsIGFk ZHJlc3MuIFRoaXMgaXMgYmVjYXVzZSBzZWN1cmUgYW5kIG5vcm1hbCB3b3JsZAo+ICsgKiBoYXZl IGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQgbWVtb3J5IG1hcHBpbmcuIE5vcm1hbCB3b3JsZCBjYW4g ZXZlbiBoYXZlIGEKPiArICogaHlwZXJ2aXNvciB3aGljaCBuZWVkIHRvIHRyYW5zbGF0ZSB0aGUg Z3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyAoQUtBIElQQQo+ICsgKiBpbiBBUk0gZG9jdW1lbnRhdGlv bikgdG8gYSByZWFsIHBoeXNpY2FsIGFkZHJlc3MgYmVmb3JlIHBhc3NpbmcgdGhlCj4gKyAqIHN0 cnVjdHVyZSB0byBzZWN1cmUgd29ybGQuCj4gKyAqLwo+ICtzdHJ1Y3Qgb3B0ZWVfbXNnX3BhcmFt X3RtZW0gewo+ICsJdTY0IGJ1Zl9wdHI7Cj4gKwl1NjQgc2l6ZTsKPiArCXU2NCBzaG1fcmVmOwo+ ICt9Owo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCBvcHRlZV9tc2dfcGFyYW1fcm1lbSAtIHJlZ2lz dGVyZWQgbWVtb3J5IHJlZmVyZW5jZSBwYXJhbWV0ZXIKPiArICogQG9mZnM6CU9mZnNldCBpbnRv IHNoYXJlZCBtZW1vcnkgcmVmZXJlbmNlCj4gKyAqIEBzaXplOglTaXplIG9mIHRoZSBidWZmZXIK PiArICogQHNobV9yZWY6CVNoYXJlZCBtZW1vcnkgcmVmZXJlbmNlLCBwb2ludGVyIHRvIGEgc3Ry dWN0IHRlZV9zaG0KPiArICovCj4gK3N0cnVjdCBvcHRlZV9tc2dfcGFyYW1fcm1lbSB7Cj4gKwl1 NjQgb2ZmczsKPiArCXU2NCBzaXplOwo+ICsJdTY0IHNobV9yZWY7Cj4gK307Cj4gKwo+ICsvKioK PiArICogc3RydWN0IG9wdGVlX21zZ19wYXJhbV92YWx1ZSAtIG9wYXF1ZSB2YWx1ZSBwYXJhbWV0 ZXIKPiArICoKPiArICogVmFsdWUgcGFyYW1ldGVycyBhcmUgcGFzc2VkIHVuY2hlY2tlZCBiZXR3 ZWVuIG5vcm1hbCBhbmQgc2VjdXJlIHdvcmxkLgo+ICsgKi8KPiArc3RydWN0IG9wdGVlX21zZ19w YXJhbV92YWx1ZSB7Cj4gKwl1NjQgYTsKPiArCXU2NCBiOwo+ICsJdTY0IGM7Cj4gK307Cj4gKwo+ ICsvKioKPiArICogc3RydWN0IG9wdGVlX21zZ19wYXJhbSAtIHBhcmFtZXRlciB1c2VkIHRvZ2V0 aGVyIHdpdGggc3RydWN0IG9wdGVlX21zZ19hcmcKPiArICogQGF0dHI6CWF0dHJpYnV0ZXMKPiAr ICogQHRtZW06CXBhcmFtZXRlciBieSB0ZW1wb3JhcnkgbWVtb3J5IHJlZmVyZW5jZQo+ICsgKiBA cm1lbToJcGFyYW1ldGVyIGJ5IHJlZ2lzdGVyZWQgbWVtb3J5IHJlZmVyZW5jZQo+ICsgKiBAdmFs dWU6CXBhcmFtZXRlciBieSBvcGFxdWUgdmFsdWUKPiArICoKPiArICogQGF0dHIgJiBPUFRFRV9N U0dfQVRUUl9UWVBFX01BU0sgaW5kaWNhdGVzIGlmIHRtZW0sIHJtZW0gb3IgdmFsdWUgaXMgdXNl ZCBpbgo+ICsgKiB0aGUgdW5pb24uIE9QVEVFX01TR19BVFRSX1RZUEVfVkFMVUVfKiBpbmRpY2F0 ZXMgdmFsdWUsCj4gKyAqIE9QVEVFX01TR19BVFRSX1RZUEVfVE1FTV8qIGluZGljYXRlcyBAdG1l bSBhbmQKPiArICogT1BURUVfTVNHX0FUVFJfVFlQRV9STUVNXyogaW5kaWNhdGVzIEBybWVtLAo+ ICsgKiBPUFRFRV9NU0dfQVRUUl9UWVBFX05PTkUgaW5kaWNhdGVzIHRoYXQgbm9uZSBvZiB0aGUg bWVtYmVycyBhcmUgdXNlZC4KPiArICovCj4gK3N0cnVjdCBvcHRlZV9tc2dfcGFyYW0gewo+ICsJ dTY0IGF0dHI7Cj4gKwl1bmlvbiB7Cj4gKwkJc3RydWN0IG9wdGVlX21zZ19wYXJhbV90bWVtIHRt ZW07Cj4gKwkJc3RydWN0IG9wdGVlX21zZ19wYXJhbV9ybWVtIHJtZW07Cj4gKwkJc3RydWN0IG9w dGVlX21zZ19wYXJhbV92YWx1ZSB2YWx1ZTsKPiArCX0gdTsKPiArfTsKPiArCj4gKy8qKgo+ICsg KiBzdHJ1Y3Qgb3B0ZWVfbXNnX2FyZyAtIGNhbGwgYXJndW1lbnQKPiArICogQGNtZDogQ29tbWFu ZCwgb25lIG9mIE9QVEVFX01TR19DTURfKiBvciBPUFRFRV9NU0dfUlBDX0NNRF8qCj4gKyAqIEBm dW5jOiBUcnVzdGVkIEFwcGxpY2F0aW9uIGZ1bmN0aW9uLCBzcGVjaWZpYyB0byB0aGUgVHJ1c3Rl ZCBBcHBsaWNhdGlvbiwKPiArICoJICAgICB1c2VkIGlmIGNtZCA9PSBPUFRFRV9NU0dfQ01EX0lO Vk9LRV9DT01NQU5ECj4gKyAqIEBzZXNzaW9uOiBJbiBwYXJhbWV0ZXIgZm9yIGFsbCBPUFRFRV9N U0dfQ01EXyogZXhjZXB0Cj4gKyAqCSAgICAgT1BURUVfTVNHX0NNRF9PUEVOX1NFU1NJT04gd2hl cmUgaXQncyBhbiBvdXRwdXQgcGFyYW1ldGVyIGluc3RlYWQKPiArICogQGNhbmNlbF9pZDogQ2Fu Y2VsbGF0aW9uIGlkLCBhIHVuaXF1ZSB2YWx1ZSB0byBpZGVudGlmeSB0aGlzIHJlcXVlc3QKPiAr ICogQHJldDogcmV0dXJuIHZhbHVlCj4gKyAqIEByZXRfb3JpZ2luOiBvcmlnaW4gb2YgdGhlIHJl dHVybiB2YWx1ZQo+ICsgKiBAbnVtX3BhcmFtczogbnVtYmVyIG9mIHBhcmFtZXRlcnMgc3VwcGxp ZWQgdG8gdGhlIE9TIENvbW1hbmQKPiArICogQHBhcmFtczogdGhlIHBhcmFtZXRlcnMgc3VwcGxp ZWQgdG8gdGhlIE9TIENvbW1hbmQKPiArICoKPiArICogQWxsIG5vcm1hbCBjYWxscyB0byBUcnVz dGVkIE9TIHVzZXMgdGhpcyBzdHJ1Y3QuIElmIGNtZCByZXF1aXJlcyBmdXJ0aGVyCj4gKyAqIGlu Zm9ybWF0aW9uIHRoYW4gd2hhdCB0aGVzZSBmaWVsZCBob2xkcyBpdCBjYW4gYmUgcGFzc2VkIGFz IGEgcGFyYW1ldGVyCj4gKyAqIHRhZ2dlZCBhcyBtZXRhIChzZXR0aW5nIHRoZSBPUFRFRV9NU0df QVRUUl9NRVRBIGJpdCBpbiBjb3JyZXNwb25kaW5nCj4gKyAqIGF0dHJzIGZpZWxkKS4gQWxsIHBh cmFtZXRlcnMgdGFnZ2VkIGFzIG1ldGEgaGFzIHRvIGNvbWUgZmlyc3QuCj4gKyAqCj4gKyAqIFRl bXAgbWVtcmVmIHBhcmFtZXRlcnMgY2FuIGJlIGZyYWdtZW50ZWQgaWYgc3VwcG9ydGVkIGJ5IHRo ZSBUcnVzdGVkIE9TCj4gKyAqICh3aGVuIG9wdGVlX3NtYy5oIGlzIGJlYXJlciBvZiB0aGlzIHBy b3RvY29sIHRoaXMgaXMgaW5kaWNhdGVkIHdpdGgKPiArICogT1BURUVfU01DX1NFQ19DQVBfVU5S RUdJU1RFUkVEX1NITSkuIElmIGEgbG9naWNhbCBtZW1yZWYgcGFyYW1ldGVyIGlzCj4gKyAqIGZy YWdtZW50ZWQgdGhlbiBoYXMgYWxsIGJ1dCB0aGUgbGFzdCBmcmFnbWVudCB0aGUKPiArICogT1BU RUVfTVNHX0FUVFJfRlJBR01FTlQgYml0IHNldCBpbiBhdHRycy4gRXZlbiBpZiBhIG1lbXJlZiBp cyBmcmFnbWVudGVkCj4gKyAqIGl0IHdpbGwgc3RpbGwgYmUgcHJlc2VudGVkIGFzIGEgc2luZ2xl IGxvZ2ljYWwgbWVtcmVmIHRvIHRoZSBUcnVzdGVkCj4gKyAqIEFwcGxpY2F0aW9uLgo+ICsgKi8K PiArc3RydWN0IG9wdGVlX21zZ19hcmcgewo+ICsJdTMyIGNtZDsKPiArCXUzMiBmdW5jOwo+ICsJ dTMyIHNlc3Npb247Cj4gKwl1MzIgY2FuY2VsX2lkOwo+ICsJdTMyIHBhZDsKPiArCXUzMiByZXQ7 Cj4gKwl1MzIgcmV0X29yaWdpbjsKPiArCXUzMiBudW1fcGFyYW1zOwo+ICsKPiArCS8qIG51bV9w YXJhbXMgdGVsbHMgdGhlIGFjdHVhbCBudW1iZXIgb2YgZWxlbWVudCBpbiBwYXJhbXMgKi8KPiAr CXN0cnVjdCBvcHRlZV9tc2dfcGFyYW0gcGFyYW1zWzBdOwo+ICt9Owo+ICsKPiArLyoqCj4gKyAq IE9QVEVFX01TR19HRVRfQVJHX1NJWkUgLSByZXR1cm4gc2l6ZSBvZiBzdHJ1Y3Qgb3B0ZWVfbXNn X2FyZwo+ICsgKgo+ICsgKiBAbnVtX3BhcmFtczogTnVtYmVyIG9mIHBhcmFtZXRlcnMgZW1iZWRk ZWQgaW4gdGhlIHN0cnVjdCBvcHRlZV9tc2dfYXJnCj4gKyAqCj4gKyAqIFJldHVybnMgdGhlIHNp emUgb2YgdGhlIHN0cnVjdCBvcHRlZV9tc2dfYXJnIHRvZ2V0aGVyIHdpdGggdGhlIG51bWJlcgo+ ICsgKiBvZiBlbWJlZGRlZCBwYXJhbWV0ZXJzLgo+ICsgKi8KPiArI2RlZmluZSBPUFRFRV9NU0df R0VUX0FSR19TSVpFKG51bV9wYXJhbXMpIFwKPiArCShzaXplb2Yoc3RydWN0IG9wdGVlX21zZ19h cmcpICsgXAo+ICsJIHNpemVvZihzdHJ1Y3Qgb3B0ZWVfbXNnX3BhcmFtKSAqIChudW1fcGFyYW1z KSkKPiArCj4gKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+ICsgKiBQYXJ0IDIgLSByZXF1ZXN0cyBm cm9tIG5vcm1hbCB3b3JsZAo+ICsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCj4gKwo+ICsvKgo+ICsg KiBSZXR1cm4gdGhlIGZvbGxvd2luZyBVSUQgaWYgdXNpbmcgQVBJIHNwZWNpZmllZCBpbiB0aGlz IGZpbGUgd2l0aG91dAo+ICsgKiBmdXJ0aGVyIGV4dGVuc2lvbnM6Cj4gKyAqIDM4NGZiM2UwLWU3 ZjgtMTFlMy1hZjYzLTAwMDJhNWQ1YzUxYi4KPiArICogUmVwcmVzZW50ZWQgaW4gNCAzMi1iaXQg d29yZHMgaW4gT1BURUVfTVNHX1VJRF8wLCBPUFRFRV9NU0dfVUlEXzEsCj4gKyAqIE9QVEVFX01T R19VSURfMiwgT1BURUVfTVNHX1VJRF8zLgo+ICsgKi8KPiArI2RlZmluZSBPUFRFRV9NU0dfVUlE XzAJCQkweDM4NGZiM2UwCj4gKyNkZWZpbmUgT1BURUVfTVNHX1VJRF8xCQkJMHhlN2Y4MTFlMwo+ ICsjZGVmaW5lIE9QVEVFX01TR19VSURfMgkJCTB4YWY2MzAwMDIKPiArI2RlZmluZSBPUFRFRV9N U0dfVUlEXzMJCQkweGE1ZDVjNTFiCj4gKyNkZWZpbmUgT1BURUVfTVNHX0ZVTkNJRF9DQUxMU19V SUQJMHhGRjAxCj4gKwo+ICsvKgo+ICsgKiBSZXR1cm5zIDIuMCBpZiB1c2luZyBBUEkgc3BlY2lm aWVkIGluIHRoaXMgZmlsZSB3aXRob3V0IGZ1cnRoZXIKPiArICogZXh0ZW5zaW9ucy4gUmVwcmVz ZW50ZWQgaW4gMiAzMi1iaXQgd29yZHMgaW4gT1BURUVfTVNHX1JFVklTSU9OX01BSk9SCj4gKyAq IGFuZCBPUFRFRV9NU0dfUkVWSVNJT05fTUlOT1IKPiArICovCj4gKyNkZWZpbmUgT1BURUVfTVNH X1JFVklTSU9OX01BSk9SCTIKPiArI2RlZmluZSBPUFRFRV9NU0dfUkVWSVNJT05fTUlOT1IJMAo+ ICsjZGVmaW5lIE9QVEVFX01TR19GVU5DSURfQ0FMTFNfUkVWSVNJT04JMHhGRjAzCj4gKwo+ICsv Kgo+ICsgKiBHZXQgVVVJRCBvZiBUcnVzdGVkIE9TLgo+ICsgKgo+ICsgKiBVc2VkIGJ5IG5vbi1z ZWN1cmUgd29ybGQgdG8gZmlndXJlIG91dCB3aGljaCBUcnVzdGVkIE9TIGlzIGluc3RhbGxlZC4K PiArICogTm90ZSB0aGF0IHJldHVybmVkIFVVSUQgaXMgdGhlIFVVSUQgb2YgdGhlIFRydXN0ZWQg T1MsIG5vdCBvZiB0aGUgQVBJLgo+ICsgKgo+ICsgKiBSZXR1cm5zIFVVSUQgaW4gNCAzMi1iaXQg d29yZHMgaW4gdGhlIHNhbWUgd2F5IGFzCj4gKyAqIE9QVEVFX01TR19GVU5DSURfQ0FMTFNfVUlE IGRlc2NyaWJlZCBhYm92ZS4KPiArICovCj4gKyNkZWZpbmUgT1BURUVfTVNHX09TX09QVEVFX1VV SURfMAkweDQ4NjE3OGUwCj4gKyNkZWZpbmUgT1BURUVfTVNHX09TX09QVEVFX1VVSURfMQkweGU3 ZjgxMWUzCj4gKyNkZWZpbmUgT1BURUVfTVNHX09TX09QVEVFX1VVSURfMgkweGJjNWUwMDAyCj4g KyNkZWZpbmUgT1BURUVfTVNHX09TX09QVEVFX1VVSURfMwkweGE1ZDVjNTFiCj4gKyNkZWZpbmUg T1BURUVfTVNHX0ZVTkNJRF9HRVRfT1NfVVVJRAkweDAwMDAKPiArCj4gKy8qCj4gKyAqIEdldCBy ZXZpc2lvbiBvZiBUcnVzdGVkIE9TLgo+ICsgKgo+ICsgKiBVc2VkIGJ5IG5vbi1zZWN1cmUgd29y bGQgdG8gZmlndXJlIG91dCB3aGljaCB2ZXJzaW9uIG9mIHRoZSBUcnVzdGVkIE9TCj4gKyAqIGlz IGluc3RhbGxlZC4gTm90ZSB0aGF0IHRoZSByZXR1cm5lZCByZXZpc2lvbiBpcyB0aGUgcmV2aXNp b24gb2YgdGhlCj4gKyAqIFRydXN0ZWQgT1MsIG5vdCBvZiB0aGUgQVBJLgo+ICsgKgo+ICsgKiBS ZXR1cm5zIHJldmlzaW9uIGluIDIgMzItYml0IHdvcmRzIGluIHRoZSBzYW1lIHdheSBhcwo+ICsg KiBPUFRFRV9NU0dfQ0FMTFNfUkVWSVNJT04gZGVzY3JpYmVkIGFib3ZlLgo+ICsgKi8KPiArI2Rl ZmluZSBPUFRFRV9NU0dfRlVOQ0lEX0dFVF9PU19SRVZJU0lPTgkweDAwMDEKPiArCj4gKy8qCj4g KyAqIERvIGEgc2VjdXJlIGNhbGwgd2l0aCBzdHJ1Y3Qgb3B0ZWVfbXNnX2FyZyBhcyBhcmd1bWVu dAo+ICsgKiBUaGUgT1BURUVfTVNHX0NNRF8qIGJlbG93IGRlZmluZXMgd2hhdCBnb2VzIGluIHN0 cnVjdCBvcHRlZV9tc2dfYXJnOjpjbWQKPiArICoKPiArICogT1BURUVfTVNHX0NNRF9PUEVOX1NF U1NJT04gb3BlbnMgYSBzZXNzaW9uIHRvIGEgVHJ1c3RlZCBBcHBsaWNhdGlvbi4KPiArICogVGhl IGZpcnN0IHR3byBwYXJhbWV0ZXJzIGFyZSB0YWdnZWQgYXMgbWV0YSwgaG9sZGluZyB0d28gdmFs dWUKPiArICogcGFyYW1ldGVycyB0byBwYXNzIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246Cj4g KyAqIHBhcmFtWzBdLnUudmFsdWUuYS1iIHV1aWQgb2YgVHJ1c3RlZCBBcHBsaWNhdGlvbgo+ICsg KiBwYXJhbVsxXS51LnZhbHVlLmEtYiB1dWlkIG9mIENsaWVudAo+ICsgKiBwYXJhbVsxXS51LnZh bHVlLmMgTG9naW4gY2xhc3Mgb2YgY2xpZW50IE9QVEVFX01TR19MT0dJTl8qCj4gKyAqCj4gKyAq IE9QVEVFX01TR19DTURfSU5WT0tFX0NPTU1BTkQgaW52b2tlcyBhIGNvbW1hbmQgYSBwcmV2aW91 c2x5IG9wZW5lZAo+ICsgKiBzZXNzaW9uIHRvIGEgVHJ1c3RlZCBBcHBsaWNhdGlvbi4gIHN0cnVj dCBvcHRlZV9tc2dfYXJnOjpmdW5jIGlzIFRydXN0ZWQKPiArICogQXBwbGljYXRpb24gZnVuY3Rp b24sIHNwZWNpZmljIHRvIHRoZSBUcnVzdGVkIEFwcGxpY2F0aW9uLgo+ICsgKgo+ICsgKiBPUFRF RV9NU0dfQ01EX0NMT1NFX1NFU1NJT04gY2xvc2VzIGEgcHJldmlvdXNseSBvcGVuZWQgc2Vzc2lv biB0bwo+ICsgKiBUcnVzdGVkIEFwcGxpY2F0aW9uLgo+ICsgKgo+ICsgKiBPUFRFRV9NU0dfQ01E X0NBTkNFTCBjYW5jZWxzIGEgY3VycmVudGx5IGludm9rZWQgY29tbWFuZC4KPiArICoKPiArICog T1BURUVfTVNHX0NNRF9SRUdJU1RFUl9TSE0gcmVnaXN0ZXJzIGEgc2hhcmVkIG1lbW9yeSByZWZl cmVuY2UuIFRoZQo+ICsgKiBpbmZvcm1hdGlvbiBpcyBwYXNzZWQgYXM6Cj4gKyAqIFtpbl0gcGFy YW1bMF0uYXR0cgkJCU9QVEVFX01TR19BVFRSX1RZUEVfVE1FTV9JTlBVVAo+ICsgKgkJCQkJW3wg T1BURUVfTVNHX0FUVFJfRlJBR01FTlRdCj4gKyAqIFtpbl0gcGFyYW1bMF0udS50bWVtLmJ1Zl9w dHIJCXBoeXNpY2FsIGFkZHJlc3MgKG9mIGZpcnN0IGZyYWdtZW50KQo+ICsgKiBbaW5dIHBhcmFt WzBdLnUudG1lbS5zaXplCQlzaXplIChvZiBmaXJzdCBmcmFnbWVudCkKPiArICogW2luXSBwYXJh bVswXS51LnRtZW0uc2htX3JlZgkJaG9sZHMgc2hhcmVkIG1lbW9yeSByZWZlcmVuY2UKPiArICog Li4uCj4gKyAqIFRoZSBzaGFyZWQgbWVtb3J5IGNhbiBvcHRpb25hbGx5IGJlIGZyYWdtZW50ZWQs IHRlbXAgbWVtcmVmcyBjYW4gZm9sbG93Cj4gKyAqIGVhY2ggb3RoZXIgd2l0aCBhbGwgYnV0IHRo ZSBsYXN0IHdpdGggdGhlIE9QVEVFX01TR19BVFRSX0ZSQUdNRU5UIGJpdCBzZXQuCj4gKyAqCj4g KyAqIE9QVEVFX01TR19DTURfVU5SRUdJU1RFUl9TSE0gdW5yZWdpc3RlcmVzIGEgcHJldmlvdXNs eSByZWdpc3RlcmVkIHNoYXJlZAo+ICsgKiBtZW1vcnkgcmVmZXJlbmNlLiBUaGUgaW5mb3JtYXRp b24gaXMgcGFzc2VkIGFzOgo+ICsgKiBbaW5dIHBhcmFtWzBdLmF0dHIJCQlPUFRFRV9NU0dfQVRU Ul9UWVBFX1JNRU1fSU5QVVQKPiArICogW2luXSBwYXJhbVswXS51LnJtZW0uc2htX3JlZgkJaG9s ZHMgc2hhcmVkIG1lbW9yeSByZWZlcmVuY2UKPiArICogW2luXSBwYXJhbVswXS51LnJtZW0ub2Zm cwkJMAo+ICsgKiBbaW5dIHBhcmFtWzBdLnUucm1lbS5zaXplCQkwCj4gKyAqLwo+ICsjZGVmaW5l IE9QVEVFX01TR19DTURfT1BFTl9TRVNTSU9OCTAKPiArI2RlZmluZSBPUFRFRV9NU0dfQ01EX0lO Vk9LRV9DT01NQU5ECTEKPiArI2RlZmluZSBPUFRFRV9NU0dfQ01EX0NMT1NFX1NFU1NJT04JMgo+ ICsjZGVmaW5lIE9QVEVFX01TR19DTURfQ0FOQ0VMCQkzCj4gKyNkZWZpbmUgT1BURUVfTVNHX0NN RF9SRUdJU1RFUl9TSE0JNAo+ICsjZGVmaW5lIE9QVEVFX01TR19DTURfVU5SRUdJU1RFUl9TSE0J NQo+ICsjZGVmaW5lIE9QVEVFX01TR19GVU5DSURfQ0FMTF9XSVRIX0FSRwkweDAwMDQKPiArCj4g Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgo+ICsgKiBQYXJ0IDMgLSBSZXF1ZXN0cyBmcm9tIHNlY3Vy ZSB3b3JsZCwgUlBDCj4gKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPiArCj4gKy8qCj4gKyAqIEFs bCBSUEMgaXMgZG9uZSB3aXRoIGEgc3RydWN0IG9wdGVlX21zZ19hcmcgYXMgYmVhcmVyIG9mIGlu Zm9ybWF0aW9uLAo+ICsgKiBzdHJ1Y3Qgb3B0ZWVfbXNnX2FyZzo6YXJnIGhvbGRzIHZhbHVlcyBk ZWZpbmVkIGJ5IE9QVEVFX01TR19SUENfQ01EXyogYmVsb3cKPiArICoKPiArICogUlBDIGNvbW11 bmljYXRpb24gd2l0aCB0ZWUtc3VwcGxpY2FudCBpcyByZXZlcnNlZCBjb21wYXJlZCB0byBub3Jt YWwKPiArICogY2xpZW50IGNvbW11bmljYXRpb24gZGVzcmliZWQgYWJvdmUuIFRoZSBzdXBwbGlj YW50IHJlY2VpdmVzIHJlcXVlc3RzCj4gKyAqIGFuZCBzZW5kcyByZXNwb25zZXMuCj4gKyAqLwo+ ICsKPiArLyoKPiArICogTG9hZCBhIFRBIGludG8gbWVtb3J5LCBkZWZpbmVkIGluIHRlZS1zdXBw bGljYW50Cj4gKyAqLwo+ICsjZGVmaW5lIE9QVEVFX01TR19SUENfQ01EX0xPQURfVEEJMAo+ICsK PiArLyoKPiArICogUmVzZXJ2ZWQKPiArICovCj4gKyNkZWZpbmUgT1BURUVfTVNHX1JQQ19DTURf UlBNQgkJMQo+ICsKPiArLyoKPiArICogRmlsZSBzeXN0ZW0gYWNjZXNzLCBkZWZpbmVkIGluIHRl ZS1zdXBwbGljYW50Cj4gKyAqLwo+ICsjZGVmaW5lIE9QVEVFX01TR19SUENfQ01EX0ZTCQkyCj4g Kwo+ICsvKgo+ICsgKiBHZXQgdGltZQo+ICsgKgo+ICsgKiBSZXR1cm5zIG51bWJlciBvZiBzZWNv bmRzIGFuZCBuYW5vIHNlY29uZHMgc2luY2UgdGhlIEVwb2NoLAo+ICsgKiAxOTcwLTAxLTAxIDAw OjAwOjAwICswMDAwIChVVEMpLgo+ICsgKgo+ICsgKiBbb3V0XSBwYXJhbVswXS51LnZhbHVlLmEJ TnVtYmVyIG9mIHNlY29uZHMKPiArICogW291dF0gcGFyYW1bMF0udS52YWx1ZS5iCU51bWJlciBv ZiBuYW5vIHNlY29uZHMuCj4gKyAqLwo+ICsjZGVmaW5lIE9QVEVFX01TR19SUENfQ01EX0dFVF9U SU1FCTMKPiArCj4gKy8qCj4gKyAqIFdhaXQgcXVldWUgcHJpbWl0aXZlLCBoZWxwZXIgZm9yIHNl Y3VyZSB3b3JsZCB0byBpbXBsZW1lbnQgYSB3YWl0IHF1ZXVlLgo+ICsgKgo+ICsgKiBJZiBzZWN1 cmUgd29ybGQgbmVlZCB0byB3YWl0IGZvciBhIHNlY3VyZSB3b3JsZCBtdXRleCBpdCBpc3N1ZXMg YSBzbGVlcAo+ICsgKiByZXF1ZXN0IGluc3RlYWQgb2Ygc3Bpbm5pbmcgaW4gc2VjdXJlIHdvcmxk LiBDb252ZXJzZWx5IGlzIGEgd2FrZXVwCj4gKyAqIHJlcXVlc3QgaXNzdWVkIHdoZW4gYSBzZWN1 cmUgd29ybGQgbXV0ZXggd2l0aCBhIHRocmVhZCB3YWl0aW5nIHRocmVhZCBpcwo+ICsgKiB1bmxv Y2tlZC4KPiArICoKPiArICogV2FpdGluZyBvbiBhIGtleQo+ICsgKiBbaW5dIHBhcmFtWzBdLnUu dmFsdWUuYSBPUFRFRV9NU0dfUlBDX1dBSVRfUVVFVUVfU0xFRVAKPiArICogW2luXSBwYXJhbVsw XS51LnZhbHVlLmIgd2FpdCBrZXkKPiArICoKPiArICogV2FraW5nIHVwIGEga2V5Cj4gKyAqIFtp bl0gcGFyYW1bMF0udS52YWx1ZS5hIE9QVEVFX01TR19SUENfV0FJVF9RVUVVRV9XQUtFVVAKPiAr ICogW2luXSBwYXJhbVswXS51LnZhbHVlLmIgd2FrZXVwIGtleQo+ICsgKi8KPiArI2RlZmluZSBP UFRFRV9NU0dfUlBDX0NNRF9XQUlUX1FVRVVFCTQKPiArI2RlZmluZSBPUFRFRV9NU0dfUlBDX1dB SVRfUVVFVUVfU0xFRVAJMAo+ICsjZGVmaW5lIE9QVEVFX01TR19SUENfV0FJVF9RVUVVRV9XQUtF VVAJMQo+ICsKPiArLyoKPiArICogU3VzcGVuZCBleGVjdXRpb24KPiArICoKPiArICogW2luXSBw YXJhbVswXS52YWx1ZQkuYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHN1c3BlbmQKPiArICov Cj4gKyNkZWZpbmUgT1BURUVfTVNHX1JQQ19DTURfU1VTUEVORAk1Cj4gKwo+ICsvKgo+ICsgKiBB bGxvY2F0ZSBhIHBpZWNlIG9mIHNoYXJlZCBtZW1vcnkKPiArICoKPiArICogU2hhcmVkIG1lbW9y eSBjYW4gb3B0aW9uYWxseSBiZSBmcmFnbWVudGVkLCB0byBzdXBwb3J0IHRoYXQgYWRkaXRpb25h bAo+ICsgKiBzcGFyZSBwYXJhbSBlbnRyaWVzIGFyZSBhbGxvY2F0ZWQgdG8gbWFrZSByb29tIGZv ciBldmVudHVhbCBmcmFnbWVudHMuCj4gKyAqIFRoZSBzcGFyZSBwYXJhbSBlbnRyaWVzIGhhcyAu YXR0ciA9IE9QVEVFX01TR19BVFRSX1RZUEVfTk9ORSB3aGVuCj4gKyAqIHVudXNlZC4gQWxsIHJl dHVybmVkIHRlbXAgbWVtcmVmcyBleGNlcHQgdGhlIGxhc3Qgc2hvdWxkIGhhdmUgdGhlCj4gKyAq IE9QVEVFX01TR19BVFRSX0ZSQUdNRU5UIGJpdCBzZXQgaW4gdGhlIGF0dHIgZmllbGQuCj4gKyAq Cj4gKyAqIFtpbl0gIHBhcmFtWzBdLnUudmFsdWUuYQkJdHlwZSBvZiBtZW1vcnkgb25lIG9mCj4g KyAqCQkJCQlPUFRFRV9NU0dfUlBDX1NITV9UWVBFXyogYmVsb3cKPiArICogW2luXSAgcGFyYW1b MF0udS52YWx1ZS5iCQlyZXF1ZXN0ZWQgc2l6ZQo+ICsgKiBbaW5dICBwYXJhbVswXS51LnZhbHVl LmMJCXJlcXVpcmVkIGFsaWdubWVudAo+ICsgKgo+ICsgKiBbb3V0XSBwYXJhbVswXS51LnRtZW0u YnVmX3B0cglwaHlzaWNhbCBhZGRyZXNzIChvZiBmaXJzdCBmcmFnbWVudCkKPiArICogW291dF0g cGFyYW1bMF0udS50bWVtLnNpemUJCXNpemUgKG9mIGZpcnN0IGZyYWdtZW50KQo+ICsgKiBbb3V0 XSBwYXJhbVswXS51LnRtZW0uc2htX3JlZglzaGFyZWQgbWVtb3J5IHJlZmVyZW5jZQo+ICsgKiAu Li4KPiArICogW291dF0gcGFyYW1bbl0udS50bWVtLmJ1Zl9wdHIJcGh5c2ljYWwgYWRkcmVzcwo+ ICsgKiBbb3V0XSBwYXJhbVtuXS51LnRtZW0uc2l6ZQkJc2l6ZQo+ICsgKiBbb3V0XSBwYXJhbVtu XS51LnRtZW0uc2htX3JlZglzaGFyZWQgbWVtb3J5IHJlZmVyZW5jZSAoc2FtZSB2YWx1ZQo+ICsg KgkJCQkJYXMgaW4gcGFyYW1bbi0xXS51LnRtZW0uc2htX3JlZikKPiArICovCj4gKyNkZWZpbmUg T1BURUVfTVNHX1JQQ19DTURfU0hNX0FMTE9DCTYKPiArLyogTWVtb3J5IHRoYXQgY2FuIGJlIHNo YXJlZCB3aXRoIGEgbm9uLXNlY3VyZSB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uICovCj4gKyNkZWZp bmUgT1BURUVfTVNHX1JQQ19TSE1fVFlQRV9BUFBMCTAKPiArLyogTWVtb3J5IG9ubHkgc2hhcmVk IHdpdGggbm9uLXNlY3VyZSBrZXJuZWwgKi8KPiArI2RlZmluZSBPUFRFRV9NU0dfUlBDX1NITV9U WVBFX0tFUk5FTAkxCj4gKwo+ICsvKgo+ICsgKiBGcmVlIHNoYXJlZCBtZW1vcnkgcHJldmlvdXNs eSBhbGxvY2F0ZWQgd2l0aCBPUFRFRV9NU0dfUlBDX0NNRF9TSE1fQUxMT0MKPiArICoKPiArICog W2luXSAgcGFyYW1bMF0udS52YWx1ZS5hCQl0eXBlIG9mIG1lbW9yeSBvbmUgb2YKPiArICoJCQkJ CU9QVEVFX01TR19SUENfU0hNX1RZUEVfKiBhYm92ZQo+ICsgKiBbaW5dICBwYXJhbVswXS51LnZh bHVlLmIJCXZhbHVlIG9mIHNoYXJlZCBtZW1vcnkgcmVmZXJlbmNlCj4gKyAqCQkJCQlyZXR1cm5l ZCBpbiBwYXJhbVswXS51LnRtZW0uc2htX3JlZgo+ICsgKgkJCQkJYWJvdmUKPiArICovCj4gKyNk ZWZpbmUgT1BURUVfTVNHX1JQQ19DTURfU0hNX0ZSRUUJNwo+ICsKPiArI2VuZGlmIC8qIF9PUFRF RV9NU0dfSCAqLwo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vdGVlL29wdGVlX3NtYy5oIGIv eGVuL2FyY2gvYXJtL3RlZS9vcHRlZV9zbWMuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k ZXggMDAwMDAwMC4uOTJmNGQ1NAo+IC0tLSAvZGV2L251bGwKPiArKysgYi94ZW4vYXJjaC9hcm0v dGVlL29wdGVlX3NtYy5oCj4gQEAgLTAsMCArMSw0NTcgQEAKPiArLyoKPiArICogQ29weXJpZ2h0 IChjKSAyMDE1LTIwMTYsIExpbmFybyBMaW1pdGVkCj4gKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu Cj4gKyAqCj4gKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAo+ICsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKPiArICoKPiAr ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlLAo+ICsgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyLgo+ICsgKgo+ICsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCj4g KyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4gdGhlIGRvY3VtZW50YXRpb24KPiArICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCj4gKyAqCj4gKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgo+ ICsgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCj4gKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCj4gKyAqIEFSRSBE SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05U UklCVVRPUlMgQkUKPiArICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgo+ICsgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgo+ICsgKiBTVUJT VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg T1IgQlVTSU5FU1MKPiArICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KPiArICogQ09OVFJBQ1QsIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKPiAr ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRCBPRiBUSEUKPiArICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCj4g KyAqLwo+ICsjaWZuZGVmIE9QVEVFX1NNQ19ICj4gKyNkZWZpbmUgT1BURUVfU01DX0gKPiArCj4g KyNpbmNsdWRlIDxhc20vc21jY2MuaD4KPiArI2luY2x1ZGUgPHhlbi9iaXRvcHMuaD4KPiArCj4g KyNkZWZpbmUgT1BURUVfU01DX1NURF9DQUxMX1ZBTChmdW5jX251bSkgXAo+ICsJQVJNX1NNQ0ND X0NBTExfVkFMKEFSTV9TTUNDQ19TVERfQ0FMTCwgQVJNX1NNQ0NDX0NPTlZfMzIsIFwKPiArCQkJ ICAgQVJNX1NNQ0NDX09XTkVSX1RSVVNURURfT1MsIChmdW5jX251bSkpCj4gKyNkZWZpbmUgT1BU RUVfU01DX0ZBU1RfQ0FMTF9WQUwoZnVuY19udW0pIFwKPiArCUFSTV9TTUNDQ19DQUxMX1ZBTChB Uk1fU01DQ0NfRkFTVF9DQUxMLCBBUk1fU01DQ0NfQ09OVl8zMiwgXAo+ICsJCQkgICBBUk1fU01D Q0NfT1dORVJfVFJVU1RFRF9PUywgKGZ1bmNfbnVtKSkKPiArCj4gKy8qCj4gKyAqIEZ1bmN0aW9u IHNwZWNpZmllZCBieSBTTUMgQ2FsbGluZyBjb252ZW50aW9uLgo+ICsgKi8KPiArI2RlZmluZSBP UFRFRV9TTUNfRlVOQ0lEX0NBTExTX0NPVU5UCTB4RkYwMAo+ICsjZGVmaW5lIE9QVEVFX1NNQ19D QUxMU19DT1VOVCBcCj4gKwlBUk1fU01DQ0NfQ0FMTF9WQUwoT1BURUVfU01DX0ZBU1RfQ0FMTCwg U01DQ0NfU01DXzMyLCBcCj4gKwkJCSAgIFNNQ0NDX09XTkVSX1RSVVNURURfT1NfRU5ELCBcCj4g KwkJCSAgIE9QVEVFX1NNQ19GVU5DSURfQ0FMTFNfQ09VTlQpCj4gKwo+ICsvKgo+ICsgKiBOb3Jt YWwgY2FjaGVkIG1lbW9yeSAod3JpdGUtYmFjayksIHNoYXJlYWJsZSBmb3IgU01QIHN5c3RlbXMg YW5kIG5vdAo+ICsgKiBzaGFyZWFibGUgZm9yIFVQIHN5c3RlbXMuCj4gKyAqLwo+ICsjZGVmaW5l IE9QVEVFX1NNQ19TSE1fQ0FDSEVECQkxCj4gKwo+ICsvKgo+ICsgKiBhMC4uYTcgaXMgdXNlZCBh cyByZWdpc3RlciBuYW1lcyBpbiB0aGUgZGVzY3JpcHRpb25zIGJlbG93LCBvbiBhcm0zMgo+ICsg KiB0aGF0IHRyYW5zbGF0ZXMgdG8gcjAuLnI3IGFuZCBvbiBhcm02NCB0byB3MC4udzcuIEluIGJv dGggY2FzZXMgaXQncwo+ICsgKiAzMi1iaXQgcmVnaXN0ZXJzLgo+ICsgKi8KPiArCj4gKy8qCj4g KyAqIEZ1bmN0aW9uIHNwZWNpZmllZCBieSBTTUMgQ2FsbGluZyBjb252ZW50aW9uCj4gKyAqCj4g KyAqIFJldHVybiBvbmUgb2YgdGhlIGZvbGxvd2luZyBVSURzIGlmIHVzaW5nIEFQSSBzcGVjaWZp ZWQgaW4gdGhpcyBmaWxlCj4gKyAqIHdpdGhvdXQgZnVydGhlciBleHRlbnRpb25zOgo+ICsgKiA2 NWNiNmI5My1hZjBjLTQ2MTctOGVkNi02NDRhOGQxMTQwZjgKPiArICogc2VlIGFsc28gT1BURUVf U01DX1VJRF8qIGluIG9wdGVlX21zZy5oCj4gKyAqLwo+ICsjZGVmaW5lIE9QVEVFX1NNQ19GVU5D SURfQ0FMTFNfVUlEIE9QVEVFX01TR19GVU5DSURfQ0FMTFNfVUlECj4gKyNkZWZpbmUgT1BURUVf U01DX0NBTExTX1VJRCBcCj4gKwlBUk1fU01DQ0NfQ0FMTF9WQUwoQVJNX1NNQ0NDX0ZBU1RfQ0FM TCwgQVJNX1NNQ0NDX0NPTlZfMzIsIFwKPiArCQkJICAgQVJNX1NNQ0NDX09XTkVSX1RSVVNURURf T1NfRU5ELCBcCj4gKwkJCSAgIE9QVEVFX1NNQ19GVU5DSURfQ0FMTFNfVUlEKQo+ICsKPiArLyoK PiArICogRnVuY3Rpb24gc3BlY2lmaWVkIGJ5IFNNQyBDYWxsaW5nIGNvbnZlbnRpb24KPiArICoK PiArICogUmV0dXJucyAyLjAgaWYgdXNpbmcgQVBJIHNwZWNpZmllZCBpbiB0aGlzIGZpbGUgd2l0 aG91dCBmdXJ0aGVyIGV4dGVudGlvbnMuCj4gKyAqIHNlZSBhbHNvIE9QVEVFX01TR19SRVZJU0lP Tl8qIGluIG9wdGVlX21zZy5oCj4gKyAqLwo+ICsjZGVmaW5lIE9QVEVFX1NNQ19GVU5DSURfQ0FM TFNfUkVWSVNJT04gT1BURUVfTVNHX0ZVTkNJRF9DQUxMU19SRVZJU0lPTgo+ICsjZGVmaW5lIE9Q VEVFX1NNQ19DQUxMU19SRVZJU0lPTiBcCj4gKwlBUk1fU01DQ0NfQ0FMTF9WQUwoQVJNX1NNQ0ND X0ZBU1RfQ0FMTCwgQVJNX1NNQ0NDX0NPTlZfMzIsIFwKPiArCQkJICAgQVJNX1NNQ0NDX09XTkVS X1RSVVNURURfT1NfRU5ELCBcCj4gKwkJCSAgIE9QVEVFX1NNQ19GVU5DSURfQ0FMTFNfUkVWSVNJ T04pCj4gKwo+ICtzdHJ1Y3Qgb3B0ZWVfc21jX2NhbGxzX3JldmlzaW9uX3Jlc3VsdCB7Cj4gKwl1 bnNpZ25lZCBsb25nIG1ham9yOwo+ICsJdW5zaWduZWQgbG9uZyBtaW5vcjsKPiArCXVuc2lnbmVk IGxvbmcgcmVzZXJ2ZWQwOwo+ICsJdW5zaWduZWQgbG9uZyByZXNlcnZlZDE7Cj4gK307Cj4gKwo+ ICsvKgo+ICsgKiBHZXQgVVVJRCBvZiBUcnVzdGVkIE9TLgo+ICsgKgo+ICsgKiBVc2VkIGJ5IG5v bi1zZWN1cmUgd29ybGQgdG8gZmlndXJlIG91dCB3aGljaCBUcnVzdGVkIE9TIGlzIGluc3RhbGxl ZC4KPiArICogTm90ZSB0aGF0IHJldHVybmVkIFVVSUQgaXMgdGhlIFVVSUQgb2YgdGhlIFRydXN0 ZWQgT1MsIG5vdCBvZiB0aGUgQVBJLgo+ICsgKgo+ICsgKiBSZXR1cm5zIFVVSUQgaW4gYTAtNCBp biB0aGUgc2FtZSB3YXkgYXMgT1BURUVfU01DX0NBTExTX1VJRAo+ICsgKiBkZXNjcmliZWQgYWJv dmUuCj4gKyAqLwo+ICsjZGVmaW5lIE9QVEVFX1NNQ19GVU5DSURfR0VUX09TX1VVSUQgT1BURUVf TVNHX0ZVTkNJRF9HRVRfT1NfVVVJRAo+ICsjZGVmaW5lIE9QVEVFX1NNQ19DQUxMX0dFVF9PU19V VUlEIFwKPiArCU9QVEVFX1NNQ19GQVNUX0NBTExfVkFMKE9QVEVFX1NNQ19GVU5DSURfR0VUX09T X1VVSUQpCj4gKwo+ICsvKgo+ICsgKiBHZXQgcmV2aXNpb24gb2YgVHJ1c3RlZCBPUy4KPiArICoK PiArICogVXNlZCBieSBub24tc2VjdXJlIHdvcmxkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggdmVyc2lv biBvZiB0aGUgVHJ1c3RlZCBPUwo+ICsgKiBpcyBpbnN0YWxsZWQuIE5vdGUgdGhhdCB0aGUgcmV0 dXJuZWQgcmV2aXNpb24gaXMgdGhlIHJldmlzaW9uIG9mIHRoZQo+ICsgKiBUcnVzdGVkIE9TLCBu b3Qgb2YgdGhlIEFQSS4KPiArICoKPiArICogUmV0dXJucyByZXZpc2lvbiBpbiBhMC0xIGluIHRo ZSBzYW1lIHdheSBhcyBPUFRFRV9TTUNfQ0FMTFNfUkVWSVNJT04KPiArICogZGVzY3JpYmVkIGFi b3ZlLgo+ICsgKi8KPiArI2RlZmluZSBPUFRFRV9TTUNfRlVOQ0lEX0dFVF9PU19SRVZJU0lPTiBP UFRFRV9NU0dfRlVOQ0lEX0dFVF9PU19SRVZJU0lPTgo+ICsjZGVmaW5lIE9QVEVFX1NNQ19DQUxM X0dFVF9PU19SRVZJU0lPTiBcCj4gKwlPUFRFRV9TTUNfRkFTVF9DQUxMX1ZBTChPUFRFRV9TTUNf RlVOQ0lEX0dFVF9PU19SRVZJU0lPTikKPiArCj4gKy8qCj4gKyAqIENhbGwgd2l0aCBzdHJ1Y3Qg b3B0ZWVfbXNnX2FyZyBhcyBhcmd1bWVudAo+ICsgKgo+ICsgKiBDYWxsIHJlZ2lzdGVyIHVzYWdl Ogo+ICsgKiBhMAlTTUMgRnVuY3Rpb24gSUQsIE9QVEVFX1NNQypDQUxMX1dJVEhfQVJHCj4gKyAq IGExCVVwcGVyIDMyYml0IG9mIGEgNjRiaXQgcGh5c2ljYWwgcG9pbnRlciB0byBhIHN0cnVjdCBv cHRlZV9tc2dfYXJnCj4gKyAqIGEyCUxvd2VyIDMyYml0IG9mIGEgNjRiaXQgcGh5c2ljYWwgcG9p bnRlciB0byBhIHN0cnVjdCBvcHRlZV9tc2dfYXJnCj4gKyAqIGEzCUNhY2hlIHNldHRpbmdzLCBu b3QgdXNlZCBpZiBwaHlzaWNhbCBwb2ludGVyIGlzIGluIGEgcHJlZGVmaW5lZCBzaGFyZWQKPiAr ICoJbWVtb3J5IGFyZWEgZWxzZSBwZXIgT1BURUVfU01DX1NITV8qCj4gKyAqIGE0LTYJTm90IHVz ZWQKPiArICogYTcJSHlwZXJ2aXNvciBDbGllbnQgSUQgcmVnaXN0ZXIKPiArICoKPiArICogTm9y bWFsIHJldHVybiByZWdpc3RlciB1c2FnZToKPiArICogYTAJUmV0dXJuIHZhbHVlLCBPUFRFRV9T TUNfUkVUVVJOXyoKPiArICogYTEtMwlOb3QgdXNlZAo+ICsgKiBhNC03CVByZXNlcnZlZAo+ICsg Kgo+ICsgKiBPUFRFRV9TTUNfUkVUVVJOX0VUSFJFQURfTElNSVQgcmV0dXJuIHJlZ2lzdGVyIHVz YWdlOgo+ICsgKiBhMAlSZXR1cm4gdmFsdWUsIE9QVEVFX1NNQ19SRVRVUk5fRVRIUkVBRF9MSU1J VAo+ICsgKiBhMS0zCVByZXNlcnZlZAo+ICsgKiBhNC03CVByZXNlcnZlZAo+ICsgKgo+ICsgKiBS UEMgcmV0dXJuIHJlZ2lzdGVyIHVzYWdlOgo+ICsgKiBhMAlSZXR1cm4gdmFsdWUsIE9QVEVFX1NN Q19SRVRVUk5fSVNfUlBDKHZhbCkKPiArICogYTEtMglSUEMgcGFyYW1ldGVycwo+ICsgKiBhMy03 CVJlc3VtZSBpbmZvcm1hdGlvbiwgbXVzdCBiZSBwcmVzZXJ2ZWQKPiArICoKPiArICogUG9zc2li bGUgcmV0dXJuIHZhbHVlczoKPiArICogT1BURUVfU01DX1JFVFVSTl9VTktOT1dOX0ZVTkNUSU9O CVRydXN0ZWQgT1MgZG9lcyBub3QgcmVjb2duaXplIHRoaXMKPiArICoJCQkJCWZ1bmN0aW9uLgo+ ICsgKiBPUFRFRV9TTUNfUkVUVVJOX09LCQkJQ2FsbCBjb21wbGV0ZWQsIHJlc3VsdCB1cGRhdGVk IGluCj4gKyAqCQkJCQl0aGUgcHJldmlvdXNseSBzdXBwbGllZCBzdHJ1Y3QKPiArICoJCQkJCW9w dGVlX21zZ19hcmcuCj4gKyAqIE9QVEVFX1NNQ19SRVRVUk5fRVRIUkVBRF9MSU1JVAlOdW1iZXIg b2YgVHJ1c3RlZCBPUyB0aHJlYWRzIGV4Y2VlZGVkLAo+ICsgKgkJCQkJdHJ5IGFnYWluIGxhdGVy Lgo+ICsgKiBPUFRFRV9TTUNfUkVUVVJOX0VCQURBRERSCQlCYWQgcGh5c2NpYWwgcG9pbnRlciB0 byBzdHJ1Y3QKPiArICoJCQkJCW9wdGVlX21zZ19hcmcuCj4gKyAqIE9QVEVFX1NNQ19SRVRVUk5f RUJBRENNRAkJQmFkL3Vua25vd24gY21kIGluIHN0cnVjdCBvcHRlZV9tc2dfYXJnCj4gKyAqIE9Q VEVFX1NNQ19SRVRVUk5fSVNfUlBDKCkJCUNhbGwgc3VzcGVuZGVkIGJ5IFJQQyBjYWxsIHRvIG5v cm1hbAo+ICsgKgkJCQkJd29ybGQuCj4gKyAqLwo+ICsjZGVmaW5lIE9QVEVFX1NNQ19GVU5DSURf Q0FMTF9XSVRIX0FSRyBPUFRFRV9NU0dfRlVOQ0lEX0NBTExfV0lUSF9BUkcKPiArI2RlZmluZSBP UFRFRV9TTUNfQ0FMTF9XSVRIX0FSRyBcCj4gKwlPUFRFRV9TTUNfU1REX0NBTExfVkFMKE9QVEVF X1NNQ19GVU5DSURfQ0FMTF9XSVRIX0FSRykKPiArCj4gKy8qCj4gKyAqIEdldCBTaGFyZWQgTWVt b3J5IENvbmZpZwo+ICsgKgo+ICsgKiBSZXR1cm5zIHRoZSBTZWN1cmUvTm9uLXNlY3VyZSBzaGFy ZWQgbWVtb3J5IGNvbmZpZy4KPiArICoKPiArICogQ2FsbCByZWdpc3RlciB1c2FnZToKPiArICog YTAJU01DIEZ1bmN0aW9uIElELCBPUFRFRV9TTUNfR0VUX1NITV9DT05GSUcKPiArICogYTEtNglO b3QgdXNlZAo+ICsgKiBhNwlIeXBlcnZpc29yIENsaWVudCBJRCByZWdpc3Rlcgo+ICsgKgo+ICsg KiBIYXZlIGNvbmZpZyByZXR1cm4gcmVnaXN0ZXIgdXNhZ2U6Cj4gKyAqIGEwCU9QVEVFX1NNQ19S RVRVUk5fT0sKPiArICogYTEJUGh5c2ljYWwgYWRkcmVzcyBvZiBzdGFydCBvZiBTSE0KPiArICog YTIJU2l6ZSBvZiBvZiBTSE0KPiArICogYTMJQ2FjaGUgc2V0dGluZ3Mgb2YgbWVtb3J5LCBhcyBk ZWZpbmVkIGJ5IHRoZQo+ICsgKglPUFRFRV9TTUNfU0hNXyogdmFsdWVzIGFib3ZlCj4gKyAqIGE0 LTcJUHJlc2VydmVkCj4gKyAqCj4gKyAqIE5vdCBhdmFpbGFibGUgcmVnaXN0ZXIgdXNhZ2U6Cj4g KyAqIGEwCU9QVEVFX1NNQ19SRVRVUk5fRU5PVEFWQUlMCj4gKyAqIGExLTMgTm90IHVzZWQKPiAr ICogYTQtNwlQcmVzZXJ2ZWQKPiArICovCj4gKyNkZWZpbmUgT1BURUVfU01DX0ZVTkNJRF9HRVRf U0hNX0NPTkZJRwk3Cj4gKyNkZWZpbmUgT1BURUVfU01DX0dFVF9TSE1fQ09ORklHIFwKPiArCU9Q VEVFX1NNQ19GQVNUX0NBTExfVkFMKE9QVEVFX1NNQ19GVU5DSURfR0VUX1NITV9DT05GSUcpCj4g Kwo+ICtzdHJ1Y3Qgb3B0ZWVfc21jX2dldF9zaG1fY29uZmlnX3Jlc3VsdCB7Cj4gKwl1bnNpZ25l ZCBsb25nIHN0YXR1czsKPiArCXVuc2lnbmVkIGxvbmcgc3RhcnQ7Cj4gKwl1bnNpZ25lZCBsb25n IHNpemU7Cj4gKwl1bnNpZ25lZCBsb25nIHNldHRpbmdzOwo+ICt9Owo+ICsKPiArLyoKPiArICog RXhjaGFuZ2VzIGNhcGFiaWxpdGllcyBiZXR3ZWVuIG5vcm1hbCB3b3JsZCBhbmQgc2VjdXJlIHdv cmxkCj4gKyAqCj4gKyAqIENhbGwgcmVnaXN0ZXIgdXNhZ2U6Cj4gKyAqIGEwCVNNQyBGdW5jdGlv biBJRCwgT1BURUVfU01DX0VYQ0hBTkdFX0NBUEFCSUxJVElFUwo+ICsgKiBhMQliaXRmaWVsZCBv ZiBub3JtYWwgd29ybGQgY2FwYWJpbGl0aWVzIE9QVEVFX1NNQ19OU0VDX0NBUF8qCj4gKyAqIGEy LTYJTm90IHVzZWQKPiArICogYTcJSHlwZXJ2aXNvciBDbGllbnQgSUQgcmVnaXN0ZXIKPiArICoK PiArICogTm9ybWFsIHJldHVybiByZWdpc3RlciB1c2FnZToKPiArICogYTAJT1BURUVfU01DX1JF VFVSTl9PSwo+ICsgKiBhMQliaXRmaWVsZCBvZiBzZWN1cmUgd29ybGQgY2FwYWJpbGl0aWVzIE9Q VEVFX1NNQ19TRUNfQ0FQXyoKPiArICogYTItNwlQcmVzZXJ2ZWQKPiArICoKPiArICogRXJyb3Ig cmV0dXJuIHJlZ2lzdGVyIHVzYWdlOgo+ICsgKiBhMAlPUFRFRV9TTUNfUkVUVVJOX0VOT1RBVkFJ TCwgY2FuJ3QgdXNlIHRoZSBjYXBhYmlsaXRpZXMgZnJvbSBub3JtYWwgd29ybGQKPiArICogYTEJ Yml0ZmllbGQgb2Ygc2VjdXJlIHdvcmxkIGNhcGFiaWxpdGllcyBPUFRFRV9TTUNfU0VDX0NBUF8q Cj4gKyAqIGEyLTcgUHJlc2VydmVkCj4gKyAqLwo+ICsvKiBOb3JtYWwgd29ybGQgd29ya3MgYXMg YSB1bmlwcm9jZXNzb3Igc3lzdGVtICovCj4gKyNkZWZpbmUgT1BURUVfU01DX05TRUNfQ0FQX1VO SVBST0NFU1NPUgkJQklUKDApCj4gKy8qIFNlY3VyZSB3b3JsZCBoYXMgcmVzZXJ2ZWQgc2hhcmVk IG1lbW9yeSBmb3Igbm9ybWFsIHdvcmxkIHRvIHVzZSAqLwo+ICsjZGVmaW5lIE9QVEVFX1NNQ19T RUNfQ0FQX0hBVkVfUkVTRVJWRURfU0hNCUJJVCgwKQo+ICsvKiBTZWN1cmUgd29ybGQgY2FuIGNv bW11bmljYXRlIHZpYSBwcmV2aW91c2x5IHVucmVnaXN0ZXJlZCBzaGFyZWQgbWVtb3J5ICovCj4g KyNkZWZpbmUgT1BURUVfU01DX1NFQ19DQVBfVU5SRUdJU1RFUkVEX1NITQlCSVQoMSkKPiArCj4g Ky8qCj4gKyAqIFNlY3VyZSB3b3JsZCBzdXBwb3J0cyBjb21tYW5kcyAicmVnaXN0ZXIvdW5yZWdp c3RlciBzaGFyZWQgbWVtb3J5IiwKPiArICogc2VjdXJlIHdvcmxkIGFjY2VwdHMgY29tbWFuZCBi dWZmZXJzIGxvY2F0ZWQgaW4gYW55IHBhcnRzIG9mIG5vbi1zZWN1cmUgUkFNCj4gKyAqLwo+ICsj ZGVmaW5lIE9QVEVFX1NNQ19TRUNfQ0FQX0RZTkFNSUNfU0hNCQlCSVQoMikKPiArCj4gKyNkZWZp bmUgT1BURUVfU01DX0ZVTkNJRF9FWENIQU5HRV9DQVBBQklMSVRJRVMJOQo+ICsjZGVmaW5lIE9Q VEVFX1NNQ19FWENIQU5HRV9DQVBBQklMSVRJRVMgXAo+ICsJT1BURUVfU01DX0ZBU1RfQ0FMTF9W QUwoT1BURUVfU01DX0ZVTkNJRF9FWENIQU5HRV9DQVBBQklMSVRJRVMpCj4gKwo+ICtzdHJ1Y3Qg b3B0ZWVfc21jX2V4Y2hhbmdlX2NhcGFiaWxpdGllc19yZXN1bHQgewo+ICsJdW5zaWduZWQgbG9u ZyBzdGF0dXM7Cj4gKwl1bnNpZ25lZCBsb25nIGNhcGFiaWxpdGllczsKPiArCXVuc2lnbmVkIGxv bmcgcmVzZXJ2ZWQwOwo+ICsJdW5zaWduZWQgbG9uZyByZXNlcnZlZDE7Cj4gK307Cj4gKwo+ICsv Kgo+ICsgKiBEaXNhYmxlIGFuZCBlbXB0aWVzIGNhY2hlIG9mIHNoYXJlZCBtZW1vcnkgb2JqZWN0 cwo+ICsgKgo+ICsgKiBTZWN1cmUgd29ybGQgY2FuIGNhY2hlIGZyZXF1ZW50bHkgdXNlZCBzaGFy ZWQgbWVtb3J5IG9iamVjdHMsIGZvcgo+ICsgKiBleGFtcGxlIG9iamVjdHMgdXNlZCBhcyBSUEMg YXJndW1lbnRzLiBXaGVuIHNlY3VyZSB3b3JsZCBpcyBpZGxlIHRoaXMKPiArICogZnVuY3Rpb24g cmV0dXJucyBvbmUgc2hhcmVkIG1lbW9yeSByZWZlcmVuY2UgdG8gZnJlZS4gVG8gZGlzYWJsZSB0 aGUKPiArICogY2FjaGUgYW5kIGZyZWUgYWxsIGNhY2hlZCBvYmplY3RzIHRoaXMgZnVuY3Rpb24g aGFzIHRvIGJlIGNhbGxlZCB1bnRpbAo+ICsgKiBpdCByZXR1cm5zIE9QVEVFX1NNQ19SRVRVUk5f RU5PVEFWQUlMLgo+ICsgKgo+ICsgKiBDYWxsIHJlZ2lzdGVyIHVzYWdlOgo+ICsgKiBhMAlTTUMg RnVuY3Rpb24gSUQsIE9QVEVFX1NNQ19ESVNBQkxFX1NITV9DQUNIRQo+ICsgKiBhMS02CU5vdCB1 c2VkCj4gKyAqIGE3CUh5cGVydmlzb3IgQ2xpZW50IElEIHJlZ2lzdGVyCj4gKyAqCj4gKyAqIE5v cm1hbCByZXR1cm4gcmVnaXN0ZXIgdXNhZ2U6Cj4gKyAqIGEwCU9QVEVFX1NNQ19SRVRVUk5fT0sK PiArICogYTEJVXBwZXIgMzJiaXQgb2YgYSA2NGJpdCBTaGFyZWQgbWVtb3J5IGNvb2tpZQo+ICsg KiBhMglMb3dlciAzMmJpdCBvZiBhIDY0Yml0IFNoYXJlZCBtZW1vcnkgY29va2llCj4gKyAqIGEz LTcJUHJlc2VydmVkCj4gKyAqCj4gKyAqIENhY2hlIGVtcHR5IHJldHVybiByZWdpc3RlciB1c2Fn ZToKPiArICogYTAJT1BURUVfU01DX1JFVFVSTl9FTk9UQVZBSUwKPiArICogYTEtNwlQcmVzZXJ2 ZWQKPiArICoKPiArICogTm90IGlkbGUgcmV0dXJuIHJlZ2lzdGVyIHVzYWdlOgo+ICsgKiBhMAlP UFRFRV9TTUNfUkVUVVJOX0VCVVNZCj4gKyAqIGExLTcJUHJlc2VydmVkCj4gKyAqLwo+ICsjZGVm aW5lIE9QVEVFX1NNQ19GVU5DSURfRElTQUJMRV9TSE1fQ0FDSEUJMTAKPiArI2RlZmluZSBPUFRF RV9TTUNfRElTQUJMRV9TSE1fQ0FDSEUgXAo+ICsJT1BURUVfU01DX0ZBU1RfQ0FMTF9WQUwoT1BU RUVfU01DX0ZVTkNJRF9ESVNBQkxFX1NITV9DQUNIRSkKPiArCj4gK3N0cnVjdCBvcHRlZV9zbWNf ZGlzYWJsZV9zaG1fY2FjaGVfcmVzdWx0IHsKPiArCXVuc2lnbmVkIGxvbmcgc3RhdHVzOwo+ICsJ dW5zaWduZWQgbG9uZyBzaG1fdXBwZXIzMjsKPiArCXVuc2lnbmVkIGxvbmcgc2htX2xvd2VyMzI7 Cj4gKwl1bnNpZ25lZCBsb25nIHJlc2VydmVkMDsKPiArfTsKPiArCj4gKy8qCj4gKyAqIEVuYWJs ZSBjYWNoZSBvZiBzaGFyZWQgbWVtb3J5IG9iamVjdHMKPiArICoKPiArICogU2VjdXJlIHdvcmxk IGNhbiBjYWNoZSBmcmVxdWVudGx5IHVzZWQgc2hhcmVkIG1lbW9yeSBvYmplY3RzLCBmb3IKPiAr ICogZXhhbXBsZSBvYmplY3RzIHVzZWQgYXMgUlBDIGFyZ3VtZW50cy4gV2hlbiBzZWN1cmUgd29y bGQgaXMgaWRsZSB0aGlzCj4gKyAqIGZ1bmN0aW9uIHJldHVybnMgT1BURUVfU01DX1JFVFVSTl9P SyBhbmQgdGhlIGNhY2hlIGlzIGVuYWJsZWQuIElmCj4gKyAqIHNlY3VyZSB3b3JsZCBpc24ndCBp ZGxlIE9QVEVFX1NNQ19SRVRVUk5fRUJVU1kgaXMgcmV0dXJuZWQuCj4gKyAqCj4gKyAqIENhbGwg cmVnaXN0ZXIgdXNhZ2U6Cj4gKyAqIGEwCVNNQyBGdW5jdGlvbiBJRCwgT1BURUVfU01DX0VOQUJM RV9TSE1fQ0FDSEUKPiArICogYTEtNglOb3QgdXNlZAo+ICsgKiBhNwlIeXBlcnZpc29yIENsaWVu dCBJRCByZWdpc3Rlcgo+ICsgKgo+ICsgKiBOb3JtYWwgcmV0dXJuIHJlZ2lzdGVyIHVzYWdlOgo+ ICsgKiBhMAlPUFRFRV9TTUNfUkVUVVJOX09LCj4gKyAqIGExLTcJUHJlc2VydmVkCj4gKyAqCj4g KyAqIE5vdCBpZGxlIHJldHVybiByZWdpc3RlciB1c2FnZToKPiArICogYTAJT1BURUVfU01DX1JF VFVSTl9FQlVTWQo+ICsgKiBhMS03CVByZXNlcnZlZAo+ICsgKi8KPiArI2RlZmluZSBPUFRFRV9T TUNfRlVOQ0lEX0VOQUJMRV9TSE1fQ0FDSEUJMTEKPiArI2RlZmluZSBPUFRFRV9TTUNfRU5BQkxF X1NITV9DQUNIRSBcCj4gKwlPUFRFRV9TTUNfRkFTVF9DQUxMX1ZBTChPUFRFRV9TTUNfRlVOQ0lE X0VOQUJMRV9TSE1fQ0FDSEUpCj4gKwo+ICsvKgo+ICsgKiBSZXN1bWUgZnJvbSBSUEMgKGZvciBl eGFtcGxlIGFmdGVyIHByb2Nlc3NpbmcgYSBmb3JlaWduIGludGVycnVwdCkKPiArICoKPiArICog Q2FsbCByZWdpc3RlciB1c2FnZToKPiArICogYTAJU01DIEZ1bmN0aW9uIElELCBPUFRFRV9TTUNf Q0FMTF9SRVRVUk5fRlJPTV9SUEMKPiArICogYTEtMwlWYWx1ZSBvZiBhMS0zIHdoZW4gT1BURUVf U01DX0NBTExfV0lUSF9BUkcgcmV0dXJuZWQKPiArICoJT1BURUVfU01DX1JFVFVSTl9SUEMgaW4g YTAKPiArICoKPiArICogUmV0dXJuIHJlZ2lzdGVyIHVzYWdlIGlzIHRoZSBzYW1lIGFzIGZvciBP UFRFRV9TTUNfKkNBTExfV0lUSF9BUkcgYWJvdmUuCj4gKyAqCj4gKyAqIFBvc3NpYmxlIHJldHVy biB2YWx1ZXMKPiArICogT1BURUVfU01DX1JFVFVSTl9VTktOT1dOX0ZVTkNUSU9OCVRydXN0ZWQg T1MgZG9lcyBub3QgcmVjb2duaXplIHRoaXMKPiArICoJCQkJCWZ1bmN0aW9uLgo+ICsgKiBPUFRF RV9TTUNfUkVUVVJOX09LCQkJT3JpZ2luYWwgY2FsbCBjb21wbGV0ZWQsIHJlc3VsdAo+ICsgKgkJ CQkJdXBkYXRlZCBpbiB0aGUgcHJldmlvdXNseSBzdXBwbGllZC4KPiArICoJCQkJCXN0cnVjdCBv cHRlZV9tc2dfYXJnCj4gKyAqIE9QVEVFX1NNQ19SRVRVUk5fUlBDCQkJQ2FsbCBzdXNwZW5kZWQg YnkgUlBDIGNhbGwgdG8gbm9ybWFsCj4gKyAqCQkJCQl3b3JsZC4KPiArICogT1BURUVfU01DX1JF VFVSTl9FUkVTVU1FCQlSZXN1bWUgZmFpbGVkLCB0aGUgb3BhcXVlIHJlc3VtZQo+ICsgKgkJCQkJ aW5mb3JtYXRpb24gd2FzIGNvcnJ1cHQuCj4gKyAqLwo+ICsjZGVmaW5lIE9QVEVFX1NNQ19GVU5D SURfUkVUVVJOX0ZST01fUlBDCTMKPiArI2RlZmluZSBPUFRFRV9TTUNfQ0FMTF9SRVRVUk5fRlJP TV9SUEMgXAo+ICsJT1BURUVfU01DX1NURF9DQUxMX1ZBTChPUFRFRV9TTUNfRlVOQ0lEX1JFVFVS Tl9GUk9NX1JQQykKPiArCj4gKyNkZWZpbmUgT1BURUVfU01DX1JFVFVSTl9SUENfUFJFRklYX01B U0sJMHhGRkZGMDAwMAo+ICsjZGVmaW5lIE9QVEVFX1NNQ19SRVRVUk5fUlBDX1BSRUZJWAkJMHhG RkZGMDAwMAo+ICsjZGVmaW5lIE9QVEVFX1NNQ19SRVRVUk5fUlBDX0ZVTkNfTUFTSwkJMHgwMDAw RkZGRgo+ICsKPiArI2RlZmluZSBPUFRFRV9TTUNfUkVUVVJOX0dFVF9SUENfRlVOQyhyZXQpIFwK PiArCSgocmV0KSAmIE9QVEVFX1NNQ19SRVRVUk5fUlBDX0ZVTkNfTUFTSykKPiArCj4gKyNkZWZp bmUgT1BURUVfU01DX1JQQ19WQUwoZnVuYykJCSgoZnVuYykgfCBPUFRFRV9TTUNfUkVUVVJOX1JQ Q19QUkVGSVgpCj4gKwo+ICsvKgo+ICsgKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIFJQQyBwYXJhbWV0 ZXIgcGFzc2luZy4gVGhlIG1lbW9yeSBpcyB1c2VkIHRvIGhvbGQgYQo+ICsgKiBzdHJ1Y3Qgb3B0 ZWVfbXNnX2FyZy4KPiArICoKPiArICogIkNhbGwiIHJlZ2lzdGVyIHVzYWdlOgo+ICsgKiBhMAlU aGlzIHZhbHVlLCBPUFRFRV9TTUNfUkVUVVJOX1JQQ19BTExPQwo+ICsgKiBhMQlTaXplIGluIGJ5 dGVzIG9mIHJlcXVpcmVkIGFyZ3VtZW50IG1lbW9yeQo+ICsgKiBhMglOb3QgdXNlZAo+ICsgKiBh MwlSZXN1bWUgaW5mb3JtYXRpb24sIG11c3QgYmUgcHJlc2VydmVkCj4gKyAqIGE0LTUJTm90IHVz ZWQKPiArICogYTYtNwlSZXN1bWUgaW5mb3JtYXRpb24sIG11c3QgYmUgcHJlc2VydmVkCj4gKyAq Cj4gKyAqICJSZXR1cm4iIHJlZ2lzdGVyIHVzYWdlOgo+ICsgKiBhMAlTTUMgRnVuY3Rpb24gSUQs IE9QVEVFX1NNQ19DQUxMX1JFVFVSTl9GUk9NX1JQQy4KPiArICogYTEJVXBwZXIgMzJiaXRzIG9m IDY0Yml0IHBoeXNpY2FsIHBvaW50ZXIgdG8gYWxsb2NhdGVkCj4gKyAqCW1lbW9yeSwgKGExID09 IDAgJiYgYTIgPT0gMCkgaWYgc2l6ZSB3YXMgMCBvciBpZiBtZW1vcnkgY2FuJ3QKPiArICoJYmUg YWxsb2NhdGVkLgo+ICsgKiBhMglMb3dlciAzMmJpdHMgb2YgNjRiaXQgcGh5c2ljYWwgcG9pbnRl ciB0byBhbGxvY2F0ZWQKPiArICoJbWVtb3J5LCAoYTEgPT0gMCAmJiBhMiA9PSAwKSBpZiBzaXpl IHdhcyAwIG9yIGlmIG1lbW9yeSBjYW4ndAo+ICsgKgliZSBhbGxvY2F0ZWQKPiArICogYTMJUHJl c2VydmVkCj4gKyAqIGE0CVVwcGVyIDMyYml0cyBvZiA2NGJpdCBTaGFyZWQgbWVtb3J5IGNvb2tp ZSB1c2VkIHdoZW4gZnJlZWluZwo+ICsgKgl0aGUgbWVtb3J5IG9yIGRvaW5nIGFuIFJQQwo+ICsg KiBhNQlMb3dlciAzMmJpdHMgb2YgNjRiaXQgU2hhcmVkIG1lbW9yeSBjb29raWUgdXNlZCB3aGVu IGZyZWVpbmcKPiArICoJdGhlIG1lbW9yeSBvciBkb2luZyBhbiBSUEMKPiArICogYTYtNwlQcmVz ZXJ2ZWQKPiArICovCj4gKyNkZWZpbmUgT1BURUVfU01DX1JQQ19GVU5DX0FMTE9DCTAKPiArI2Rl ZmluZSBPUFRFRV9TTUNfUkVUVVJOX1JQQ19BTExPQyBcCj4gKwlPUFRFRV9TTUNfUlBDX1ZBTChP UFRFRV9TTUNfUlBDX0ZVTkNfQUxMT0MpCj4gKwo+ICsvKgo+ICsgKiBGcmVlIG1lbW9yeSBwcmV2 aW91c2x5IGFsbG9jYXRlZCBieSBPUFRFRV9TTUNfUkVUVVJOX1JQQ19BTExPQwo+ICsgKgo+ICsg KiAiQ2FsbCIgcmVnaXN0ZXIgdXNhZ2U6Cj4gKyAqIGEwCVRoaXMgdmFsdWUsIE9QVEVFX1NNQ19S RVRVUk5fUlBDX0ZSRUUKPiArICogYTEJVXBwZXIgMzJiaXRzIG9mIDY0Yml0IHNoYXJlZCBtZW1v cnkgY29va2llIGJlbG9uZ2luZyB0byB0aGlzCj4gKyAqCWFyZ3VtZW50IG1lbW9yeQo+ICsgKiBh MglMb3dlciAzMmJpdHMgb2YgNjRiaXQgc2hhcmVkIG1lbW9yeSBjb29raWUgYmVsb25naW5nIHRv IHRoaXMKPiArICoJYXJndW1lbnQgbWVtb3J5Cj4gKyAqIGEzLTcJUmVzdW1lIGluZm9ybWF0aW9u LCBtdXN0IGJlIHByZXNlcnZlZAo+ICsgKgo+ICsgKiAiUmV0dXJuIiByZWdpc3RlciB1c2FnZToK PiArICogYTAJU01DIEZ1bmN0aW9uIElELCBPUFRFRV9TTUNfQ0FMTF9SRVRVUk5fRlJPTV9SUEMu Cj4gKyAqIGExLTIJTm90IHVzZWQKPiArICogYTMtNwlQcmVzZXJ2ZWQKPiArICovCj4gKyNkZWZp bmUgT1BURUVfU01DX1JQQ19GVU5DX0ZSRUUJCTIKPiArI2RlZmluZSBPUFRFRV9TTUNfUkVUVVJO X1JQQ19GUkVFIFwKPiArCU9QVEVFX1NNQ19SUENfVkFMKE9QVEVFX1NNQ19SUENfRlVOQ19GUkVF KQo+ICsKPiArLyoKPiArICogRGVsaXZlciBmb3JlaWduIGludGVycnVwdCB0byBub3JtYWwgd29y bGQuCj4gKyAqCj4gKyAqICJDYWxsIiByZWdpc3RlciB1c2FnZToKPiArICogYTAJT1BURUVfU01D X1JFVFVSTl9SUENfRk9SRUlHTl9JTlRSCj4gKyAqIGExLTcJUmVzdW1lIGluZm9ybWF0aW9uLCBt dXN0IGJlIHByZXNlcnZlZAo+ICsgKgo+ICsgKiAiUmV0dXJuIiByZWdpc3RlciB1c2FnZToKPiAr ICogYTAJU01DIEZ1bmN0aW9uIElELCBPUFRFRV9TTUNfQ0FMTF9SRVRVUk5fRlJPTV9SUEMuCj4g KyAqIGExLTcJUHJlc2VydmVkCj4gKyAqLwo+ICsjZGVmaW5lIE9QVEVFX1NNQ19SUENfRlVOQ19G T1JFSUdOX0lOVFIJCTQKPiArI2RlZmluZSBPUFRFRV9TTUNfUkVUVVJOX1JQQ19GT1JFSUdOX0lO VFIgXAo+ICsJT1BURUVfU01DX1JQQ19WQUwoT1BURUVfU01DX1JQQ19GVU5DX0ZPUkVJR05fSU5U UikKPiArCj4gKy8qCj4gKyAqIERvIGFuIFJQQyByZXF1ZXN0LiBUaGUgc3VwcGxpZWQgc3RydWN0 IG9wdGVlX21zZ19hcmcgdGVsbHMgd2hpY2gKPiArICogcmVxdWVzdCB0byBkbyBhbmQgdGhlIHBh cmFtZXRlcnMgZm9yIHRoZSByZXF1ZXN0LiBUaGUgZm9sbG93aW5nIGZpZWxkcwo+ICsgKiBhcmUg dXNlZCAodGhlIHJlc3QgYXJlIHVudXNlZCk6Cj4gKyAqIC0gY21kCQl0aGUgUmVxdWVzdCBJRAo+ ICsgKiAtIHJldAkJcmV0dXJuIHZhbHVlIG9mIHRoZSByZXF1ZXN0LCBmaWxsZWQgaW4gYnkgbm9y bWFsIHdvcmxkCj4gKyAqIC0gbnVtX3BhcmFtcwkJbnVtYmVyIG9mIHBhcmFtZXRlcnMgZm9yIHRo ZSByZXF1ZXN0Cj4gKyAqIC0gcGFyYW1zCQl0aGUgcGFyYW1ldGVycwo+ICsgKiAtIHBhcmFtX2F0 dHJzCWF0dHJpYnV0ZXMgb2YgdGhlIHBhcmFtZXRlcnMKPiArICoKPiArICogIkNhbGwiIHJlZ2lz dGVyIHVzYWdlOgo+ICsgKiBhMAlPUFRFRV9TTUNfUkVUVVJOX1JQQ19DTUQKPiArICogYTEJVXBw ZXIgMzJiaXQgb2YgYSA2NGJpdCBTaGFyZWQgbWVtb3J5IGNvb2tpZSBob2xkaW5nIGEKPiArICoJ c3RydWN0IG9wdGVlX21zZ19hcmcsIG11c3QgYmUgcHJlc2VydmVkLCBvbmx5IHRoZSBkYXRhIHNo b3VsZAo+ICsgKgliZSB1cGRhdGVkCj4gKyAqIGEyCUxvd2VyIDMyYml0IG9mIGEgNjRiaXQgU2hh cmVkIG1lbW9yeSBjb29raWUgaG9sZGluZyBhCj4gKyAqCXN0cnVjdCBvcHRlZV9tc2dfYXJnLCBt dXN0IGJlIHByZXNlcnZlZCwgb25seSB0aGUgZGF0YSBzaG91bGQKPiArICoJYmUgdXBkYXRlZAo+ ICsgKiBhMy03CVJlc3VtZSBpbmZvcm1hdGlvbiwgbXVzdCBiZSBwcmVzZXJ2ZWQKPiArICoKPiAr ICogIlJldHVybiIgcmVnaXN0ZXIgdXNhZ2U6Cj4gKyAqIGEwCVNNQyBGdW5jdGlvbiBJRCwgT1BU RUVfU01DX0NBTExfUkVUVVJOX0ZST01fUlBDLgo+ICsgKiBhMS0yCU5vdCB1c2VkCj4gKyAqIGEz LTcJUHJlc2VydmVkCj4gKyAqLwo+ICsjZGVmaW5lIE9QVEVFX1NNQ19SUENfRlVOQ19DTUQJCTUK PiArI2RlZmluZSBPUFRFRV9TTUNfUkVUVVJOX1JQQ19DTUQgXAo+ICsJT1BURUVfU01DX1JQQ19W QUwoT1BURUVfU01DX1JQQ19GVU5DX0NNRCkKPiArCj4gKy8qIFJldHVybmVkIGluIGEwICovCj4g KyNkZWZpbmUgT1BURUVfU01DX1JFVFVSTl9VTktOT1dOX0ZVTkNUSU9OIDB4RkZGRkZGRkYKPiAr Cj4gKy8qIFJldHVybmVkIGluIGEwIG9ubHkgZnJvbSBUcnVzdGVkIE9TIGZ1bmN0aW9ucyAqLwo+ ICsjZGVmaW5lIE9QVEVFX1NNQ19SRVRVUk5fT0sJCTB4MAo+ICsjZGVmaW5lIE9QVEVFX1NNQ19S RVRVUk5fRVRIUkVBRF9MSU1JVAkweDEKPiArI2RlZmluZSBPUFRFRV9TTUNfUkVUVVJOX0VCVVNZ CQkweDIKPiArI2RlZmluZSBPUFRFRV9TTUNfUkVUVVJOX0VSRVNVTUUJMHgzCj4gKyNkZWZpbmUg T1BURUVfU01DX1JFVFVSTl9FQkFEQUREUgkweDQKPiArI2RlZmluZSBPUFRFRV9TTUNfUkVUVVJO X0VCQURDTUQJMHg1Cj4gKyNkZWZpbmUgT1BURUVfU01DX1JFVFVSTl9FTk9NRU0JCTB4Ngo+ICsj ZGVmaW5lIE9QVEVFX1NNQ19SRVRVUk5fRU5PVEFWQUlMCTB4Nwo+ICsjZGVmaW5lIE9QVEVFX1NN Q19SRVRVUk5fSVNfUlBDKHJldCkJX19vcHRlZV9zbWNfcmV0dXJuX2lzX3JwYygocmV0KSkKPiAr Cj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBfX29wdGVlX3NtY19yZXR1cm5faXNfcnBjKHUzMiByZXQp Cj4gK3sKPiArCXJldHVybiByZXQgIT0gT1BURUVfU01DX1JFVFVSTl9VTktOT1dOX0ZVTkNUSU9O ICYmCj4gKwkgICAgICAgKHJldCAmIE9QVEVFX1NNQ19SRVRVUk5fUlBDX1BSRUZJWF9NQVNLKSA9 PQo+ICsJCQlPUFRFRV9TTUNfUkVUVVJOX1JQQ19QUkVGSVg7Cj4gK30KPiArCj4gKyNlbmRpZiAv KiBPUFRFRV9TTUNfSCAqLwo+IAoKLS0gCkp1bGllbiBHcmFsbAoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4t ZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==