From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH v2 04/13] optee: add OP-TEE mediator skeleton Date: Mon, 3 Sep 2018 18:38:07 +0100 Message-ID: References: <1535993677-20816-1-git-send-email-volodymyr_babchuk@epam.com> <1535993677-20816-5-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: <1535993677-20816-5-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.xenproject.org Sender: "Xen-devel" To: Volodymyr Babchuk , xen-devel@lists.xenproject.org, xen-devel@lists.xen.org Cc: tee-dev@lists.linaro.org, Stefano Stabellini List-Id: xen-devel@lists.xenproject.org SGkgVm9sb2R5bXlyLAoKT24gMDMvMDkvMTggMTc6NTQsIFZvbG9keW15ciBCYWJjaHVrIHdyb3Rl Ogo+IEFkZCB2ZXJ5IGJhc2ljIE9QLVRFRSBtZWRpYXRvci4gSXQgY2FuIHByb2JlIGZvciBPUC1U RUUgcHJlc2VuY2UsCj4gdGVsbCBpdCBhYm91dCBkb21haW4gY3JlYXRpb24vZGVzdHVjdGlvbiBh bmQgZm9yd2FyZCBhbGwga25vd24KCnMvZGVzdHVjdGlvbi9kZXN0cnVjdGlvbi8KCj4gY2FsbHMu Cj4gCj4gVGhpcyBpcyBhbGwgd2hhdCBpcyBuZWVkZWQgZm9yIERvbTAgdG8gd29yayB3aXRoIE9Q LVRFRSBhcyBsb25nCj4gYXMgRG9tMCBzaGFyZXMgMToxIG1hcHBlZCBwYWdlcyB3aXRoIE9QLVRF RS4gQW55IGF0dGVtcHQgdG8gY2FsbAo+IE9QLVRFRSBmcm9tIERvbVUgd2lsbCBmYWlsIGFuZCBj YW4gbGVhZCB0byBzcGVjdGFjdWxhciByZXN1bHRzLgoKU2hhbGwgd2UgZXhwZWN0IGZpcmV3b3Jr cz8gOikuCgpBbnl3YXksIEkgdGhpbmsgdGhpcyBpcyBhIGNhbGwgZm9yIGZvcmJpZGRpbmcgRG9t VSBhY2Nlc3MgdW50aWwgaXQgaXMgCnN1cHBvcnRlZC4gVGhpcyBhbHNvIGhhcyB0aGUgYmVuZWZp dHMgdG8gYWxsb3cgbWVyZ2luZyBEb20wIHN1cHBvcnQgZm9yIApPUC1URUUgd2l0aG91dCB0aGUg cmVzdC4KCj4gCj4gU2lnbmVkLW9mZi1ieTogVm9sb2R5bXlyIEJhYmNodWsgPHZvbG9keW15cl9i YWJjaHVrQGVwYW0uY29tPgo+IC0tLQo+ICAgeGVuL2FyY2gvYXJtL3RlZS9LY29uZmlnICAgICAg ICAgICAgfCAgIDQgKysKPiAgIHhlbi9hcmNoL2FybS90ZWUvTWFrZWZpbGUgICAgICAgICAgIHwg ICAxICsKPiAgIHhlbi9hcmNoL2FybS90ZWUvb3B0ZWUuYyAgICAgICAgICAgIHwgMTM0ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAgeGVuL2luY2x1ZGUvYXNtLWFybS90 ZWUvb3B0ZWVfc21jLmggfCAgNTAgKysrKysrKysrKysrKysKPiAgIDQgZmlsZXMgY2hhbmdlZCwg MTg5IGluc2VydGlvbnMoKykKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vYXJjaC9hcm0vdGVl L29wdGVlLmMKPiAKPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL3RlZS9LY29uZmlnIGIveGVu L2FyY2gvYXJtL3RlZS9LY29uZmlnCj4gaW5kZXggZTY5ZGUyOS4uNWI4MjlkYiAxMDA2NDQKPiAt LS0gYS94ZW4vYXJjaC9hcm0vdGVlL0tjb25maWcKPiArKysgYi94ZW4vYXJjaC9hcm0vdGVlL0tj b25maWcKPiBAQCAtMCwwICsxLDQgQEAKPiArY29uZmlnIE9QVEVFCj4gKwlib29sICJFbmFibGUg T1AtVEVFIG1lZGlhdG9yIgo+ICsJZGVmYXVsdCBuCj4gKwlkZXBlbmRzIG9uIFRFRQo+IGRpZmYg LS1naXQgYS94ZW4vYXJjaC9hcm0vdGVlL01ha2VmaWxlIGIveGVuL2FyY2gvYXJtL3RlZS9NYWtl ZmlsZQo+IGluZGV4IGM1NGQ0NzkuLjk4MmM4NzkgMTAwNjQ0Cj4gLS0tIGEveGVuL2FyY2gvYXJt L3RlZS9NYWtlZmlsZQo+ICsrKyBiL3hlbi9hcmNoL2FybS90ZWUvTWFrZWZpbGUKPiBAQCAtMSAr MSwyIEBACj4gICBvYmoteSArPSB0ZWUubwo+ICtvYmotJChDT05GSUdfT1BURUUpICs9IG9wdGVl Lm8KPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL3RlZS9vcHRlZS5jIGIveGVuL2FyY2gvYXJt L3RlZS9vcHRlZS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi43YmI4 NGQ5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3hlbi9hcmNoL2FybS90ZWUvb3B0ZWUuYwo+IEBA IC0wLDAgKzEsMTM0IEBACj4gKy8qCj4gKyAqIHhlbi9hcmNoL2FybS90ZWUvb3B0ZWUuYwo+ICsg Kgo+ICsgKiBPUC1URUUgbWVkaWF0b3IKPiArICoKPiArICogVm9sb2R5bXlyIEJhYmNodWsgPHZv bG9keW15cl9iYWJjaHVrQGVwYW0uY29tPgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTggRVBBTSBT eXN0ZW1zLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwo+ICsgKiBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICovCj4gKwo+ICsjaW5j bHVkZSA8eGVuL2RldmljZV90cmVlLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4KPiArI2lu Y2x1ZGUgPGFzbS9zbWNjYy5oPgo+ICsjaW5jbHVkZSA8YXNtL3RlZS90ZWUuaD4KPiArCj4gKyNp bmNsdWRlIDxhc20vdGVlL29wdGVlX21zZy5oPgo+ICsjaW5jbHVkZSA8YXNtL3RlZS9vcHRlZV9z bWMuaD4KPiArCj4gK3N0YXRpYyBib29sIG9wdGVlX3Byb2JlKHZvaWQpCj4gK3sKPiArICAgIHN0 cnVjdCBkdF9kZXZpY2Vfbm9kZSAqbm9kZTsKPiArICAgIHN0cnVjdCBhcm1fc21jY2NfcmVzIHJl c3A7Cj4gKwo+ICsgICAgLyogQ2hlY2sgZm9yIGVudHJ5IGluIGR0YiAgKi8KPiArICAgIG5vZGUg PSBkdF9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAibGluYXJvLG9wdGVlLXR6Iik7 Cj4gKyAgICBpZiAoICFub2RlICkKPiArICAgICAgICByZXR1cm4gZmFsc2U7Cj4gKwo+ICsgICAg LyogQ2hlY2sgVUlEICovCj4gKyAgICBhcm1fc21jY2Nfc21jKEFSTV9TTUNDQ19DQUxMX1VJRF9G SUQoVFJVU1RFRF9PU19FTkQpLCAmcmVzcCk7Cj4gKwo+ICsgICAgaWYgKCByZXNwLmEwICE9IE9Q VEVFX01TR19VSURfMCB8fAo+ICsgICAgICAgICByZXNwLmExICE9IE9QVEVFX01TR19VSURfMSB8 fAo+ICsgICAgICAgICByZXNwLmEyICE9IE9QVEVFX01TR19VSURfMiB8fAo+ICsgICAgICAgICBy ZXNwLmEzICE9IE9QVEVFX01TR19VSURfMyApCgpJIHdvdWxkIGJlIGV4dHJhIGNhdXRpb3VzIHdp dGggdGhlIHNpZ24tZXh0ZW5zaW9uIGhlcmUuIEl0IHdvdWxkIGJlIApiZXR0ZXIgdG8gZm9sbG93 IHRoZSBzcGVjIHJlZ2FyZGluZyBVVUlEIGJ5IGNhc3RpbmcgcmVzcC5hMCAmIGNvIHRvIDMyLWJp dC4KCj4gKyAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsKPiArICAgIHJldHVybiB0cnVlOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IG9wdGVlX2VuYWJsZShzdHJ1Y3QgZG9tYWluICpkKQo+ICt7Cj4g KyAgICBzdHJ1Y3QgYXJtX3NtY2NjX3JlcyByZXNwOwo+ICsKPiArICAgIGFybV9zbWNjY19zbWMo T1BURUVfU01DX1ZNX0NSRUFURUQsIGQtPmRvbWFpbl9pZCArIDEsIDAsIDAsIDAsIDAsIDAsIDAs Cj4gKyAgICAgICAgICAgICAgICAgICZyZXNwKTsKPiArICAgIGlmICggcmVzcC5hMCAhPSBPUFRF RV9TTUNfUkVUVVJOX09LICkgewo+ICsgICAgICAgIGdwcmludGsoWEVOTE9HX1dBUk5JTkcsICJP UC1URUUgZG9uJ3Qgd2FudCB0byBzdXBwb3J0IGRvbWFpbjogJWRcbiIsCgpUaGlzIG1lc3NhZ2Ug aXMgc2xpZ2h0bHkgb2RkLiBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gc2F5OgoKIlVuYWJsZSB0byBj cmVhdGUgT1AtVEVFIGNsaWVudDogcmM9JWRcbiIuCgo+ICsgICAgICAgICAgICAgICAgKHVpbnQz Ml90KXJlc3AuYTApOwo+ICsgICAgICAgIHJldHVybiAtRU5PREVWOwo+ICsgICAgfQo+ICsKPiAr ICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBmb3J3YXJkX2NhbGwoc3RydWN0 IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCj4gK3sKPiArICAgIHN0cnVjdCBhcm1fc21jY2NfcmVzIHJl c3A7Cj4gKwo+ICsgICAgYXJtX3NtY2NjX3NtYyhnZXRfdXNlcl9yZWcocmVncywgMCksCj4gKyAg ICAgICAgICAgICAgICAgIGdldF91c2VyX3JlZyhyZWdzLCAxKSwKPiArICAgICAgICAgICAgICAg ICAgZ2V0X3VzZXJfcmVnKHJlZ3MsIDIpLAo+ICsgICAgICAgICAgICAgICAgICBnZXRfdXNlcl9y ZWcocmVncywgMyksCj4gKyAgICAgICAgICAgICAgICAgIGdldF91c2VyX3JlZyhyZWdzLCA0KSwK PiArICAgICAgICAgICAgICAgICAgZ2V0X3VzZXJfcmVnKHJlZ3MsIDUpLAo+ICsgICAgICAgICAg ICAgICAgICBnZXRfdXNlcl9yZWcocmVncywgNiksCj4gKyAgICAgICAgICAgICAgICAgIC8qIGNs aWVudCBpZCAwIGlzIHJlc2VydmVkIGZvciBoeXBlcnZpc29yIGl0c2VsZiAqLwo+ICsgICAgICAg ICAgICAgICAgICBjdXJyZW50LT5kb21haW4tPmRvbWFpbl9pZCArIDEsCgpJIHdvdWxkIHByZWZl ciBpZiB0aGUgY2xpZW50IElEIGlzIGVuY29kZWQgaW4gYSBtYWNyby4gU28gdGhpcyBjb3VsZCBi ZSAKcmUtdXNlZC4KCj4gKyAgICAgICAgICAgICAgICAgICZyZXNwKTsKPiArCj4gKyAgICBzZXRf dXNlcl9yZWcocmVncywgMCwgcmVzcC5hMCk7Cj4gKyAgICBzZXRfdXNlcl9yZWcocmVncywgMSwg cmVzcC5hMSk7Cj4gKyAgICBzZXRfdXNlcl9yZWcocmVncywgMiwgcmVzcC5hMik7Cj4gKyAgICBz ZXRfdXNlcl9yZWcocmVncywgMywgcmVzcC5hMyk7Cj4gKyAgICBzZXRfdXNlcl9yZWcocmVncywg NCwgMCk7Cj4gKyAgICBzZXRfdXNlcl9yZWcocmVncywgNSwgMCk7Cj4gKyAgICBzZXRfdXNlcl9y ZWcocmVncywgNiwgMCk7Cj4gKyAgICBzZXRfdXNlcl9yZWcocmVncywgNywgMCk7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIG9wdGVlX2RvbWFpbl9kZXN0cm95KHN0cnVjdCBkb21haW4gKmQpCj4g K3sKPiArICAgIHN0cnVjdCBhcm1fc21jY2NfcmVzIHJlc3A7Cj4gKwo+ICsgICAgLyogQXQgdGhp cyB0aW1lIGFsbCBkb21haW4gVkNQVXMgc2hvdWxkIGJlIHN0b3BwZWQgKi8KPiArCj4gKyAgICAv KiBJbmZvcm0gT1AtVEVFIHRoYXQgZG9tYWluIGlzIHNodXR0aW5nIGRvd24gKi8KPiArICAgIGFy bV9zbWNjY19zbWMoT1BURUVfU01DX1ZNX0RFU1RST1lFRCwgZC0+ZG9tYWluX2lkICsgMSwgMCwg MCwgMCwgMCwgMCwgMCwKPiArICAgICAgICAgICAgICAgICAgJnJlc3ApOwoKU28gdGhpcyBTTUMg c2hvdWxkIG5ldmVyIGZhaWwgb3IgZXZlbiBnZXQgcHJlZW1wdGVkPyBJIHdhcyBraW5kIG9mIApl eHBlY3RpbmcgdGhhdCBpdCBtYXkgdGltZSBzb21lIHRpbWUgdG8gZGVzdHJveSBhIGRvbWFpbi4K Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIG9wdGVlX2hhbmRsZV9jYWxsKHN0cnVjdCBjcHVfdXNl cl9yZWdzICpyZWdzKQo+ICt7Cj4gKyAgICBzd2l0Y2ggKCBnZXRfdXNlcl9yZWcocmVncywgMCkg KQo+ICsgICAgewo+ICsgICAgY2FzZSBPUFRFRV9TTUNfQ0FMTFNfQ09VTlQ6Cj4gKyAgICBjYXNl IE9QVEVFX1NNQ19DQUxMU19VSUQ6Cj4gKyAgICBjYXNlIE9QVEVFX1NNQ19DQUxMU19SRVZJU0lP TjoKPiArICAgIGNhc2UgT1BURUVfU01DX0NBTExfR0VUX09TX1VVSUQ6Cj4gKyAgICBjYXNlIE9Q VEVFX1NNQ19GVU5DSURfR0VUX09TX1JFVklTSU9OOgo+ICsgICAgY2FzZSBPUFRFRV9TTUNfRU5B QkxFX1NITV9DQUNIRToKPiArICAgIGNhc2UgT1BURUVfU01DX0RJU0FCTEVfU0hNX0NBQ0hFOgo+ ICsgICAgY2FzZSBPUFRFRV9TTUNfR0VUX1NITV9DT05GSUc6Cj4gKyAgICBjYXNlIE9QVEVFX1NN Q19FWENIQU5HRV9DQVBBQklMSVRJRVM6Cj4gKyAgICBjYXNlIE9QVEVFX1NNQ19DQUxMX1dJVEhf QVJHOgo+ICsgICAgY2FzZSBPUFRFRV9TTUNfQ0FMTF9SRVRVUk5fRlJPTV9SUEM6Cj4gKyAgICAg ICAgZm9yd2FyZF9jYWxsKHJlZ3MpOwo+ICsgICAgICAgIHJldHVybiB0cnVlOwo+ICsgICAgZGVm YXVsdDoKPiArICAgICAgICByZXR1cm4gZmFsc2U7Cj4gKyAgICB9Cj4gK30KPiArCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgdGVlX21lZGlhdG9yX29wcyBvcHRlZV9vcHMgPQo+ICt7Cj4gKyAgICAu cHJvYmUgPSBvcHRlZV9wcm9iZSwKPiArICAgIC5lbmFibGUgPSBvcHRlZV9lbmFibGUsCj4gKyAg ICAuZG9tYWluX2Rlc3Ryb3kgPSBvcHRlZV9kb21haW5fZGVzdHJveSwKPiArICAgIC5oYW5kbGVf Y2FsbCA9IG9wdGVlX2hhbmRsZV9jYWxsLAo+ICt9Owo+ICsKPiArUkVHSVNURVJfVEVFX01FRElB VE9SKG9wdGVlLCAiT1AtVEVFIiwgJm9wdGVlX29wcyk7Cj4gKwo+ICsvKgo+ICsgKiBMb2NhbCB2 YXJpYWJsZXM6Cj4gKyAqIG1vZGU6IEMKPiArICogYy1maWxlLXN0eWxlOiAiQlNEIgo+ICsgKiBj LWJhc2ljLW9mZnNldDogNAo+ICsgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKPiArICogRW5kOgo+ ICsgKi8KPiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLWFybS90ZWUvb3B0ZWVfc21jLmgg Yi94ZW4vaW5jbHVkZS9hc20tYXJtL3RlZS9vcHRlZV9zbWMuaAo+IGluZGV4IDI2ZDEwMGUuLjFj NWEyNDcgMTAwNjQ0Cj4gLS0tIGEveGVuL2luY2x1ZGUvYXNtLWFybS90ZWUvb3B0ZWVfc21jLmgK PiArKysgYi94ZW4vaW5jbHVkZS9hc20tYXJtL3RlZS9vcHRlZV9zbWMuaAo+IEBAIC0zMDUsNiAr MzA1LDU2IEBAIHN0cnVjdCBvcHRlZV9zbWNfZGlzYWJsZV9zaG1fY2FjaGVfcmVzdWx0IHsKPiAg IAlPUFRFRV9TTUNfRkFTVF9DQUxMX1ZBTChPUFRFRV9TTUNfRlVOQ0lEX0VOQUJMRV9TSE1fQ0FD SEUpCj4gICAKPiAgIC8qCj4gKyAqIEluZm9ybSBPUC1URUUgYWJvdXQgYSBuZXcgdmlydHVhbCBt YWNoaW5lCj4gKyAqCj4gKyAqIEh5cGVydmlzb3IgaXNzdWVzIHRoaXMgY2FsbCBkdXJpbmcgdmly dHVhbCBtYWNoaW5lIChndWVzdCkgY3JlYXRpb24uCj4gKyAqIE9QLVRFRSByZWNvcmRzIFZNX0lE IG9mIG5ldyB2aXJ0dWFsIG1hY2hpbmUgYW5kIG1ha2VzIHNlbGYgcmVhZHkKPiArICogdG8gcmVj ZWl2ZSByZXF1ZXN0cyBmcm9tIGl0Lgo+ICsgKgo+ICsgKiBDYWxsIHJlcXVlc3RzIHVzYWdlOgo+ ICsgKiBhMAlTTUMgRnVuY3Rpb24gSUQsIE9QVEVFX1NNQ19WTV9DUkVBVEVECj4gKyAqIGExCVZN X0lEIG9mIG5ld2x5IGNyZWF0ZWQgdmlydHVhbCBtYWNoaW5lCj4gKyAqIGEyLTYgTm90IHVzZWQK PiArICogYTcJSHlwZXJ2aXNvciBDbGllbnQgSUQgcmVnaXN0ZXIuIE11c3QgYmUgMCwgYmVjYXVz ZSBvbmx5IGh5cGVydmlzb3IKPiArICogICAgICBjYW4gaXNzdWUgdGhpcyBjYWxsCj4gKyAqCj4g KyAqIE5vcm1hbCByZXR1cm4gcmVnaXN0ZXIgdXNhZ2U6Cj4gKyAqIGEwCU9QVEVFX1NNQ19SRVRV Uk5fT0sKPiArICogYTEtNwlQcmVzZXJ2ZWQKPiArICoKPiArICogRXJyb3IgcmV0dXJuOgo+ICsg KiBhMAlPUFRFRV9TTUNfUkVUVVJOX0VOT1RBVkFJTAlPUC1URUUgaGFzIG5vIHJlc291cmNlcyBm b3IKPiArICoJCQkJCWFub3RoZXIgVk0KPiArICogYTEtNwlQcmVzZXJ2ZWQKPiArICoKPiArICov Cj4gKyNkZWZpbmUgT1BURUVfU01DX0ZVTkNJRF9WTV9DUkVBVEVECTEzCj4gKyNkZWZpbmUgT1BU RUVfU01DX1ZNX0NSRUFURUQgXAo+ICsJT1BURUVfU01DX0ZBU1RfQ0FMTF9WQUwoT1BURUVfU01D X0ZVTkNJRF9WTV9DUkVBVEVEKQo+ICsKPiArLyoKPiArICogSW5mb3JtIE9QLVRFRSBhYm91dCBz aHV0ZG93biBvZiBhIHZpcnR1YWwgbWFjaGluZQo+ICsgKgo+ICsgKiBIeXBlcnZpc29yIGlzc3Vl cyB0aGlzIGNhbGwgZHVyaW5nIHZpcnR1YWwgbWFjaGluZSAoZ3Vlc3QpIGRlc3RydWN0aW9uLgo+ ICsgKiBPUC1URUUgd2lsbCBjbGVhbiB1cCBhbGwgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0 aGlzIFZNLgo+ICsgKgo+ICsgKiBDYWxsIHJlcXVlc3RzIHVzYWdlOgo+ICsgKiBhMAlTTUMgRnVu Y3Rpb24gSUQsIE9QVEVFX1NNQ19WTV9ERVNUUk9ZRUQKPiArICogYTEJVk1fSUQgb2YgdmlydHVh bCBtYWNoaW5lIGJlaW5nIHNodXR0ZWQgZG93bgo+ICsgKiBhMi02IE5vdCB1c2VkCj4gKyAqIGE3 CUh5cGVydmlzb3IgQ2xpZW50IElEIHJlZ2lzdGVyLiBNdXN0IGJlIDAsIGJlY2F1c2Ugb25seSBo eXBlcnZpc29yCj4gKyAqICAgICAgY2FuIGlzc3VlIHRoaXMgY2FsbAo+ICsgKgo+ICsgKiBOb3Jt YWwgcmV0dXJuIHJlZ2lzdGVyIHVzYWdlOgo+ICsgKiBhMAlPUFRFRV9TTUNfUkVUVVJOX09LCj4g KyAqIGExLTcJUHJlc2VydmVkCj4gKyAqCj4gKyAqLwo+ICsjZGVmaW5lIE9QVEVFX1NNQ19GVU5D SURfVk1fREVTVFJPWUVECTE0Cj4gKyNkZWZpbmUgT1BURUVfU01DX1ZNX0RFU1RST1lFRCBcCj4g KwlPUFRFRV9TTUNfRkFTVF9DQUxMX1ZBTChPUFRFRV9TTUNfRlVOQ0lEX1ZNX0RFU1RST1lFRCkK PiArCj4gKy8qCj4gICAgKiBSZXN1bWUgZnJvbSBSUEMgKGZvciBleGFtcGxlIGFmdGVyIHByb2Nl c3NpbmcgYSBmb3JlaWduIGludGVycnVwdCkKPiAgICAqCj4gICAgKiBDYWxsIHJlZ2lzdGVyIHVz YWdlOgo+IAoKQ2hlZXJzLAoKLS0gCkp1bGllbiBHcmFsbAoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2 ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWls bWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==