D-BUS SELinux support

Matthew Rickard mjricka@epoch.ncsc.mil
Fri, 20 Feb 2004 14:55:40 -0500


--=-OM0z31zYqd7GiJ2rww7t
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

I've implemented some basic SELinux access controls into the D-BUS
daemon to provide finer grained security on SELinux based systems. 
Currently access controls secure service acquisition and message sending
on the bus using a user space AVC.  Initial patch is attached, and also
posted at http://www.flux.utah.edu/~sds/dbus/.

The README file gives a basic overview of what the security enhancements
are doing.  Right now the code is still in a development stage.  There
is a lot of unnecessary overhead of context to sid switching, which I am
reworking currently.  I should have a new patch out early next week, but
for now I'd just like to get this out to hear any comments or
suggestions anyone might have.

--
Matthew Rickard
mjricka@epoch.ncsc.mil


--=-OM0z31zYqd7GiJ2rww7t
Content-Disposition: attachment; filename=se-dbus-0.2.diff
Content-Transfer-Encoding: base64
Content-Type: text/x-patch; name=se-dbus-0.2.diff; charset=

ZGlmZiAtdXJOIC0tZXhjbHVkZT1DVlMgZGJ1cy5vcmlnL2J1cy9idXMuYyBkYnVzL2J1cy9idXMu
Yw0KLS0tIGRidXMub3JpZy9idXMvYnVzLmMJMjAwNC0wMi0xOCAxMDoxNToyNS4wMDAwMDAwMDAg
LTA1MDANCisrKyBkYnVzL2J1cy9idXMuYwkyMDA0LTAyLTEwIDEzOjMxOjE0LjAwMDAwMDAwMCAt
MDUwMA0KQEAgLTI5LDYgKzI5LDkgQEANCiAjaW5jbHVkZSAicG9saWN5LmgiDQogI2luY2x1ZGUg
ImNvbmZpZy1wYXJzZXIuaCINCiAjaW5jbHVkZSAic2lnbmFscy5oIg0KKyNpZmRlZiBXSVRIX1NF
TElOVVgNCisjaW5jbHVkZSAic2VjdXJpdHkuaCINCisjZW5kaWYgLyogV0lUSF9TRUxJTlVYICov
DQogI2luY2x1ZGUgPGRidXMvZGJ1cy1saXN0Lmg+DQogI2luY2x1ZGUgPGRidXMvZGJ1cy1oYXNo
Lmg+DQogI2luY2x1ZGUgPGRidXMvZGJ1cy1pbnRlcm5hbHMuaD4NCkBAIC01MjEsNyArNTI0LDcg
QEANCiAgIA0KICAgY29udGV4dC0+cG9saWN5ID0gYnVzX2NvbmZpZ19wYXJzZXJfc3RlYWxfcG9s
aWN5IChwYXJzZXIpOw0KICAgX2RidXNfYXNzZXJ0IChjb250ZXh0LT5wb2xpY3kgIT0gTlVMTCk7
DQotICANCisNCiAgIC8qIE5vdyBiZWNvbWUgYSBkYWVtb24gaWYgYXBwcm9wcmlhdGUgKi8NCiAg
IGlmIChmb3JjZV9mb3JrIHx8IGJ1c19jb25maWdfcGFyc2VyX2dldF9mb3JrIChwYXJzZXIpKQ0K
ICAgICB7DQpAQCAtOTUwLDYgKzk1MywxOSBAQA0KICAgDQogICBpZiAoc2VuZGVyICE9IE5VTEwp
DQogICAgIHsNCisjaWZkZWYgV0lUSF9TRUxJTlVYDQorICAgICAgLyogRmlyc3QgdGhpbmcgd2Ug
ZG8gaXMgdmVyaWZ5IHRoZSBTRUxpbnV4IGFjY2VzcyBjb250cm9scy4NCisgICAgICAgKiBJZiBp
dCBwYXNzZXMgd2UnbGwgZ28gb24gdG8gdGhlIHJlc3Qgb2YgdGhlIHN0YW5kYXJkIGNoZWNrcy4N
CisgICAgICAgKi8NCisgICAgICBpZiAoIWJ1c19hdmNfY2hlY2tfY2FuX3NlbmRfc2VydmljZSAo
c2VuZGVyLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYnVz
X21lc3NhZ2VfZ2V0X2Rlc3RpbmF0aW9uIChtZXNzYWdlKSwNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVnaXN0cnkpKQ0KKyAgICAgICAgew0K
KyAgICAgICAgICBfZGJ1c192ZXJib3NlICgiU0VMaW51eCBzZWN1cml0eSBjaGVjayBkZW55aW5n
IHNlbmQgdG8gc2VydmljZVxuIik7DQorICAgICAgICAgIHJldHVybiBGQUxTRTsNCisgICAgICAg
IH0NCisjZW5kaWYgLyogV0lUSF9TRUxJTlVYICovDQorICAgICAgIA0KICAgICAgIGlmIChidXNf
Y29ubmVjdGlvbl9pc19hY3RpdmUgKHNlbmRlcikpDQogICAgICAgICB7DQogICAgICAgICAgIHNl
bmRlcl9wb2xpY3kgPSBidXNfY29ubmVjdGlvbl9nZXRfcG9saWN5IChzZW5kZXIpOw0KZGlmZiAt
dXJOIC0tZXhjbHVkZT1DVlMgZGJ1cy5vcmlnL2J1cy9tYWluLmMgZGJ1cy9idXMvbWFpbi5jDQot
LS0gZGJ1cy5vcmlnL2J1cy9tYWluLmMJMjAwNC0wMi0xOCAxMDoxNToyNS4wMDAwMDAwMDAgLTA1
MDANCisrKyBkYnVzL2J1cy9tYWluLmMJMjAwNC0wMi0xOCAxNToyMjozOC4wMDAwMDAwMDAgLTA1
MDANCkBAIC0yNyw2ICsyNyw5IEBADQogI2luY2x1ZGUgPHN0cmluZy5oPg0KICNpbmNsdWRlIDxz
aWduYWwuaD4NCiAjaW5jbHVkZSA8ZXJybm8uaD4NCisjaWZkZWYgV0lUSF9TRUxJTlVYDQorI2lu
Y2x1ZGUgInNlY3VyaXR5LmgiDQorI2VuZGlmIC8qIFdJVEhfU0VMSU5VWCAqLw0KIA0KIHN0YXRp
YyBCdXNDb250ZXh0ICpjb250ZXh0Ow0KIHN0YXRpYyBkYnVzX2Jvb2xfdCBnb3Rfc2lnaHVwID0g
RkFMU0U7DQpAQCAtMjgzLDYgKzI4NiwyOCBAQA0KICAgICAgICAgICBwcmludF9waWRfZmQgPSB2
YWw7DQogICAgICAgICB9DQogICAgIH0NCisNCisjaWZkZWYgV0lUSF9TRUxJTlVYDQorICAvKiBJ
bml0aWFsaXplIHVzZXIgc3BhY2UgQVZDIGZvciBELUJVUyBhbmQgc2V0IHVwDQorICAgKiBsb2dn
aW5nIGNhbGxiYWNrcy4NCisgICAqLw0KKyAgaWYgKFNFTElOVVhfRU5BQkxFRCkNCisgICAgew0K
KyAgICAgIHN0cnVjdCBhdmNfbG9nX2NhbGxiYWNrIGxvZ19jYjsNCisgICAgICBsb2dfY2IuZnVu
Y19sb2cgPSAodm9pZCopICZsb2dfY2FsbGJhY2s7DQorICAgICAgX2RidXNfdmVyYm9zZSAoIlNF
TGludXggaXMgZW5hYmxlZCBpbiB0aGlzIGtlcm5lbC5cbiIpOw0KKyAgICAgIGlmIChhdmNfaW5p
dCAoImF2YyIsIE5VTEwsICZsb2dfY2IsIE5VTEwpIDwgMCkNCisgICAgICAgIHsNCisgICAgICAg
ICAgX2RidXNfd2FybiAoIkZhaWxlZCB0byBzdGFydCBBY2Nlc3MgVmVjdG9yIENhY2hlIChBVkMp
XG4iKTsNCisgICAgICAgICAgZXhpdCAoMSk7DQorICAgICAgICB9DQorICAgICAgZWxzZQ0KKyAg
ICAgICAgX2RidXNfdmVyYm9zZSAoIkFjY2VzcyBWZWN0b3IgQ2FjaGUgKEFWQykgc3RhcnRlZC5c
biIpOw0KKyAgICB9DQorICBlbHNlDQorICAgIF9kYnVzX3ZlcmJvc2UgKCJTRUxpbnV4IG5vdCBl
bmFibGVkIGluIHRoaXMga2VybmVsLlxuIik7DQorDQorI2VuZGlmIC8qIFdJVEhfU0VMSU5VWCAq
Lw0KICAgDQogICBkYnVzX2Vycm9yX2luaXQgKCZlcnJvcik7DQogICBjb250ZXh0ID0gYnVzX2Nv
bnRleHRfbmV3ICgmY29uZmlnX2ZpbGUsIGZvcmNlX2ZvcmssDQpAQCAtMzAyLDcgKzMyNyw3IEBA
DQogICANCiAgIF9kYnVzX3ZlcmJvc2UgKCJXZSBhcmUgb24gRC1CdXMuLi5cbiIpOw0KICAgX2Ri
dXNfbG9vcF9ydW4gKGJ1c19jb250ZXh0X2dldF9sb29wIChjb250ZXh0KSk7DQotICANCisgDQog
ICBidXNfY29udGV4dF9zaHV0ZG93biAoY29udGV4dCk7DQogICBidXNfY29udGV4dF91bnJlZiAo
Y29udGV4dCk7DQogDQpkaWZmIC11ck4gLS1leGNsdWRlPUNWUyBkYnVzLm9yaWcvYnVzL01ha2Vm
aWxlLmFtIGRidXMvYnVzL01ha2VmaWxlLmFtDQotLS0gZGJ1cy5vcmlnL2J1cy9NYWtlZmlsZS5h
bQkyMDA0LTAyLTE4IDEwOjE1OjI1LjAwMDAwMDAwMCAtMDUwMA0KKysrIGRidXMvYnVzL01ha2Vm
aWxlLmFtCTIwMDQtMDItMTAgMTM6MzE6MTQuMDAwMDAwMDAwIC0wNTAwDQpAQCAtNCwxNyArNCwy
MSBAQA0KIElOQ0xVREVTPS1JJCh0b3Bfc3JjZGlyKSAkKERCVVNfQlVTX0NGTEFHUykJCQkJXA0K
IAktRERBRU1PTl9OQU1FPVwiZGJ1cy1kYWVtb24tMVwiICAtRERCVVNfQ09NUElMQVRJT04JCVwN
CiAJLUREQlVTX1NZU1RFTV9DT05GSUdfRklMRT1cIiIkKGNvbmZpZ2Rpcikvc3lzdGVtLmNvbmYi
XCIJXA0KLQktRERCVVNfU0VTU0lPTl9DT05GSUdfRklMRT1cIiIkKGNvbmZpZ2Rpcikvc2Vzc2lv
bi5jb25mIlwiDQorCS1EREJVU19TRVNTSU9OX0NPTkZJR19GSUxFPVwiIiQoY29uZmlnZGlyKS9z
ZXNzaW9uLmNvbmYiXCIJXA0KKwktRERCVVNfU0VQT0xJQ1lfQ09ORklHX0ZJTEU9XCIiJChjb25m
aWdkaXIpL3NlcG9saWN5LmNvbmYiXCINCisJDQogDQogRUZFTkNFPQ0KIA0KIENPTkZJR19JTl9G
SUxFUz0JCQkJXA0KIAlzZXNzaW9uLmNvbmYuaW4JCQkJXA0KLQlzeXN0ZW0uY29uZi5pbiANCisJ
c3lzdGVtLmNvbmYuaW4gCQkJCVwNCisJc2Vwb2xpY3kuY29uZi5pbg0KIA0KIGNvbmZpZ19EQVRB
PQkJCQkJXA0KIAlzZXNzaW9uLmNvbmYJCQkJXA0KLQlzeXN0ZW0uY29uZg0KKwlzeXN0ZW0uY29u
ZgkJCQlcDQorCXNlcG9saWN5LmNvbmYNCiANCiBiaW5fUFJPR1JBTVM9ZGJ1cy1kYWVtb24tMQ0K
IA0KQEAgLTQ0LDYgKzQ4LDggQEANCiAJZXhwaXJlbGlzdC5oCQkJCVwNCiAJcG9saWN5LmMJCQkJ
XA0KIAlwb2xpY3kuaAkJCQlcDQorCXNlY3VyaXR5LmgJCQkJXA0KKwlzZWN1cml0eS5jCQkJCVwN
CiAJc2VydmljZXMuYwkJCQlcDQogCXNlcnZpY2VzLmgJCQkJXA0KIAlzaWduYWxzLmMJCQkJXA0K
ZGlmZiAtdXJOIC0tZXhjbHVkZT1DVlMgZGJ1cy5vcmlnL2J1cy9zZWN1cml0eS5jIGRidXMvYnVz
L3NlY3VyaXR5LmMNCi0tLSBkYnVzLm9yaWcvYnVzL3NlY3VyaXR5LmMJMTk2OS0xMi0zMSAxOTow
MDowMC4wMDAwMDAwMDAgLTA1MDANCisrKyBkYnVzL2J1cy9zZWN1cml0eS5jCTIwMDQtMDItMTkg
MTM6MzI6MzguMTg4MTY1MjUzIC0wNTAwDQpAQCAtMCwwICsxLDQ4MyBAQA0KKy8qIHNlY3VyaXR5
LmMgIFNFTGludXggc2VjdXJpdHkgY2hlY2tzIGZvciBELUJVUw0KKyAqDQorICogQXV0aG9yOiBN
YXR0aGV3IFJpY2thcmQgPG1qcmlja2FAZXBvY2gubmNzYy5taWw+DQorICoNCisgKiBMaWNlbnNl
ZCB1bmRlciB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIHZlcnNpb24gMi4wDQorICogDQorICog
VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vciBtb2RpZnkNCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQorICogKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZQ0KKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
DQorICogDQorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UNCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRl
bXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0ENCisgKg0K
KyAqLw0KKyNpZmRlZiBXSVRIX1NFTElOVVgNCisjaW5jbHVkZSAic2VjdXJpdHkuaCINCisNCisv
KioNCisgKiBEZXRlcm1pbmUgaWYgdGhlIFNFTGludXggc2VjdXJpdHkgcG9saWN5IGFsbG93cyB0
aGUgbWVzc2FnZSB0byBiZQ0KKyAqIHNlbnQgYmFzZWQgb24gdGhlIGFwcGxpY2F0aW9uJ3Mgc2Vj
dXJpdHkgY29udGV4dC4gIFRoaXMgZnVuY3Rpb24NCisgKiBkZXRlcm1pbmVzIGlmIHRoZSByZXF1
ZXN0ZWQgcGVybWlzc2lvbnMgYXJlIHRvIGJlIGdyYW50ZWQgZnJvbSB0aGUNCisgKiBjb25uZWN0
aW9uIHRvIHRoZSBtZXNzYWdlIGJ1cyBvciB0byBhbm90aGVyIG9wdGlvbmFsbHkgc3VwcGxpZWQN
CisgKiBzZWN1cml0eSBjb250ZXh0IChlLmcuIGEgc2VydmljZSBjb250ZXh0KS4gIEN1cnJlbnRs
eSB0aGVzZSANCisgKiBwZXJtaXNzaW9ucyBhcmUgZWl0aGVyIHNlbmRfbXNnIG9yIGFjcXVpcmVf
c3ZjIGluIHRoZSBkYnVzDQorICogY2xhc3MuDQorICogRklYTUU6VGhpcyBjdXJyZW50bHkgb25s
eSB3b3JrcyB3aXRoIFVuaXggRG9tYWluIFNvY2tldHMuICBJdCBzaG91bGQNCisgKiAgICAgICBi
ZSBleHBhbmRlZCB0byBhdCBsZWFzdCBjaGVjayB0aGUgY29ubmVjdGlvbiB0eXBlIGFuZCBmYWls
DQorICogICAgICAgYXBwcm9wcmlhdGVseSBvbiB0aG9zZSBpdCBkb2VzIG5vdCB1bmRlcnN0YW5k
LiAgRXZlbnR1YWxseSBpdCANCisgKiAgICAgICBzaG91bGQgYmUgYWJsZSB0byB2YWxpZGF0ZSBv
dGhlciBjb25uZWN0aW9ucywgb3IgYXQgbGVhc3QgDQorICogICAgICAgcHJvdmlkZSBhIGRlZmF1
bHQgY29udGV4dC4NCisgKg0KKyAqIEBwYXJhbSBzZW5kZXIgdGhlIHNlbmRlciBvZiB0aGUgbWVz
c2FnZS4NCisgKiBAcGFyYW0gb3B0X3Rjb24gaXMgdGhlIHRhcmdldCBzZWN1cml0eSBjb250ZXh0
LiAgSWYgTlVMTCB0aGlzIHdpbGwNCisgKiAgICAgICAgdXNlIHRoZSBjb250ZXh0IG9mIHRoZSBi
dXMgaXRzZWxmIChlLmcuIHRoZSBkZWZhdWx0KS4NCisgKiBAcGFyYW0gdGNsYXNzIGlzIHRoZSB0
YXJnZXQgc2VjdXJpdHkgY2xhc3MuDQorICogQHBhcmFtIHJlcXVlc3RlZCBpcyB0aGUgcmVxdWVz
dGVkIHBlcm1pc3Npb25zLg0KKyAqIEByZXR1cm5zICNUUlVFIGlmIHNlY3VyaXR5IHBvbGljeSBh
bGxvd3MgdGhlIHNlbmQuDQorICovDQorZGJ1c19ib29sX3QNCitidXNfY29ubmVjdGlvbl9hdmNf
aGFzX3Blcm0gKERCdXNDb25uZWN0aW9uICAgICAgICAgICAqY29ubmVjdGlvbiwNCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlY3VyaXR5X2NvbnRleHRfdCAqb3B0X3Rjb24s
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cml0eV9jbGFzc190ICAgICAgICAg
IHRjbGFzcywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc192ZWN0b3JfdCAg
ICAgICAgICAgcmVxdWVzdGVkKQ0KK3sNCisgIHNlY3VyaXR5X2NvbnRleHRfdCBzY29uLCB0Y29u
Ow0KKyAgc2VjdXJpdHlfaWRfdCBzc2lkLCB0c2lkOw0KKyAgc3RydWN0IGF2Y19lbnRyeV9yZWYg
aDsNCisgIGRidXNfYm9vbF90IHJldHZhbCA9IFRSVUU7DQorICBkYnVzX2Jvb2xfdCBmcmVlX3Rj
b24gPSBUUlVFOw0KKw0KKyAgaWYgKCFTRUxJTlVYX0VOQUJMRUQpDQorICAgIHJldHVybiBUUlVF
Ow0KKw0KKyAgLyogR2V0IGNvbnRleHQgb2YgY29ubmVjdGlvbiBwZWVyICovDQorICBpZiAoIWJ1
c19nZXRfY29ubmVjdGlvbl9jb250ZXh0IChjb25uZWN0aW9uLCAmc2NvbikpDQorICAgIHsNCisg
ICAgICBfZGJ1c193YXJuICgiRXJyb3IgZ2V0dGluZyBjb250ZXh0IG9mIHNvY2tldCBwZWVyLiAg
RGVueWluZy5cbiIpOw0KKyAgICAgIHJldHVybiBGQUxTRTsNCisgICAgfQ0KKyAgaWYgKGF2Y19j
b250ZXh0X3RvX3NpZCAoc2NvbiwgJnNzaWQpIDwgMCkNCisgICAgew0KKyAgICAgIF9kYnVzX3dh
cm4gKCJFcnJvciBnZXR0aW5nIFNJRCBmcm9tIGNvbnRleHQuICBEZW55aW5nLlxuIik7DQorICAg
ICAgZnJlZWNvbiAoc2Nvbik7DQorICAgICAgcmV0dXJuIEZBTFNFOw0KKyAgICB9DQorDQorICAv
KiBJZiBhbiBvcHRpb25hbCB0YXJnZXQgY29udGV4dCBoYXMgbm90IGJlZW4gcGFzc2VkIGluLCB1
c2UgdGhlIGJ1cw0KKyAgICogY29udGV4dCBhcyB0aGUgdGFyZ2V0IGNvbnRleHQuICBJZiBvbmUg
aGFzIGJlZW4gcGFzc2VkIGluIChzdWNoDQorICAgKiBhcyBhIHNlcnZpY2UgY29udGV4dCksIHdl
J2xsIHVzZSB0aGF0IGluc3RlYWQuDQorICAgKi8NCisgIGlmIChvcHRfdGNvbiA9PSBOVUxMKQ0K
KyAgICB7DQorICAgICAgaWYgKGdldGNvbiAoJnRjb24pIDwgMCkNCisgICAgICB7DQorICAgICAg
ICBfZGJ1c193YXJuICgiRXJyb3IgZ2V0dGluZyBjb250ZXh0IG9mIGJ1cy4gIERlbnlpbmcuXG4i
KTsNCisgICAgICAgIHJldHVybiBGQUxTRTsNCisgICAgICB9DQorICAgIH0NCisgIGVsc2UNCisg
ICB7DQorICAgICB0Y29uID0gKm9wdF90Y29uOw0KKyAgICAgZnJlZV90Y29uID0gRkFMU0U7IC8q
IERvbid0IGZyZWUgY29udGV4dHMgdGhhdCBoYXZlIGJlZW4gcGFzc2VkDQorCQkJICogaW4gYnkg
dGhlIGNhbGxlci4NCisJCQkgKi8NCisgICB9DQorICAgICANCisNCisgIGlmIChhdmNfY29udGV4
dF90b19zaWQgKHRjb24sICZ0c2lkKSA8IDApDQorICAgIHsNCisgICAgICBfZGJ1c193YXJuICgi
RXJyb3IgZ2V0dGluZyBTSUQgZnJvbSBidXMgY29udGV4dC4gIERlbnlpbmcuXG4iKTsNCisgICAg
ICBpZiAoZnJlZV90Y29uKQ0KKyAgICAgICAgZnJlZWNvbiAodGNvbik7DQorICAgICAgZnJlZWNv
biAoc2Nvbik7DQorICAgICAgc2lkcHV0IChzc2lkKTsNCisgICAgICByZXR1cm4gRkFMU0U7DQor
ICAgIH0NCisNCisgIGF2Y19lbnRyeV9yZWZfaW5pdCAoJmgpOyAvKiBJbml0aWFsaXplIHRoZSBB
VkMgZW50cnkgcmVmZXJlbmNlICovDQorDQorICAvKiBNYWtlIHRoZSBzZWN1cml0eSBjaGVjay4g
IFRoZSBBVkMgY2hlY2tzIGVuZm9yY2luZyBtb2RlIGhlcmUgYXMgd2VsbC4gKi8NCisgIGlmIChh
dmNfaGFzX3Blcm0gKHNzaWQsIHRzaWQsIHRjbGFzcywgcmVxdWVzdGVkLCAmaCwgTlVMTCkgPCAw
KQ0KKyAgICB7DQorICAgICAgLyogTm8gcGVybWlzc2lvbiwgZGVueSBpdC4gKi8NCisgICAgICBf
ZGJ1c192ZXJib3NlICgiU0VMaW51eCBkZW55aW5nIGR1ZSB0byBzZWN1cml0eSBwb2xpY3kuXG4i
KTsNCisgICAgICByZXR2YWwgPSBGQUxTRTsNCisgICAgfQ0KKw0KKyAgLyogQ2xlYW4gdXAgYW5k
IHJldHVybiB0aGUgZGVjaXNpb24gKi8NCisgIGZyZWVjb24gKHNjb24pOw0KKyAgc2lkcHV0IChz
c2lkKTsNCisgIGlmIChmcmVlX3Rjb24pDQorICAgIGZyZWVjb24gKHRjb24pOw0KKyAgc2lkcHV0
ICh0c2lkKTsNCisgIHJldHVybiByZXR2YWw7DQorfQ0KKw0KKw0KKy8qKg0KKyAqIENoZWNrIGlm
IFNFTGludXggc2VjdXJpdHkgY29udHJvbHMgYWxsb3cgdGhlIG1lc3NhZ2UgdG8gYmUgc2VudCB0
byBhDQorICogcGFydGljdWxhciBzZXJ2aWNlIGJhc2VkIG9uIHRoZSBzZWN1cml0eSBjb250ZXh0
IG9mIHRoZSBzZW5kZXIgYW5kDQorICogdGhhdCBvZiB0aGUgc2VydmljZS4NCisgKg0KKyAqIEBw
YXJhbSBzZW5kZXIgdGhlIHNlbmRlciBvZiB0aGUgbWVzc2FnZS4NCisgKiBAcGFyYW0gc2Vydmlj
ZV9uYW1lIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIHRoZSBtZXNzYWdlIGlzIHRvIGJlIHNlbnQg
dG8uDQorICogQHJlZ2lzdHJ5IHRoZSByZWdpc3RyeSB3aGVyZSB3ZSBjYW4gbG9vayB1cCB0aGUg
c2VydmljZSBuYW1lLg0KKyAqLw0KK2RidXNfYm9vbF90DQorYnVzX2F2Y19jaGVja19jYW5fc2Vu
ZF9zZXJ2aWNlIChEQnVzQ29ubmVjdGlvbiAqc2VuZGVyLA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAgICAgKnNlcnZpY2VfbmFtZSwNCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEJ1c1JlZ2lzdHJ5ICAgICpyZWdpc3RyeSkNCit7DQorICBzdHJ1
Y3QgQnVzU2VydmljZSAqc2VydmljZTsNCisgIHNlY3VyaXR5X2NvbnRleHRfdCBzZXJ2aWNlX2Nv
bjsNCisgIHN0cnVjdCBEQnVzU3RyaW5nIHN0cjsNCisgIGRidXNfYm9vbF90IHJldHZhbDsNCisN
CisgIGlmICghU0VMSU5VWF9FTkFCTEVEKQ0KKyAgICByZXR1cm4gVFJVRTsNCisNCisgIF9kYnVz
X3N0cmluZ19pbml0X2NvbnN0ICgmc3RyLCBzZXJ2aWNlX25hbWUpOw0KKyAgc2VydmljZSA9IGJ1
c19yZWdpc3RyeV9sb29rdXAgKHJlZ2lzdHJ5LCAmc3RyKTsgLyogRmluZCB0aGUgc2VydmljZSBz
dHJ1Y3R1cmUgKi8NCisNCisgIC8qIE1ha2Ugc3VyZSBzZXJ2aWNlIGFuZCBpdHMgY29udGV4dCBh
cmUgdmFsaWQuICBJZiB0aGV5IGFyZSB1bm93bmVkIG9yIHRoZSBzZXJ2aWNlDQorICAgKiBoYXMg
bm8gY29udGV4dCAoZGVmYXVsdCBzZXJ2aWNlPykgdXNlIHRoZSBjb250ZXh0IG9mIHRoZSBidXMg
ZGFlbW9uLiANCisgICAqLw0KKyAgaWYgKChzZXJ2aWNlID09IE5VTEwpIHx8IChidXNfc2Vydmlj
ZV9nZXRfY29udGV4dCAoc2VydmljZSkgPT0gTlVMTCkpDQorICAgIHsNCisgICAgICBfZGJ1c192
ZXJib3NlICgiU2VydmljZSAlcyBpcyBvd25lZCBieSB0aGUgYnVzIGl0c2VsZiwgb3IgZG9lcyBu
b3QgZXhpc3QuXG4iLA0KKyAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlX25hbWUpOw0KKyAg
ICAgIHJldHZhbCA9IGJ1c19jb25uZWN0aW9uX2F2Y19oYXNfcGVybSAoc2VuZGVyLCBOVUxMLCAN
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFQ0NMQVNTX0RC
VVMsIERCVVNfX1NFTkRfTVNHKTsNCisgICAgfQ0KKyAgZWxzZQ0KKyAgICB7DQorICAgICAgLyog
R2V0IHRoZSBjb250ZXh0IG9mIHRoZSBzZXJ2aWNlICovDQorICAgICAgc2VydmljZV9jb24gPSBi
dXNfc2VydmljZV9nZXRfY29udGV4dCAoc2VydmljZSk7DQorICAgICAgLyogTWFrZSB0aGUgc2Vj
dXJpdHkgY2hlY2sgKi8NCisgICAgICByZXR2YWwgPSBidXNfY29ubmVjdGlvbl9hdmNfaGFzX3Bl
cm0gKHNlbmRlciwgJnNlcnZpY2VfY29uLCANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNFQ0NMQVNTX0RCVVMsIERCVVNfX1NFTkRfTVNHKTsNCisgICAgICBm
cmVlY29uIChzZXJ2aWNlX2Nvbik7DQorICAgIH0NCisgIHJldHVybiByZXR2YWw7DQorfQ0KKw0K
Kw0KKy8qKg0KKyAqIFN0b3JlcyB0aGUgc2VjdXJpdHkgY29udGV4dCBvZiBhIHNlcnZpY2UuICBB
IHNlcnZpY2UncyBjb250ZXh0IGlzDQorICogZXF1YWwgdG8gdGhhdCBvZiB0aGUgc2VydmljZSdz
IHByaW1hcnkgb3duZXIuDQorICoNCisgKiBAcGFyYW0gc2VydmljZSB0aGUgc2VydmljZSB3aG9z
ZSBjb250ZXh0IHdlIGFyZSBzdG9yaW5nLg0KKyAqIEBwYXJhbSBvd25lciB0aGUgb3duZXIgb2Yg
dGhhdCBzZXJ2aWNlLg0KKyAqIEByZXR1cm5zICNUUlVFIGlmIHRoZSBjb250ZXh0IGlzIHN1Y2Nl
c3NmdWxseSBzdG9yZWQNCisgKi8NCitkYnVzX2Jvb2xfdA0KK2J1c19hdmNfc3RvcmVfc2Vydmlj
ZV9jb250ZXh0IChCdXNTZXJ2aWNlICAgICAqc2VydmljZSwNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgREJ1c0Nvbm5lY3Rpb24gKm93bmVyKQ0KK3sNCisgIHNlY3VyaXR5X2NvbnRl
eHRfdCBjb247DQorDQorICBpZiAoIVNFTElOVVhfRU5BQkxFRCkNCisgICAgcmV0dXJuIFRSVUU7
DQorDQorICBfZGJ1c192ZXJib3NlICgiU3RvcmluZyBzZXJ2aWNlIHNlY3VyaXR5IGNvbnRleHQu
XG4iKTsNCisNCisgIGlmICghYnVzX2dldF9jb25uZWN0aW9uX2NvbnRleHQgKG93bmVyLCAmY29u
KSkNCisgICAgew0KKyAgICAgIF9kYnVzX3dhcm4gKCJFcnJvciBnZXR0aW5nIHBlZXIgY29udGV4
dC5cbiIpOw0KKyAgICAgIHJldHVybiBGQUxTRTsNCisgICAgfQ0KKw0KKyAgYnVzX3NlcnZpY2Vf
c2V0X2NvbnRleHQgKHNlcnZpY2UsICZjb24pOw0KKyAgcmV0dXJuIFRSVUU7DQorfSANCisNCisN
CisvKioNCisgKiBHZXRzIHRoZSBzZWN1cml0eSBjb250ZXh0IG9mIGEgY29ubmVjdGlvbiB0byB0
aGUgYnVzLiBJdCBpcyB1cCB0bw0KKyAqIHRoZSBjYWxsZXIgdG8gZnJlZWNvbigpIHdoZW4gdGhl
eSBhcmUgZG9uZS4gDQorICoNCisgKiBAcGFyYW0gY29ubmVjdGlvbiB0aGUgY29ubmVjdGlvbiB0
byBnZXQgdGhlIGNvbnRleHQgb2YuDQorICogQHBhcmFtIGNvbiB0aGUgbG9jYXRpb24gdG8gc3Rv
cmUgdGhlIHNlY3VyaXR5IGNvbnRleHQuDQorICogQHJldHVybnMgI1RSVUUgaWYgY29udGV4dCBp
cyBzdWNjZXNzZnVsbHkgb2J0YWluZWQuDQorICovDQorZGJ1c19ib29sX3QNCitidXNfZ2V0X2Nv
bm5lY3Rpb25fY29udGV4dCAoREJ1c0Nvbm5lY3Rpb24gICAgICpjb25uZWN0aW9uLA0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWN1cml0eV9jb250ZXh0X3QgKmNvbikNCit7DQorICBp
bnQgZmQ7DQorDQorICBpZiAoY29ubmVjdGlvbiA9PSBOVUxMKQ0KKyAgICB7DQorICAgICAgX2Ri
dXNfd2FybiAoIlBhc3NlZCBpbiBOVUxMIERCdXNDb25uZWN0aW9uLlxuIik7DQorICAgICAgcmV0
dXJuIEZBTFNFOw0KKyAgICB9DQorICBpZiAoZGJ1c19jb25uZWN0aW9uX2dldF91bml4X2ZkIChj
b25uZWN0aW9uLCAmZmQpIDwgMCkNCisgICAgew0KKyAgICAgIF9kYnVzX3dhcm4gKCJFcnJvciBn
ZXR0aW5nIGZpbGUgZGVzY3JpcHRvciBvZiBzb2NrZXQuXG4iKTsNCisgICAgICByZXR1cm4gRkFM
U0U7DQorICAgIH0NCisgIGlmIChnZXRwZWVyY29uIChmZCwgY29uKSA8IDApDQorICAgIHsNCisg
ICAgICBfZGJ1c193YXJuICgiRXJyb3IgZ2V0dGluZyBjb250ZXh0IG9mIHNvY2tldCBwZWVyLlxu
Iik7DQorICAgICAgcmV0dXJuIEZBTFNFOw0KKyAgICB9DQorICBfZGJ1c192ZXJib3NlICgiU3Vj
Y2Vzc2Z1bGx5IGdvdCBjb25uZWN0aW9uIGNvbnRleHQuXG4iKTsNCisgIHJldHVybiBUUlVFOw0K
K30NCisNCisNCisvKioNCisgKiBSZWFkcyB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHNwZWNpZnlp
bmcgc2VydmljZSBjb250ZXh0cyBhbmQgcGFyc2VzDQorICogaXQgaW50byBtZW1vcnkgdXNhYmxl
IGJ5IEQtQlVTLg0KKyAqDQorICogQHBhcmFtIGZpbGVuYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBz
ZWN1cml0eSBjb25maWd1cmF0aW9uIGZpbGUuDQorICogQHBhcmFtIHNlcnZpY2VfdGFibGUgaXMg
dGhlIGhhc2ggdGFibGUgdG8gYnVpbGQgb2YgU2VydmljZVNlY3VyaXR5Q29udGV4dCdzLg0KKyAq
IEByZXR1cm5zIGEgcG9pbnRlciB0byBhIGxpc3Qgb2YgU2VydmljZVNlY3VyaXR5Q29udGV4dCdz
Lg0KKyAqDQorICogRklYTUU6IFVnbHkgcGFyc2luZyBjb2RlLg0KKyAqLw0KK2RidXNfYm9vbF90
DQorZGJ1c19zZWN1cml0eV9wYXJzZSAoY29uc3QgY2hhciAgICAqZmlsZW5hbWUsDQorICAgICAg
ICAgICAgICAgICAgICAgREJ1c0hhc2hUYWJsZSAqc2VydmljZV90YWJsZSkNCit7DQorICBEQnVz
U3RyaW5nIGZpbGUsIGNvbnRlbnRzOw0KKyAgREJ1c0Vycm9yIGVycm9yOw0KKyAgZGJ1c19ib29s
X3QgcmV0dmFsID0gRkFMU0U7DQorDQorICBkYnVzX2Vycm9yX2luaXQgKCZlcnJvcik7DQorICBf
ZGJ1c19zdHJpbmdfaW5pdCAoJmNvbnRlbnRzKTsNCisgIF9kYnVzX3N0cmluZ19pbml0X2NvbnN0
ICgmZmlsZSwgZmlsZW5hbWUpOw0KKw0KKyAgX2RidXNfdmVyYm9zZSAoIlBhcnNpbmcgY29uZmln
dXJhdGlvbiBmaWxlICVzXG4iLCBmaWxlbmFtZSk7DQorDQorICAvKiBCdWlsZCBhIHN0cmluZyBv
ZiB0aGUgY29udGV4dCBmaWxlJ3MgY29udGVudHMgKi8NCisgIGlmICghX2RidXNfZmlsZV9nZXRf
Y29udGVudHMgKCZjb250ZW50cywgJmZpbGUsICZlcnJvcikpDQorICAgIHsNCisgICAgICBfZGJ1
c193YXJuICgiRmFpbGVkIHRvIGdldCBmaWxlIGNvbnRlbnRzLlxuIik7DQorICAgICAgX2RidXNf
d2FybiAoIkVycm9yOiAlcywgTmFtZTogJXNcbiIsIGVycm9yLm1lc3NhZ2UsIGVycm9yLm5hbWUp
Ow0KKyAgICAgIGdvdG8gb3V0Ow0KKyAgICB9DQorDQorICBEQnVzTGlzdCAqbGlzdCA9IE5VTEw7
DQorICANCisgIGludCBpID0gMDsNCisgIHdoaWxlIChpIDwgX2RidXNfc3RyaW5nX2dldF9sZW5n
dGggKCZjb250ZW50cykpDQorICB7DQorICAgIHVuc2lnbmVkIGNoYXIgYnl0ZTsNCisgICAgaW50
IGZvdW5kID0gMDsNCisgICAgREJ1c1N0cmluZyAqdG1wOw0KKyAgICB0bXAgPSBkYnVzX25ldzAg
KERCdXNTdHJpbmcsIDEpOyAvKiBOZXcgc3RyaW5nIGZvciBlYWNoICovDQorICAgIGlmICh0bXAg
PT0gTlVMTCkNCisgICAgICB7DQorICAgICAgICByZXR2YWwgPSBGQUxTRTsNCisgICAgICAgIGdv
dG8gb3V0Ow0KKyAgICAgIH0NCisgICAgX2RidXNfc3RyaW5nX2luaXQgKHRtcCk7DQorDQorICAg
IGJ5dGUgPSBfZGJ1c19zdHJpbmdfZ2V0X2J5dGUgKCZjb250ZW50cywgaSk7DQorICAgIGlmIChi
eXRlID09ICcjJykgLyogQ29tbWVudHMgc3RhcnQgd2l0aCAjIGFuZCBnbyB0byBlbmQgb2YgbGlu
ZSAqLw0KKyAgICAgIHsNCisgICAgICAgIF9kYnVzX3ZlcmJvc2UgKCJTa2lwcGluZyBjb21tZW50
OlxuICAiKTsNCisgICAgICAgIHdoaWxlIChieXRlICE9ICdcbicgJiYgaSA8IF9kYnVzX3N0cmlu
Z19nZXRfbGVuZ3RoKCZjb250ZW50cykpDQorCSAgew0KKyAgICAgICAgICAgIGkrKzsNCisgICAg
ICAgICAgICBieXRlID0gX2RidXNfc3RyaW5nX2dldF9ieXRlICgmY29udGVudHMsIGkpOw0KKyAg
ICAgICAgICAgIF9kYnVzX3ZlcmJvc2UgKCIlYyIsIGJ5dGUpOw0KKyAgICAgICAgICB9DQorICAg
ICAgICBpKys7DQorICAgICAgICBieXRlID0gX2RidXNfc3RyaW5nX2dldF9ieXRlICgmY29udGVu
dHMsIGkpOw0KKyAgICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKHRtcCk7DQorICAgICAgICBkYnVz
X2ZyZWUgKHRtcCk7DQorICAgICAgICBjb250aW51ZTsNCisgICAgICB9DQorICAgIC8qIFJlYWQg
dXAgdW50aWwgd2hpdGVzcGFjZSBvciBjb21tZW50IHRvIGJ1aWxkIHN0cmluZyAqLw0KKyAgICB3
aGlsZSAoIChieXRlICE9ICdcbicgJiYgYnl0ZSAhPSAnICcgJiYgYnl0ZSAhPSAnXHQnICYmIGJ5
dGUgIT0gJyMnKSAmJg0KKyAgICAgICAgICAgIChpIDwgX2RidXNfc3RyaW5nX2dldF9sZW5ndGgg
KCZjb250ZW50cykpICkNCisgICAgICB7DQorICAgICAgICBpKys7DQorICAgICAgICBmb3VuZCA9
IDE7DQorICAgICAgICBpZiAoIV9kYnVzX3N0cmluZ19hcHBlbmRfYnl0ZSAodG1wLCBieXRlKSkN
CisgICAgICAgICAgew0KKyAgICAgICAgICAgIGRidXNfZnJlZSAodG1wKTsNCisgICAgICAgICAg
ICByZXR2YWwgPSBGQUxTRTsNCisgICAgICAgICAgICBnb3RvIG91dDsNCisgICAgICAgICAgfQkg
ICAgDQorICAgICAgICBieXRlID0gX2RidXNfc3RyaW5nX2dldF9ieXRlICgmY29udGVudHMsIGkp
Ow0KKyAgICAgIH0JDQorICAgIGlmIChmb3VuZCkNCisgICAgICB7DQorICAgICAgICAvKiBCdWls
ZCBhIGxpc3Qgb2YgYWxsIHRoZSBzdHJpbmdzICovDQorICAgICAgICBpZiAoIV9kYnVzX2xpc3Rf
YXBwZW5kICgmbGlzdCwgdG1wKSkNCisgICAgICAgICAgew0KKyAgICAgICAgICAgIC8qIE5PVEU6
IFRoZSBsaXN0IGlzIG5ldmVyIGZyZWVkIGhlcmUuICBCdXQgaWYgdGhpcyBwYXJzZSBmYWlscw0K
KyAgICAgICAgICAgICAqIGR1ZSB0byBPT00gdGhlIHByb2dyYW0gYWJvcnRzIGFueXdheSwgc28g
aXQgZG9lc24ndCBtYXR0ZXIgbXVjaC4NCisgICAgICAgICAgICAgKiBUaGlzIGlzIHRoZSBjYXNl
IGZvciB0aGUgcmVzdCBvZiB0aGUgT09NIGNoZWNrcyBpbiB0aGlzIGZ1bmN0aW9uLg0KKyAgICAg
ICAgICAgICAqLw0KKyAgICAgICAgICAgIGRidXNfZnJlZSAodG1wKTsNCisgICAgICAgICAgICBy
ZXR2YWwgPSBGQUxTRTsNCisgICAgICAgICAgICBnb3RvIG91dDsNCisgICAgICAgICAgfQ0KKyAg
ICAgIH0NCisgICAgZWxzZQ0KKyAgICAgIHsNCisgICAgICAgIC8qIEZyZWUgd2hpdGVzcGFjZSAq
Lw0KKyAgICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKHRtcCk7DQorICAgICAgICBkYnVzX2ZyZWUg
KHRtcCk7DQorICAgICAgfQ0KKyAgICAvKiBJZiB3ZSBmb3VuZCBhIGNvbW1lbnQgZG9uJ3QgaW5j
cmVtZW50IHNvIHdlIGNhbiBza2lwIHRvIEVPTCANCisgICAgICogbmV4dCBsb29wIHRocm91Z2gu
DQorICAgICAqLw0KKyAgICBpZiAoYnl0ZSAhPSAnIycpDQorICAgICAgaSsrOw0KKyAgfQ0KKw0K
KyAgLyogU3RhcnQgYnVpbGRpbmcgaGFzaCB0YWJsZSBub3cgKi8NCisgIERCdXNTdHJpbmcgKnN2
Y19uYW1lLCAqc3ZjX2NvbjsgDQorICBpbnQgaiwgbGVuZ3RoOw0KKyAgbGVuZ3RoID0gX2RidXNf
bGlzdF9nZXRfbGVuZ3RoICgmbGlzdCk7DQorICAvKiBQb3Agc3RyaW5ncyBvZmYgdGhlIGxpc3Qg
MiBhdCBhIHRpbWUgKG5hbWUvY29udGV4dCkgKi8NCisgIGZvciAoaiA9IDA7IGogPCBsZW5ndGg7
IGogKz0gMikNCisgICAgew0KKyAgICAgIHN2Y19uYW1lID0gX2RidXNfbGlzdF9wb3BfZmlyc3Qg
KCZsaXN0KTsgDQorICAgICAgc3ZjX2NvbiA9IF9kYnVzX2xpc3RfcG9wX2ZpcnN0ICgmbGlzdCk7
IA0KKw0KKyAgICAgIC8qIFdlIHdhbnQgdG8gc3RvcmUgc2VjdXJpdHkgY29udGV4dHMsIG5vdCBz
dHJpbmdzICovDQorICAgICAgc2VjdXJpdHlfY29udGV4dF90ICpjb247DQorICAgICAgY29uID0g
ZGJ1c19uZXcwIChzZWN1cml0eV9jb250ZXh0X3QsIDEpOw0KKyAgICAgIGlmIChjb24gPT0gTlVM
TCkNCisgICAgICAgIHsNCisgICAgICAgICAgcmV0dmFsID0gRkFMU0U7DQorICAgICAgICAgIGdv
dG8gb3V0Ow0KKyAgICAgICAgfQ0KKyAgICAgIGlmICghX2RidXNfc3RyaW5nX2NvcHlfZGF0YSAo
c3ZjX2NvbiwgY29uKSkNCisgICAgICAgIHsNCisgICAgICAgICAgcmV0dmFsID0gRkFMU0U7DQor
ICAgICAgICAgIGdvdG8gb3V0Ow0KKyAgICAgICAgfQ0KKyAgICAgIC8qIFRoaXMgd2lsbCBiZWNv
bWUgdGhlIGhhc2ggdGFibGUga2V5ICovDQorICAgICAgY2hhciAqa2V5Ow0KKyAgICAgIF9kYnVz
X3N0cmluZ19jb3B5X2RhdGEgKHN2Y19uYW1lLCAma2V5KTsNCisNCisgICAgICAvKiBIYXNoIHRo
ZXNlIGNvbnRleHRzIHdpdGggdGhlaXIgc2VydmljZSBuYW1lcyBmb3IgbGF0ZXIgbG9va3VwICov
DQorICAgICAgX2RidXNfdmVyYm9zZSAoIlNlcnZpY2UgbmFtZTogJXMgICAgIiwga2V5KTsNCisg
ICAgICBfZGJ1c192ZXJib3NlICgiU2VydmljZSBjb250ZXh0OiAlc1xuIiwgKmNvbik7DQorICAg
ICAgaWYgKCFfZGJ1c19oYXNoX3RhYmxlX2luc2VydF9zdHJpbmcgKHNlcnZpY2VfdGFibGUsDQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSwNCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uKSkNCisgICAgICAgIHsNCisg
ICAgICAgICAgcmV0dmFsID0gRkFMU0U7DQorICAgICAgICAgIGdvdG8gb3V0Ow0KKyAgICAgICAg
fQ0KKyAgICAgIA0KKyAgICAgIC8qIERvbid0IG5lZWQgdGhlc2Ugc3RyaW5ncyBhbnltb3JlICov
DQorICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKHN2Y19jb24pOw0KKyAgICAgIGRidXNfZnJlZSAo
c3ZjX2Nvbik7DQorICAgICAgX2RidXNfc3RyaW5nX2ZyZWUgKHN2Y19uYW1lKTsNCisgICAgICBk
YnVzX2ZyZWUgKHN2Y19uYW1lKTsNCisgICAgIA0KKyAgICB9DQorICBfZGJ1c19saXN0X2NsZWFy
ICgmbGlzdCk7DQorDQorICByZXR2YWwgPSBUUlVFOw0KKw0KK291dDoNCisgIF9kYnVzX3N0cmlu
Z19mcmVlKCZmaWxlKTsNCisgIF9kYnVzX3N0cmluZ19mcmVlKCZjb250ZW50cyk7DQorICBkYnVz
X2Vycm9yX2ZyZWUoJmVycm9yKTsNCisgIHJldHVybiByZXR2YWw7DQorfQ0KKw0KKw0KKy8qKg0K
KyAqIEZpbmQgdGhlIHNlY3VyaXR5IGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxh
cg0KKyAqIHNlcnZpY2UgbmFtZS4gIFJldHVybiBhIHBvaW50ZXIgdG8gdGhpcyBjb250ZXh0LCBv
ciANCisgKiBOVUxMIGlmIHRoZSBzZXJ2aWNlIGlzIG5vdCBmb3VuZCBpbiB0aGUgaGFzaCB0YWJs
ZS4NCisgKiBUaGlzIHNob3VsZCBiZSBuZWFybHkgYSBjb25zdGFudCB0aW1lIG9wZXJhdGlvbi4g
IFRoaXMgDQorICogd29ya3Mgb24gYSBsb25nZXN0IG1hdGNoIG1ldGhvZC4gIEUuZy4gaWYgd2Ug
YXJlIGxvb2tpbmcNCisgKiB1cCBvcmcuZnJlZWRlc2t0b3AuREJ1cy5QaW5nLCBidXQgdGhhdCBp
cyBub3QgZGVmaW5lZCBpbg0KKyAqIHRoZSBjb25maWd1cmF0aW9uIGZpbGUsIHdlIHdpbGwgdGhl
biBjaGVjayANCisgKiBvcmcuZnJlZWRlc2t0b3AuREJ1cywgYW5kIHNvIG9uIHVudGlsIHdlIGVp
dGhlciBmaW5kIGEgDQorICogbWF0Y2ggb3IgZW5kIHVwIGF0IHRoZSByb290LCB3aGVyZSB3ZSBh
c3NpZ24gYSBkZWZhdWx0DQorICogY29udGV4dC4NCisgKiBOT1RFOiBDYWxsZXIgc2hvdWxkbid0
IHRyeSB0byBmcmVlIHRoaXMgY29udGV4dC4NCisgKg0KKyAqIEZJWE1FOiBSYXRoZXIgdGhhbiBy
ZXR1cm5pbmcgZGVmYXVsdCBjb250ZXh0IG9uIE9PTSwgd2Ugc2hvdWxkDQorICogICAgICAgIHBy
b2JhYmx5IHdhaXQgZm9yIG1lbW9yeSB0byBiZSBmcmVlZCBpbnN0ZWFkLiAgUmV0dXJuaW5nDQor
ICogICAgICAgIHRoZSBkZWZhdWx0IGNvbnRleHQgY291bGQgYWxsb3cgdW53YW50ZWQgcGVybWlz
c2lvbnMuDQorICoNCisgKiBAcGFyYW0gc2VydmljZV90YWJsZSB0aGUgaGFzaCB0YWJsZSB0byBj
aGVjayBmb3Igc2VydmljZSBuYW1lLg0KKyAqIEBwYXJhbSBzZXJ2aWNlX25hbWUgdGhlIG5hbWUg
b2YgdGhlIHNlcnZpY2UgdG8gbG9vayBmb3IuDQorICogQHJldHVybnMgcHRyLiB0byB0aGUgY29u
dGV4dCBvZiB0aGUgc2VydmljZSBvciBOVUxMIGlmIG5vdCBmb3VuZC4NCisgKi8NCitjb25zdCBz
ZWN1cml0eV9jb250ZXh0X3QgKg0KK3NlcnZpY2VfY29udGV4dF9sb29rdXAgKERCdXNIYXNoVGFi
bGUgICAgKnNlcnZpY2VfdGFibGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgREJ1
c1N0cmluZyAqc2VydmljZV9uYW1lKQ0KK3sNCisgIHNlY3VyaXR5X2NvbnRleHRfdCAqY29uID0g
TlVMTDsNCisgIGludCBpLCBsZW5ndGg7DQorICBEQnVzU3RyaW5nIHRtcF9zdHI7DQorICBpZiAo
IV9kYnVzX3N0cmluZ19pbml0ICgmdG1wX3N0cikpDQorICAgIHJldHVybiBjb247IC8qIE9PTTog
ZGVmYXVsdCBjb250ZXh0ICovDQorDQorICBpZiAoIV9kYnVzX3N0cmluZ19jb3B5IChzZXJ2aWNl
X25hbWUsIDAsICZ0bXBfc3RyLCAwKSkNCisgIHsNCisgICAgX2RidXNfc3RyaW5nX2ZyZWUgKCZ0
bXBfc3RyKTsNCisgICAgcmV0dXJuIGNvbjsgLyogT09NOiBkZWZhdWx0IGNvbnRleHQgKi8NCisg
IH0NCisgIA0KKyAgd2hpbGUgKGNvbiA9PSBOVUxMKQ0KKyAgew0KKyAgICBjb24gPSBfZGJ1c19o
YXNoX3RhYmxlX2xvb2t1cF9zdHJpbmcgKHNlcnZpY2VfdGFibGUsDQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RidXNfc3RyaW5nX2dldF9jb25zdF9kYXRhIChz
ZXJ2aWNlX25hbWUpKTsNCisgICAgaWYgKGNvbiA9PSBOVUxMKQ0KKyAgICB7IA0KKyAgICAgIC8q
IEhhY2sgb2ZmIHRoZSBsYXN0IHBhcnQgb2YgdGhlIHNlcnZpY2VfbmFtZSBhbmQgdHJ5IGFnYWlu
ICovDQorICAgICAgLyogSWYgbm90aGluZyBsZWZ0IHRvIGhhY2sgb2ZmIGl0IGdldHMgYSBkZWZh
dWx0IGNvbnRleHQgKi8NCisgICAgICBsZW5ndGggPSBfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAo
JnRtcF9zdHIpOw0KKyAgICAgIGlmIChfZGJ1c19zdHJpbmdfZmluZF9ieXRlX2JhY2t3YXJkICgm
dG1wX3N0ciwgbGVuZ3RoLCAnLicsICZpKSkNCisgICAgICB7DQorICAgICAgICBfZGJ1c19zdHJp
bmdfc2hvcnRlbiAoJnRtcF9zdHIsIChsZW5ndGggLSBpKSk7DQorICAgICAgICBjb24gPSBfZGJ1
c19oYXNoX3RhYmxlX2xvb2t1cF9zdHJpbmcgKHNlcnZpY2VfdGFibGUsDQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kYnVzX3N0cmluZ19nZXRfY29uc3Rf
ZGF0YSAoJnRtcF9zdHIpKTsNCisgICAgICB9DQorICAgICAgZWxzZQ0KKwlicmVhazsNCisgICAg
fQ0KKyAgfQ0KKw0KKyAgaWYgKGNvbiA9PSBOVUxMKQ0KKyAgICBfZGJ1c192ZXJib3NlICgiU2Vy
dmljZSAlcyBub3QgZm91bmRcbiIsIF9kYnVzX3N0cmluZ19nZXRfY29uc3RfZGF0YSAoc2Vydmlj
ZV9uYW1lKSk7DQorICBlbHNlDQorICB7DQorICAgIF9kYnVzX3ZlcmJvc2UgKCJTZXJ2aWNlICVz
IGZvdW5kXG4iLCBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKHNlcnZpY2VfbmFtZSkpOw0K
KyAgfQ0KKw0KKyAgX2RidXNfc3RyaW5nX2ZyZWUgKCZ0bXBfc3RyKTsNCisNCisgIHJldHVybiBj
b247DQorfQ0KKw0KKw0KKy8qKg0KKyAqIExvZyBjYWxsYmFjayB0byBsb2cgZGVuaWFsIG1lc3Nh
Z2VzIGZyb20gdGhlIEFWQy4NCisgKiBUaGlzIGlzIHVzZWQgaW4gYXZjX2luaXQuICBMb2dzIHRv
IGJvdGggc3RhbmRhcmQNCisgKiBlcnJvciBhbmQgc3lzbG9nZC4NCisgKg0KKyAqIEBwYXJhbSBm
bXQgdGhlIHN0cmluZyB0byBsb2cuDQorICovDQordm9pZCANCitsb2dfY2FsbGJhY2sgKGNvbnN0
IGNoYXIgKmZtdCkNCit7DQorICBvcGVubG9nICgiZGJ1cyIsIExPR19QRVJST1IsIExPR19VU0VS
KTsNCisgIHN5c2xvZyAoTE9HX0lORk8sIGZtdCk7DQorfQ0KKw0KKyNlbmRpZiAvKiBXSVRIX1NF
TElOVVggKi8NCmRpZmYgLXVyTiAtLWV4Y2x1ZGU9Q1ZTIGRidXMub3JpZy9idXMvc2VjdXJpdHku
aCBkYnVzL2J1cy9zZWN1cml0eS5oDQotLS0gZGJ1cy5vcmlnL2J1cy9zZWN1cml0eS5oCTE5Njkt
MTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwDQorKysgZGJ1cy9idXMvc2VjdXJpdHkuaAky
MDA0LTAyLTE5IDEzOjMyOjQxLjEzNTcxOTE3MyAtMDUwMA0KQEAgLTAsMCArMSw2OCBAQA0KKy8q
IHNlY3VyaXR5LmggIFNFTGludXggc2VjdXJpdHkgY2hlY2sgaGVhZGVycyBmb3IgRC1CVVMNCisg
Kg0KKyAqIEF1dGhvcjogTWF0dGhldyBSaWNrYXJkIDxtanJpY2thQGVwb2NoLm5jc2MubWlsPg0K
KyAqDQorICogTGljZW5zZWQgdW5kZXIgdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSB2ZXJzaW9u
IDIuMA0KKyAqIA0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
cg0KKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorICoNCisgKiBUaGlz
IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwNCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZg0KKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLg0KKyAqIA0KKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorICogYWxvbmcgd2l0aCB0aGlz
IHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCisgKiBGb3VuZGF0
aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEt
MTMwNyAgVVNBDQorICoNCisgKi8NCisNCisjaWZuZGVmIEJVU19TRUNVUklUWV9IDQorI2RlZmlu
ZSBCVVNfU0VDVVJJVFlfSA0KKw0KKyNpbmNsdWRlICJidXMuaCINCisjaW5jbHVkZSAic2Vydmlj
ZXMuaCINCisjaW5jbHVkZSA8ZGJ1cy9kYnVzLWludGVybmFscy5oPg0KKyNpbmNsdWRlIDxkYnVz
L2RidXMtY29ubmVjdGlvbi5oPg0KKyNpbmNsdWRlIDxkYnVzL2RidXMtaGFzaC5oPg0KKyNpbmNs
dWRlIDxzZWxpbnV4L3NlbGludXguaD4NCisjaW5jbHVkZSA8c2VsaW51eC9hdmMuaD4NCisjaW5j
bHVkZSA8c2VsaW51eC9hdl9wZXJtaXNzaW9ucy5oPg0KKyNpbmNsdWRlIDxzZWxpbnV4L2ZsYXNr
Lmg+DQorI2luY2x1ZGUgPHN5c2xvZy5oPg0KKyNkZWZpbmUgU0VMSU5VWF9FTkFCTEVEIGlzX3Nl
bGludXhfZW5hYmxlZCgpDQorDQorZGJ1c19ib29sX3QNCitidXNfYXZjX3N0b3JlX3NlcnZpY2Vf
Y29udGV4dCAoQnVzU2VydmljZSAgICAgKnNlcnZpY2UsDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIERCdXNDb25uZWN0aW9uICpvd25lcik7DQorDQorZGJ1c19ib29sX3QNCitidXNf
Z2V0X2Nvbm5lY3Rpb25fY29udGV4dCAoREJ1c0Nvbm5lY3Rpb24gICAgICpjb25uZWN0aW9uLA0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cml0eV9jb250ZXh0X3QgKmNvbik7DQor
DQorZGJ1c19ib29sX3QNCitidXNfYXZjX2NoZWNrX2Nhbl9zZW5kX3NlcnZpY2UgKERCdXNDb25u
ZWN0aW9uICpzZW5kZXIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICAgICAqc2VydmljZV9uYW1lLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QnVzUmVnaXN0cnkgICAgKnJlZ2lzdHJ5KTsNCisNCitkYnVzX2Jvb2xfdA0KK2J1c19jb25uZWN0
aW9uX2F2Y19oYXNfcGVybSAoREJ1c0Nvbm5lY3Rpb24gICAgICAgICAgICpjb25uZWN0aW9uLA0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VjdXJpdHlfY29udGV4dF90ICpv
cHRfdGNvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyaXR5X2NsYXNzX3Qg
ICAgICAgICAgdGNsYXNzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzX3Zl
Y3Rvcl90ICAgICAgICAgICByZXF1ZXN0ZWQpOw0KKw0KK2RidXNfYm9vbF90DQorZGJ1c19zZWN1
cml0eV9wYXJzZSAoY29uc3QgY2hhciAgICAgKmZpbGVuYW1lLA0KKyAgICAgICAgICAgICAgICAg
ICAgIERCdXNIYXNoVGFibGUgICpzZXJ2aWNlX3RhYmxlKTsNCisNCitjb25zdCBzZWN1cml0eV9j
b250ZXh0X3QgKg0KK3NlcnZpY2VfY29udGV4dF9sb29rdXAgKERCdXNIYXNoVGFibGUgICAgKnNl
cnZpY2VfdGFibGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgREJ1c1N0cmluZyAq
c2VydmljZV9uYW1lKTsNCisNCit2b2lkIA0KK2xvZ19jYWxsYmFjayAoY29uc3QgY2hhciAqZm10
KTsNCisNCisjZW5kaWYgLyogQlVTX1NFQ1VSSVRZX0ggKi8NCmRpZmYgLXVyTiAtLWV4Y2x1ZGU9
Q1ZTIGRidXMub3JpZy9idXMvc2Vwb2xpY3kuY29uZi5pbiBkYnVzL2J1cy9zZXBvbGljeS5jb25m
LmluDQotLS0gZGJ1cy5vcmlnL2J1cy9zZXBvbGljeS5jb25mLmluCTE5NjktMTItMzEgMTk6MDA6
MDAuMDAwMDAwMDAwIC0wNTAwDQorKysgZGJ1cy9idXMvc2Vwb2xpY3kuY29uZi5pbgkyMDA0LTAy
LTE3IDEwOjEwOjM0LjAwMDAwMDAwMCAtMDUwMA0KQEAgLTAsMCArMSw4IEBADQorIyBELUJVUyBT
RUxpbnV4IHNlcnZpY2Ugc2VjdXJpdHkgY29udGV4dCBjb25maWd1cmF0aW9uIGZpbGUuDQorIyBG
aWxlIGZvcm1hdCBpczogIDxzZXJ2aWNlIG5hbWU+IDx3aGl0ZXNwYWNlPiA8c2VydmljZSBjb250
ZXh0Pg0KKyMgU2VydmljZXMgYXJlIGxhYmVsbGVkIGJ5IGxvbmdlc3QgbWF0Y2guDQorIyBFLmcu
IG9yZy5mcmVlZGVza3RvcC5EQnVzLlBpbmcgd291bGQgYmUgbGFiZWxsZWQgd2l0aCB0aGUgc2Ft
ZQ0KKyMgICAgICBjb250ZXh0IGFzIG9yZy5mcmVlZGVza3RvcC5EQnVzIGluIHRoaXMgZXhhbXBs
ZSBwb2xpY3kuDQorY29tLnJlZGhhdC5QcmludGVyU3Bvb2xlci5RdWV1ZUNoYW5nZWQJCXN5c3Rl
bV91OnNlcnZpY2VfcjpjdXBzZF90DQorb3JnLmZyZWVkZXNrdG9wLkRCdXMJCQkJc3lzdGVtX3U6
c2VydmljZV9yOmRidXNkX3QNCitvcmcuZnJlZWRlc2t0b3AuREJ1cy5UZXN0U3VpdGVFY2hvU2Vy
dmljZQlzeXN0ZW1fdTpzZXJ2aWNlX3I6ZGJ1c3Rlc3RfdA0KZGlmZiAtdXJOIC0tZXhjbHVkZT1D
VlMgZGJ1cy5vcmlnL2J1cy9zZXJ2aWNlcy5jIGRidXMvYnVzL3NlcnZpY2VzLmMNCi0tLSBkYnVz
Lm9yaWcvYnVzL3NlcnZpY2VzLmMJMjAwNC0wMi0xOCAxMDoxNToyNS4wMDAwMDAwMDAgLTA1MDAN
CisrKyBkYnVzL2J1cy9zZXJ2aWNlcy5jCTIwMDQtMDItMTcgMTM6MjM6MTUuMDAwMDAwMDAwIC0w
NTAwDQpAQCAtMzEsNiArMzEsOSBAQA0KICNpbmNsdWRlICJ1dGlscy5oIg0KICNpbmNsdWRlICJh
Y3RpdmF0aW9uLmgiDQogI2luY2x1ZGUgInBvbGljeS5oIg0KKyNpZmRlZiBXSVRIX1NFTElOVVgN
CisjaW5jbHVkZSAic2VjdXJpdHkuaCINCisjZW5kaWYgLyogV0lUSF9TRUxJTlVYICovDQogDQog
c3RydWN0IEJ1c1NlcnZpY2UNCiB7DQpAQCAtMzksNiArNDIsMTAgQEANCiAgIEJ1c1JlZ2lzdHJ5
ICpyZWdpc3RyeTsNCiAgIGNoYXIgKm5hbWU7DQogICBEQnVzTGlzdCAqb3duZXJzOw0KKyNpZmRl
ZiBXSVRIX1NFTElOVVggIA0KKyAgLyogT3duZWQgc2VydmljZXMgbmVlZCBhbiBhc3NvY2lhdGVk
IHNlY3VyaXR5IGNvbnRleHQgKi8NCisgIHNlY3VyaXR5X2NvbnRleHRfdCBjb247DQorI2VuZGlm
IC8qIFdJVEhfU0VMSU5VWCAqLw0KICAgDQogICB1bnNpZ25lZCBpbnQgcHJvaGliaXRfcmVwbGFj
ZW1lbnQgOiAxOw0KIH07DQpAQCAtNTEsOCArNTgsMzkgQEANCiAgIA0KICAgREJ1c0hhc2hUYWJs
ZSAqc2VydmljZV9oYXNoOw0KICAgREJ1c01lbVBvb2wgICAqc2VydmljZV9wb29sOw0KKyNpZmRl
ZiBXSVRIX1NFTElOVVgNCisgIERCdXNIYXNoVGFibGUgKnNlcnZpY2VfY29udGV4dF90YWJsZTsN
CisjZW5kaWYgLyogV0lUSF9TRUxJTlVYICovDQogfTsNCiANCisjaWZkZWYgV0lUSF9TRUxJTlVY
DQorLyogRnVuY3Rpb24gZm9yIGZyZWVpbmcgaGFzaCB0YWJsZSBrZXkgKi8NCitzdGF0aWMgdm9p
ZA0KK3RhYmxlX2ZyZWVfc2VydmljZV9uYW1lIChjaGFyICprZXkpDQorew0KKyAgaWYgKCFrZXkp
DQorICAgIHJldHVybjsNCisNCisgIGRidXNfZnJlZSAoa2V5KTsNCit9DQorDQorLyogRnVuY3Rp
b24gZm9yIGZyZWVpbmcgaGFzaCB0YWJsZSBkYXRhICovDQorc3RhdGljIHZvaWQNCit0YWJsZV9m
cmVlX3NlcnZpY2VfY29udGV4dCAoc2VjdXJpdHlfY29udGV4dF90ICpjb24pDQorew0KKyAgaWYg
KCFjb24pDQorICAgIHJldHVybjsNCisNCisgIC8qIE5PVEU6IFRoZXNlIGNvbnRleHRzIHdlcmUg
YWxsb2NhdGVkIHdpdGggZGJ1c19uZXcwLA0KKyAgICogc28gdGhleSBuZWVkIHRvIGJlIGZyZWVk
IHdpdGggZGJ1c19mcmVlIHJhdGhlciB0aGFuDQorICAgKiB3aXRoIGZyZWVjb24gb3IgZWxzZSB0
aGUgdGVzdHMgd2lsbCAoYXBwcm9wcmlhdGVseSkNCisgICAqIHRoaW5rIHRoZXJlIGlzIGEgbWVt
b3J5IGxlYWsuDQorICAgKi8NCisgIGRidXNfZnJlZSAoKmNvbik7DQorICBkYnVzX2ZyZWUgKGNv
bik7DQorfQ0KKyNlbmRpZiAvKiBXSVRIX1NFTElOVVggKi8NCisNCiBCdXNSZWdpc3RyeSoNCiBi
dXNfcmVnaXN0cnlfbmV3IChCdXNDb250ZXh0ICpjb250ZXh0KQ0KIHsNCkBAIC03NSw2ICsxMTMs
MjAgQEANCiAgIGlmIChyZWdpc3RyeS0+c2VydmljZV9wb29sID09IE5VTEwpDQogICAgIGdvdG8g
ZmFpbGVkOw0KIA0KKyNpZmRlZiBXSVRIX1NFTElOVVgNCisgIC8qIFBhcnNlIHRoZSBTRUxpbnV4
IHNlcnZpY2Ugc2VjdXJpdHkgcG9saWN5ICovDQorICBfZGJ1c193YXJuICgiaW5pdCBjb250ZXh0
IGhhc2ggdGFibGVcbiIpOw0KKyAgcmVnaXN0cnktPnNlcnZpY2VfY29udGV4dF90YWJsZSA9IF9k
YnVzX2hhc2hfdGFibGVfbmV3IChEQlVTX0hBU0hfU1RSSU5HLA0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoREJ1c0ZyZWVGdW5jdGlv
bil0YWJsZV9mcmVlX3NlcnZpY2VfbmFtZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERCdXNGcmVlRnVuY3Rpb24pdGFibGVfZnJl
ZV9zZXJ2aWNlX2NvbnRleHQpOw0KKyAgaWYgKCFkYnVzX3NlY3VyaXR5X3BhcnNlIChEQlVTX1NF
UE9MSUNZX0NPTkZJR19GSUxFLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3Ry
eS0+c2VydmljZV9jb250ZXh0X3RhYmxlKSkNCisgICAgew0KKyAgICAgIF9kYnVzX3dhcm4gKCJG
YWlsZWQgdG8gcGFyc2Ugc2VjdXJpdHkgY29udGV4dHMuXG4iKTsNCisgICAgICBnb3RvIGZhaWxl
ZDsNCisgICAgfQ0KKyNlbmRpZiAvKiBXSVRIX1NFTElOVVggKi8NCisNCiAgIHJldHVybiByZWdp
c3RyeTsNCiANCiAgZmFpbGVkOg0KQEAgLTEwMyw2ICsxNTUsMTAgQEANCiAgICAgICAgIF9kYnVz
X2hhc2hfdGFibGVfdW5yZWYgKHJlZ2lzdHJ5LT5zZXJ2aWNlX2hhc2gpOw0KICAgICAgIGlmIChy
ZWdpc3RyeS0+c2VydmljZV9wb29sKQ0KICAgICAgICAgX2RidXNfbWVtX3Bvb2xfZnJlZSAocmVn
aXN0cnktPnNlcnZpY2VfcG9vbCk7DQorI2lmZGVmIFdJVEhfU0VMSU5VWA0KKyAgICAgIF9kYnVz
X2hhc2hfdGFibGVfdW5yZWYgKHJlZ2lzdHJ5LT5zZXJ2aWNlX2NvbnRleHRfdGFibGUpOw0KKyAg
ICAgIHJlZ2lzdHJ5LT5zZXJ2aWNlX2NvbnRleHRfdGFibGUgPSBOVUxMOw0KKyNlbmRpZiAvKiBX
SVRIX1NFTElOVVggKi8NCiANCiAgICAgICBkYnVzX2ZyZWUgKHJlZ2lzdHJ5KTsNCiAgICAgfQ0K
QEAgLTI2Miw2ICszMTgsMTAgQEANCiAgIERCdXNDb25uZWN0aW9uICpjdXJyZW50X293bmVyOw0K
ICAgQnVzQ2xpZW50UG9saWN5ICpwb2xpY3k7DQogICBCdXNTZXJ2aWNlICpzZXJ2aWNlOw0KKyNp
ZmRlZiBXSVRIX1NFTElOVVgNCisgIC8qIFRvIHRlc3QgdmFsaWRpdHkgb2Ygc2VydmljZSBsYXRl
ciAqLw0KKyAgc2VydmljZSA9IE5VTEw7DQorI2VuZGlmIC8qIFdJVEhfU0VMSU5VWCAqLw0KICAg
DQogICByZXR2YWwgPSBGQUxTRTsNCiANCkBAIC0yOTEsNyArMzUxLDIzIEBADQogICBwb2xpY3kg
PSBidXNfY29ubmVjdGlvbl9nZXRfcG9saWN5IChjb25uZWN0aW9uKTsNCiAgIF9kYnVzX2Fzc2Vy
dCAocG9saWN5ICE9IE5VTEwpOw0KIA0KLSAgaWYgKCFidXNfY2xpZW50X3BvbGljeV9jaGVja19j
YW5fb3duIChwb2xpY3ksIGNvbm5lY3Rpb24sDQorI2lmZGVmIFdJVEhfU0VMSU5VWA0KKyAgZGJ1
c19ib29sX3QgYWxsb3dlZCA9IFRSVUU7DQorICBjb25zdCBzZWN1cml0eV9jb250ZXh0X3QgKmNv
bjsNCisgIC8qIExvb2t1cCBpZiB3ZSBoYXZlIGEgcHJlZGVmaW5lZCBzZXJ2aWNlIGNvbnRleHQg
aW4gdGhlIGNvbmZpZyBmaWxlLg0KKyAgICogSWYgd2UgZG8sIHVzZSB0aGF0IGNvbnRleHQgdG8g
bWFrZSB0aGUgY2hlY2suICBJZiBub3QsIGNvbiBpcyBOVUxMIGFuZA0KKyAgICogdGhlIGNvbnRl
eHQgb2YgdGhlIGJ1cyB3aWxsIGJlIHVzZWQgYXMgdGhlIHRhcmdldCBjb250ZXh0IGZvciB0aGUg
YWNxdWlyZQ0KKyAgICogc2VydmljZSBjaGVjay4NCisgICAqLw0KKyAgY29uID0gc2VydmljZV9j
b250ZXh0X2xvb2t1cCAocmVnaXN0cnktPnNlcnZpY2VfY29udGV4dF90YWJsZSwgc2VydmljZV9u
YW1lKTsNCisgIGlmICghYnVzX2Nvbm5lY3Rpb25fYXZjX2hhc19wZXJtKGNvbm5lY3Rpb24sIGNv
biwgU0VDQ0xBU1NfREJVUywgREJVU19fQUNRVUlSRV9TVkMpKQ0KKyAgICBhbGxvd2VkID0gRkFM
U0U7DQorI2VuZGlmIC8qIFdJVEhfU0VMSU5VWCAqLw0KKyAgaWYgKA0KKyNpZmRlZiBXSVRIX1NF
TElOVVgNCisgICAgICBhbGxvd2VkICYmDQorI2VuZGlmIC8qIFdJVEhfU0VMSU5VWCAqLw0KKyAg
ICAgICFidXNfY2xpZW50X3BvbGljeV9jaGVja19jYW5fb3duIChwb2xpY3ksIGNvbm5lY3Rpb24s
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VfbmFtZSkp
DQogICAgIHsNCiAgICAgICBkYnVzX3NldF9lcnJvciAoZXJyb3IsIERCVVNfRVJST1JfQUNDRVNT
X0RFTklFRCwNCkBAIC0zNzYsOCArNDUyLDIxIEBADQogICAgIH0NCiANCiAgIHJldHZhbCA9IFRS
VUU7DQorI2lmZGVmIFdJVEhfU0VMSU5VWA0KKyAgLyogV2hlbiBzZXJ2aWNlIGhhcyBiZWVuIHN1
Y2Nlc3NmdWxseSBhY3F1aXJlZCwgd2UgbmVlZCB0byBzdG9yZSB0aGUgc2VjdXJpdHkNCisgICAq
IGNvbnRleHQgb2YgdGhhdCBzZXJ2aWNlLg0KKyAgICovDQorICBidXNfYXZjX3N0b3JlX3NlcnZp
Y2VfY29udGV4dChzZXJ2aWNlLCBjdXJyZW50X293bmVyKTsNCisjZW5kaWYgLyogV0lUSF9TRUxJ
TlVYICovDQogICANCiAgb3V0Og0KKyNpZmRlZiBXSVRIX1NFTElOVVgNCisgIC8qIElmIHdlIGZh
aWwgaGVyZSBmb3Igc29tZSByZWFzb24sIHdlIG5lZWQgdG8gc2V0IHRoZSBjb250ZXh0IHRvIE5V
TEwgc28gdGhhdA0KKyAgICogd2UgZG9uJ3QgdHJ5IHRvIGFjY2VzcyBpdCBsYXRlci4NCisgICAq
Lw0KKyAgaWYgKHNlcnZpY2UgIT0gTlVMTCkNCisgICAgYnVzX3NlcnZpY2Vfc2V0X2NvbnRleHQg
KHNlcnZpY2UsIE5VTEwpOw0KKyNlbmRpZiAvKiBXSVRIX1NFTElOVVggKi8NCiAgIHJldHVybiBy
ZXR2YWw7DQogfQ0KIA0KQEAgLTczNyw2ICs4MjYsOSBAQA0KICAgICAgIF9kYnVzX2Fzc2VydCAo
c2VydmljZS0+b3duZXJzID09IE5VTEwpOw0KICAgICAgIA0KICAgICAgIGRidXNfZnJlZSAoc2Vy
dmljZS0+bmFtZSk7DQorI2lmZGVmIFdJVEhfU0VMSU5VWA0KKyAgICAgIGZyZWVjb24gKHNlcnZp
Y2UtPmNvbik7DQorI2VuZGlmIC8qIFdJVEhfU0VMSU5VWCAqLw0KICAgICAgIF9kYnVzX21lbV9w
b29sX2RlYWxsb2MgKHNlcnZpY2UtPnJlZ2lzdHJ5LT5zZXJ2aWNlX3Bvb2wsIHNlcnZpY2UpOw0K
ICAgICB9DQogfQ0KQEAgLTc4NCwzICs4NzYsMjggQEANCiANCiAgIHJldHVybiBGQUxTRTsNCiB9
DQorDQorI2lmZGVmIFdJVEhfU0VMSU5VWA0KKy8qIEdldCB0aGUgc2VjdXJpdHkgY29udGV4dCBv
ZiB0aGUgc2VydmljZS4gIFRoaXMgYXNzdW1lcyBvbmUgaGFzDQorICogYWxyZWFkeSBiZWVuIGFz
c2lnbmVkLg0KKyAqLw0KK3NlY3VyaXR5X2NvbnRleHRfdA0KK2J1c19zZXJ2aWNlX2dldF9jb250
ZXh0IChCdXNTZXJ2aWNlICpzZXJ2aWNlKQ0KK3sNCisgIHJldHVybiBzZXJ2aWNlLT5jb247DQor
fQ0KKw0KKy8qIFNldCB0aGUgc2VjdXJpdHkgY29udGV4dCBvZiBhIHNlcnZpY2UuICovDQordm9p
ZA0KK2J1c19zZXJ2aWNlX3NldF9jb250ZXh0IChCdXNTZXJ2aWNlICpzZXJ2aWNlLA0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWN1cml0eV9jb250ZXh0X3QgKmNvbikNCit7DQorICBpZiAo
Y29uID09IE5VTEwpDQorICAgIHNlcnZpY2UtPmNvbiA9IE5VTEw7DQorICBlbHNlDQorICAgIHNl
cnZpY2UtPmNvbiA9ICpjb247DQorfQ0KKw0KKw0KKyNlbmRpZiAvKiBXSVRIX1NFTElOVVggKi8N
CisNCmRpZmYgLXVyTiAtLWV4Y2x1ZGU9Q1ZTIGRidXMub3JpZy9idXMvc2VydmljZXMuaCBkYnVz
L2J1cy9zZXJ2aWNlcy5oDQotLS0gZGJ1cy5vcmlnL2J1cy9zZXJ2aWNlcy5oCTIwMDQtMDItMTgg
MTA6MTU6MjUuMDAwMDAwMDAwIC0wNTAwDQorKysgZGJ1cy9idXMvc2VydmljZXMuaAkyMDA0LTAy
LTEwIDEzOjMxOjE0LjAwMDAwMDAwMCAtMDUwMA0KQEAgLTI4LDYgKzI4LDkgQEANCiAjaW5jbHVk
ZSA8ZGJ1cy9kYnVzLXN0cmluZy5oPg0KICNpbmNsdWRlICJjb25uZWN0aW9uLmgiDQogI2luY2x1
ZGUgImJ1cy5oIg0KKyNpZmRlZiBXSVRIX1NFTElOVVgNCisjaW5jbHVkZSA8c2VsaW51eC9zZWxp
bnV4Lmg+DQorI2VuZGlmIC8qIFdJVEhfU0VMSU5VWCAqLw0KIA0KIHR5cGVkZWYgdm9pZCAoKiBC
dXNTZXJ2aWNlRm9yZWFjaEZ1bmN0aW9uKSAoQnVzU2VydmljZSAgICAgICAqc2VydmljZSwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgICAg
ICAgKmRhdGEpOw0KQEAgLTczLDYgKzc2LDExIEBADQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJ1c19ib29sX3QgICAgIHByb2hpYml0X3Jl
cGxhY2VtZW50KTsNCiBkYnVzX2Jvb2xfdCAgICAgYnVzX3NlcnZpY2VfZ2V0X3Byb2hpYml0X3Jl
cGxhY2VtZW50IChCdXNTZXJ2aWNlICAgICAqc2VydmljZSk7DQogY29uc3QgY2hhciogICAgIGJ1
c19zZXJ2aWNlX2dldF9uYW1lICAgICAgICAgICAgICAgICAoQnVzU2VydmljZSAgICAgKnNlcnZp
Y2UpOw0KKyNpZmRlZiBXSVRIX1NFTElOVVgNCitzZWN1cml0eV9jb250ZXh0X3QgICBidXNfc2Vy
dmljZV9nZXRfY29udGV4dAkgICAgIChCdXNTZXJ2aWNlICAgICAqc2VydmljZSk7DQordm9pZAkg
ICAgICAgICAgICAgYnVzX3NlcnZpY2Vfc2V0X2NvbnRleHQgICAgICAgICAoQnVzU2VydmljZSAg
ICAgKnNlcnZpY2UsDQorCQkJCQkJICAgICAgc2VjdXJpdHlfY29udGV4dF90ICpjb24pOw0KKyNl
bmRpZiAvKiBXSVRIX1NFTElOVVggKi8NCiANCiANCiAjZW5kaWYgLyogQlVTX1NFUlZJQ0VTX0gg
Ki8NCmRpZmYgLXVyTiAtLWV4Y2x1ZGU9Q1ZTIGRidXMub3JpZy9idXMvc3lzdGVtLmNvbmYuaW4g
ZGJ1cy9idXMvc3lzdGVtLmNvbmYuaW4NCi0tLSBkYnVzLm9yaWcvYnVzL3N5c3RlbS5jb25mLmlu
CTIwMDQtMDItMTggMTA6MTU6MjUuMDAwMDAwMDAwIC0wNTAwDQorKysgZGJ1cy9idXMvc3lzdGVt
LmNvbmYuaW4JMjAwNC0wMi0xMCAxMzozMToxNC4wMDAwMDAwMDAgLTA1MDANCkBAIC0xNSw3ICsx
NSw3IEBADQogICA8dHlwZT5zeXN0ZW08L3R5cGU+DQogDQogICA8IS0tIFJ1biBhcyBzcGVjaWFs
IHVzZXIgLS0+DQotICA8dXNlcj5tZXNzYWdlYnVzPC91c2VyPg0KKyAgPHVzZXI+ZGJ1czwvdXNl
cj4NCiANCiAgIDwhLS0gRm9yayBpbnRvIGRhZW1vbiBtb2RlIC0tPg0KICAgPGZvcmsvPg0KZGlm
ZiAtdXJOIC0tZXhjbHVkZT1DVlMgZGJ1cy5vcmlnL2J1cy90ZXN0LW1haW4uYyBkYnVzL2J1cy90
ZXN0LW1haW4uYw0KLS0tIGRidXMub3JpZy9idXMvdGVzdC1tYWluLmMJMjAwNC0wMi0xOCAxMDox
NToyNS4wMDAwMDAwMDAgLTA1MDANCisrKyBkYnVzL2J1cy90ZXN0LW1haW4uYwkyMDA0LTAyLTE4
IDE1OjIyOjQ1LjAwMDAwMDAwMCAtMDUwMA0KQEAgLTI3LDYgKzI3LDkgQEANCiAjaW5jbHVkZSA8
ZGJ1cy9kYnVzLXN0cmluZy5oPg0KICNpbmNsdWRlIDxkYnVzL2RidXMtc3lzZGVwcy5oPg0KICNp
bmNsdWRlIDxkYnVzL2RidXMtaW50ZXJuYWxzLmg+DQorI2lmZGVmIFdJVEhfU0VMSU5VWA0KKyNp
bmNsdWRlICJzZWN1cml0eS5oIg0KKyNlbmRpZiAvKiBXSVRIX1NFTElOVVggKi8NCiANCiAjaWZk
ZWYgREJVU19CVUlMRF9URVNUUw0KIHN0YXRpYyB2b2lkDQpAQCAtNjksNiArNzIsMjcgQEANCiAg
ICAgICByZXR1cm4gMTsNCiAgICAgfQ0KIA0KKyNpZmRlZiBXSVRIX1NFTElOVVgNCisgIC8qIElu
aXRpYWxpemUgdXNlciBzcGFjZSBBVkMgZm9yIEQtQlVTIGFuZCBzZXQgdXANCisgICAqIGxvZ2dp
bmcgY2FsbGJhY2tzLg0KKyAgICovDQorICBpZiAoU0VMSU5VWF9FTkFCTEVEKQ0KKyAgICB7DQor
ICAgICAgc3RydWN0IGF2Y19sb2dfY2FsbGJhY2sgbG9nX2NiOw0KKyAgICAgIGxvZ19jYi5mdW5j
X2xvZyA9ICh2b2lkKikgJmxvZ19jYWxsYmFjazsNCisgICAgICBfZGJ1c192ZXJib3NlICgiU0VM
aW51eCBpcyBlbmFibGVkIGluIHRoaXMga2VybmVsLlxuIik7DQorICAgICAgaWYgKGF2Y19pbml0
ICgiYXZjIiwgTlVMTCwgJmxvZ19jYiwgTlVMTCkgPCAwKQ0KKyAgICAgICAgew0KKyAgICAgICAg
ICBfZGJ1c193YXJuICgiRmFpbGVkIHRvIHN0YXJ0IEFjY2VzcyBWZWN0b3IgQ2FjaGUgKEFWQylc
biIpOw0KKyAgICAgICAgICBleGl0ICgxKTsNCisgICAgICAgIH0NCisgICAgICBlbHNlDQorICAg
ICAgICBfZGJ1c192ZXJib3NlICgiQWNjZXNzIFZlY3RvciBDYWNoZSAoQVZDKSBzdGFydGVkLlxu
Iik7DQorICAgIH0NCisgIGVsc2UNCisgICAgX2RidXNfdmVyYm9zZSAoIlNFTGludXggbm90IGVu
YWJsZWQgaW4gdGhpcyBrZXJuZWwuXG4iKTsNCisjZW5kaWYgLyogV0lUSF9TRUxJTlVYICovDQor
DQogICBfZGJ1c19zdHJpbmdfaW5pdF9jb25zdCAoJnRlc3RfZGF0YV9kaXIsIGRpcik7DQogDQog
I2lmIDANCmRpZmYgLXVyTiAtLWV4Y2x1ZGU9Q1ZTIGRidXMub3JpZy9jb25maWd1cmUuaW4gZGJ1
cy9jb25maWd1cmUuaW4NCi0tLSBkYnVzLm9yaWcvY29uZmlndXJlLmluCTIwMDQtMDItMTggMTA6
MTU6MjUuMDAwMDAwMDAwIC0wNTAwDQorKysgZGJ1cy9jb25maWd1cmUuaW4JMjAwNC0wMi0xMCAx
MzozMToxNC4wMDAwMDAwMDAgLTA1MDANCkBAIC0zNyw2ICszNyw3IEBADQogQUNfQVJHX0VOQUJM
RShnY2osICAgICAgICAgICAgICBbICAtLWVuYWJsZS1nY2ogICAgICAgICAgYnVpbGQgZ2NqIGJp
bmRpbmdzXSxlbmFibGVfZ2NqPSRlbmFibGV2YWwsZW5hYmxlX2djaj1ubykNCiBBQ19BUkdfRU5B
QkxFKG1vbm8sICAgICAgICAgICAgIFsgIC0tZW5hYmxlLW1vbm8gICAgICAgICBidWlsZCBtb25v
IGJpbmRpbmdzXSxlbmFibGVfbW9ubz0kZW5hYmxldmFsLGVuYWJsZV9tb25vPW5vKQ0KIEFDX0FS
R19FTkFCTEUocHl0aG9uLCAgICAgICAgICAgWyAgLS1lbmFibGUtcHl0aG9uICAgICAgIGJ1aWxk
IHB5dGhvbiBiaW5kaW5nc10sZW5hYmxlX3B5dGhvbj0kZW5hYmxldmFsLGVuYWJsZV9weXRob249
YXV0bykNCitBQ19BUkdfRU5BQkxFKHNlbGludXgsICAgICAgICAgIFsgIC0tZW5hYmxlLXNlbGlu
dXggICAgICBidWlsZCB3aXRoIFNFTGludXggc3VwcG9ydF0sZW5hYmxlX3NlbGludXg9JGVuYWJs
ZXZhbCxlbmFibGVfc2VsaW51eD1ubykNCiANCiANCiBBQ19BUkdfV0lUSCh4bWwsICAgICAgICAg
ICAgICAgIFsgIC0td2l0aC14bWw9W2xpYnhtbC9leHBhdF0gICAgICAgICAgIFhNTCBsaWJyYXJ5
IHRvIHVzZV0pDQpAQCAtNTQ1LDEyICs1NDYsMTkgQEANCiANCiAjIyMjIFNldCB1cCBmaW5hbCBm
bGFncw0KIERCVVNfQ0xJRU5UX0NGTEFHUz0NCitpZiB0ZXN0IHgkZW5hYmxlX3NlbGludXggPSB4
eWVzOyB0aGVuDQorICBEQlVTX0NMSUVOVF9DRkxBR1M9LURXSVRIX1NFTElOVVgNCitmaQ0KIERC
VVNfQ0xJRU5UX0xJQlM9DQogQUNfU1VCU1QoREJVU19DTElFTlRfQ0ZMQUdTKQ0KIEFDX1NVQlNU
KERCVVNfQ0xJRU5UX0xJQlMpDQogDQogREJVU19CVVNfQ0ZMQUdTPSRYTUxfQ0ZMQUdTDQogREJV
U19CVVNfTElCUz0kWE1MX0xJQlMNCitpZiB0ZXN0IHgkZW5hYmxlX3NlbGludXggPSB4eWVzOyB0
aGVuDQorICBEQlVTX0JVU19DRkxBR1M9IiRYTUxfQ0ZMQUdTIC1EV0lUSF9TRUxJTlVYIg0KKyAg
REJVU19CVVNfTElCUz0iJFhNTF9MSUJTIC1sc2VsaW51eCINCitmaQ0KIEFDX1NVQlNUKERCVVNf
QlVTX0NGTEFHUykNCiBBQ19TVUJTVChEQlVTX0JVU19MSUJTKQ0KIA0KQEAgLTkzMiw2ICs5NDAs
NyBAQA0KIGRidXMvZGJ1cy1hcmNoLWRlcHMuaA0KIGJ1cy9zeXN0ZW0uY29uZg0KIGJ1cy9zZXNz
aW9uLmNvbmYNCitidXMvc2Vwb2xpY3kuY29uZg0KIGJ1cy9tZXNzYWdlYnVzDQogYnVzL2RidXMt
ZGFlbW9uLTEuMQ0KIE1ha2VmaWxlDQpAQCAtMTAxMiw2ICsxMDIxLDcgQEANCiAgICAgICAgIEJ1
aWxkaW5nIFF0IGJpbmRpbmdzOiAgICAgJHtoYXZlX3F0fQ0KICAgICAgICAgQnVpbGRpbmcgR0xp
YiBiaW5kaW5nczogICAke2hhdmVfZ2xpYn0NCiAgICAgICAgIEJ1aWxkaW5nIFB5dGhvbiBiaW5k
aW5nczogJHtoYXZlX3B5dGhvbn0NCisgICAgICAgIEJ1aWxkaW5nIFNFTGludXggc3VwcG9ydDog
JHtlbmFibGVfc2VsaW51eH0NCiAgICAgICAgIEJ1aWxkaW5nIEdUSysgdG9vbHM6ICAgICAgJHto
YXZlX2d0a30NCiAgICAgICAgIEJ1aWxkaW5nIFgxMSBjb2RlOiAgICAgICAgJHtlbmFibGVfeDEx
fQ0KICAgICAgICAgQnVpbGRpbmcgRG94eWdlbiBkb2NzOiAgICAke2VuYWJsZV9kb3h5Z2VuX2Rv
Y3N9DQpkaWZmIC11ck4gLS1leGNsdWRlPUNWUyBkYnVzLm9yaWcvZGJ1cy9kYnVzLWNvbm5lY3Rp
b24uYyBkYnVzL2RidXMvZGJ1cy1jb25uZWN0aW9uLmMNCi0tLSBkYnVzLm9yaWcvZGJ1cy9kYnVz
LWNvbm5lY3Rpb24uYwkyMDA0LTAyLTE4IDEwOjE1OjI1LjAwMDAwMDAwMCAtMDUwMA0KKysrIGRi
dXMvZGJ1cy9kYnVzLWNvbm5lY3Rpb24uYwkyMDA0LTAyLTEwIDEzOjMxOjE0LjAwMDAwMDAwMCAt
MDUwMA0KQEAgLTM3LDYgKzM3LDkgQEANCiAjaW5jbHVkZSAiZGJ1cy1zdHJpbmcuaCINCiAjaW5j
bHVkZSAiZGJ1cy1wZW5kaW5nLWNhbGwuaCINCiAjaW5jbHVkZSAiZGJ1cy1vYmplY3QtdHJlZS5o
Ig0KKyNpZmRlZiBXSVRIX1NFTElOVVgNCisjaW5jbHVkZSAiZGJ1cy10cmFuc3BvcnQtdW5peC5o
Ig0KKyNlbmRpZiAvKiBXSVRIX1NFTElOVVggKi8NCiANCiAjaWYgMA0KICNkZWZpbmUgQ09OTkVD
VElPTl9MT0NLKGNvbm5lY3Rpb24pICAgZG8geyAgICAgICAgICAgICAgICAgICAgICBcDQpAQCAt
Mjk1Myw2ICsyOTU2LDQ5IEBADQogICAgICgqb2xkX2ZyZWVfZGF0YSkgKG9sZF9kYXRhKTsNCiB9
DQogDQorI2lmZGVmIFdJVEhfU0VMSU5VWA0KKy8qKg0KKyAqIEdldCB0aGUgZmlsZSBkZXNjcmlw
dG9yIG9mIHRoZSBVTklYIGRvbWFpbiBzb2NrZXQgdGhlIA0KKyAqIGNvbm5lY3Rpb24gaXMgYmVp
bmcgbWFkZSBvbi4gIFRoaXMgY2FuIGJlIHVzZWQgZm9yDQorICogU0VMaW51eCBhY2Nlc3MgY29u
dHJvbCBjaGVja3Mgd2l0aCBnZXRwZWVyY29uKCkuDQorICoNCisgKiBAcGFyYW0gY29ubmVjdGlv
biB0aGUgY29ubmVjdGlvbg0KKyAqIEBwYXJhbSBmZCByZXR1cm4gbG9jYXRpb24gZm9yIHRoZSBm
aWxlIGRlc2NyaXB0b3IuDQorICogQHJldHVybnMgI1RSVUUgaWYgZmQgaXMgc3VjY2Vzc2Z1bGx5
IG9idGFpbmVkLg0KKyAqLw0KK2RidXNfYm9vbF90DQorZGJ1c19jb25uZWN0aW9uX2dldF91bml4
X2ZkIChEQnVzQ29ubmVjdGlvbiAqY29ubmVjdGlvbiwNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCAgICAgICAgICAgICpmZCkNCit7DQorICBkYnVzX2Jvb2xfdCByZXN1bHQgPSBG
QUxTRTsNCisgIA0KKyAgLyogRklYTUU6IEFkZCBiZXR0ZXIgZXJyb3IgY2hlY2tpbmcgaGVyZS4N
CisgICAqIFdoYXQgaWYgd2UgYXJlIGNvbm5lY3RlZCB2aWEgVENQL0lQIG9yIHNvbWUgb3RoZXIN
CisgICAqIHByb3RvY29sPw0KKyAgICovDQorICBpZiAoY29ubmVjdGlvbiA9PSBOVUxMKQ0KKyAg
ICB7DQorICAgICAgX2RidXNfd2FybiAoIkVycm9yOiBOVUxMIERCdXNDb25uZWN0aW9uXG4iKTsN
CisgICAgICByZXR1cm4gcmVzdWx0Ow0KKyAgICB9DQorICBpZiAoY29ubmVjdGlvbi0+dHJhbnNw
b3J0ID09IE5VTEwpDQorICAgIHsNCisgICAgICBfZGJ1c193YXJuICgiRXJyb3I6IE5VTEwgREJ1
c1RyYW5zcG9ydFxuIik7DQorICAgICAgcmV0dXJuIHJlc3VsdDsNCisgICAgfQ0KKyAgDQorICBD
T05ORUNUSU9OX0xPQ0sgKGNvbm5lY3Rpb24pOw0KKyAgDQorICBfZGJ1c190cmFuc3BvcnRfZ2V0
X3VuaXhfZmQgKGNvbm5lY3Rpb24tPnRyYW5zcG9ydCwNCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmQpOw0KKyAgcmVzdWx0ID0gVFJVRTsNCisNCisgIENPTk5FQ1RJT05fVU5MT0NL
IChjb25uZWN0aW9uKTsNCisNCisgIHJldHVybiByZXN1bHQ7DQorfQ0KKyNlbmRpZiAvKiBXSVRI
X1NFTElOVVggKi8NCisNCiAvKioNCiAgKiBHZXRzIHRoZSBVTklYIHVzZXIgSUQgb2YgdGhlIGNv
bm5lY3Rpb24gaWYgYW55Lg0KICAqIFJldHVybnMgI1RSVUUgaWYgdGhlIHVpZCBpcyBmaWxsZWQg
aW4uDQpkaWZmIC11ck4gLS1leGNsdWRlPUNWUyBkYnVzLm9yaWcvZGJ1cy9kYnVzLWNvbm5lY3Rp
b24uaCBkYnVzL2RidXMvZGJ1cy1jb25uZWN0aW9uLmgNCi0tLSBkYnVzLm9yaWcvZGJ1cy9kYnVz
LWNvbm5lY3Rpb24uaAkyMDA0LTAyLTE4IDEwOjE1OjI1LjAwMDAwMDAwMCAtMDUwMA0KKysrIGRi
dXMvZGJ1cy9kYnVzLWNvbm5lY3Rpb24uaAkyMDA0LTAyLTEwIDEzOjMxOjE0LjAwMDAwMDAwMCAt
MDUwMA0KQEAgLTI0NSw2ICsyNDUsMTAgQEANCiBkYnVzX2Jvb2xfdCBkYnVzX2Nvbm5lY3Rpb25f
bGlzdF9yZWdpc3RlcmVkICAgICAgICAoREJ1c0Nvbm5lY3Rpb24gICAgICAgICAgICAgICpjb25u
ZWN0aW9uLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAqKnBhcmVudF9wYXRoLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAg
ICAgICAgICAgICAgICoqKmNoaWxkX2VudHJpZXMpOw0KKyNpZmRlZiBXSVRIX1NFTElOVVgNCitk
YnVzX2Jvb2xfdCBkYnVzX2Nvbm5lY3Rpb25fZ2V0X3VuaXhfZmQgICAgICAgICAgICAoREJ1c0Nv
bm5lY3Rpb24gICAgICAgICAgICAgICpjb25uZWN0aW9uLA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAg
ICAgKmZkKTsNCisjZW5kaWYgLyogV0lUSF9TRUxJTlVYICovDQogDQogREJVU19FTkRfREVDTFM7
DQogDQpkaWZmIC11ck4gLS1leGNsdWRlPUNWUyBkYnVzLm9yaWcvZGJ1cy9kYnVzLXRyYW5zcG9y
dC11bml4LmMgZGJ1cy9kYnVzL2RidXMtdHJhbnNwb3J0LXVuaXguYw0KLS0tIGRidXMub3JpZy9k
YnVzL2RidXMtdHJhbnNwb3J0LXVuaXguYwkyMDA0LTAyLTE4IDEwOjE1OjI1LjAwMDAwMDAwMCAt
MDUwMA0KKysrIGRidXMvZGJ1cy9kYnVzLXRyYW5zcG9ydC11bml4LmMJMjAwNC0wMi0xMCAxMzoz
MToxNC4wMDAwMDAwMDAgLTA1MDANCkBAIC04MzEsNiArODMxLDIyIEBADQogICBjaGVja193cml0
ZV93YXRjaCAodHJhbnNwb3J0KTsNCiB9DQogDQorI2lmZGVmIFdJVEhfU0VMSU5VWA0KKy8qKg0K
KyAqIEdldCB0aGUgc29ja2V0J3MgZmlsZSBkZXNjcmlwdG9yIGZyb20gdGhlIERCdXNUcmFuc3Bv
cnRVbml4DQorICogZm9yIHVzZSBpbiBTRUxpbnV4IGNoZWNrcy4gDQorICovDQordm9pZA0KK19k
YnVzX3RyYW5zcG9ydF9nZXRfdW5peF9mZChEQnVzVHJhbnNwb3J0ICp0cmFuc3BvcnQsDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgKmZkKQ0KK3sNCisgIERCdXNU
cmFuc3BvcnRVbml4ICp1bml4X3RyYW5zcG9ydCA9IChEQnVzVHJhbnNwb3J0VW5peCopIHRyYW5z
cG9ydDsNCisgIA0KKyAgKmZkID0gdW5peF90cmFuc3BvcnQtPmZkOw0KKyAgX2RidXNfdmVyYm9z
ZSAoIlNvY2tldCBmaWxlIGRlc2NyaXB0b3IgaXMgOiAlZFxuIiwgKmZkKTsNCit9DQorI2VuZGlm
IC8qIFdJVEhfU0VMSU5VWCAqLw0KKw0KIC8qIEZJWE1FIHVzZSBfZGJ1c19wb2xsKCksIG5vdCBz
ZWxlY3QoKSAqLw0KIC8qKg0KICAqIEB0b2RvIFdlIG5lZWQgdG8gaGF2ZSBhIHdheSB0byB3YWtl
IHVwIHRoZSBzZWxlY3Qgc2xlZXAgaWYNCmRpZmYgLXVyTiAtLWV4Y2x1ZGU9Q1ZTIGRidXMub3Jp
Zy9kYnVzL2RidXMtdHJhbnNwb3J0LXVuaXguaCBkYnVzL2RidXMvZGJ1cy10cmFuc3BvcnQtdW5p
eC5oDQotLS0gZGJ1cy5vcmlnL2RidXMvZGJ1cy10cmFuc3BvcnQtdW5peC5oCTIwMDQtMDItMTgg
MTA6MTU6MjUuMDAwMDAwMDAwIC0wNTAwDQorKysgZGJ1cy9kYnVzL2RidXMtdHJhbnNwb3J0LXVu
aXguaAkyMDA0LTAyLTEwIDEzOjMxOjE0LjAwMDAwMDAwMCAtMDUwMA0KQEAgLTM2LDYgKzM2LDEw
IEBADQogREJ1c1RyYW5zcG9ydCogX2RidXNfdHJhbnNwb3J0X25ld19mb3JfdGNwX3NvY2tldCAg
ICAoY29uc3QgY2hhciAgICAgICAqaG9zdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkYnVzX2ludDMyX3QgICAgICBwb3J0LA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCdXNFcnJv
ciAgICAgICAgKmVycm9yKTsNCisjaWZkZWYgV0lUSF9TRUxJTlVYDQordm9pZCBfZGJ1c190cmFu
c3BvcnRfZ2V0X3VuaXhfZmQJCSAgICAgKERCdXNUcmFuc3BvcnQgICAgKnRyYW5zcG9ydCwNCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
ICAgICAgICAgICAgICpmZCk7DQorI2VuZGlmIC8qIFdJVEhfU0VMSU5VWCAqLw0KIA0KIA0KIERC
VVNfRU5EX0RFQ0xTOw0KZGlmZiAtdXJOIC0tZXhjbHVkZT1DVlMgZGJ1cy5vcmlnL3Rlc3QvTWFr
ZWZpbGUuYW0gZGJ1cy90ZXN0L01ha2VmaWxlLmFtDQotLS0gZGJ1cy5vcmlnL3Rlc3QvTWFrZWZp
bGUuYW0JMjAwNC0wMi0xOCAxMDoxNToyNS4wMDAwMDAwMDAgLTA1MDANCisrKyBkYnVzL3Rlc3Qv
TWFrZWZpbGUuYW0JMjAwNC0wMi0xMCAxMzozMToxNC4wMDAwMDAwMDAgLTA1MDANCkBAIC0xMDMs
NyArMTAzLDEwIEBADQogCWZpIDsJCQkJCQkJCQkJCVwNCiAJZWNobyAnLS0gQ29weWluZycgJCh0
b3BfYnVpbGRkaXIpL2J1cy8qLmNvbmYgJ3RvIHRlc3QgZGlyZWN0b3J5JyA7CQkJXA0KIAljcCAk
KHRvcF9idWlsZGRpcikvYnVzLyouY29uZiAkKHRvcF9idWlsZGRpcikvdGVzdC9kYXRhL3ZhbGlk
LWNvbmZpZy1maWxlcyB8fCBleGl0IDEgOyAgXA0KLQljaG1vZCB1K3cgJCh0b3BfYnVpbGRkaXIp
L3Rlc3QvZGF0YS92YWxpZC1jb25maWctZmlsZXMvKi5jb25mIHx8IGV4aXQgMQ0KKwljaG1vZCB1
K3cgJCh0b3BfYnVpbGRkaXIpL3Rlc3QvZGF0YS92YWxpZC1jb25maWctZmlsZXMvKi5jb25mIHx8
IGV4aXQgMQk7CQlcDQorIyBXZSBkb24ndCB3YW50IHRvIHRlc3QgdGhpcyBjb25maWcgZmlsZSBm
b3Igbm93Lg0KKwlybSAkKHRvcF9idWlsZGRpcikvdGVzdC9kYXRhL3ZhbGlkLWNvbmZpZy1maWxl
cy9zZXBvbGljeS5jb25mIHx8IGV4aXQgMTsNCisNCiANCiAjIyB0aGlzIGRvZXNuJ3QgY2xlYW4g
Z2VuZXJhdGVkIHRlc3QgZGF0YSBmaWxlcyB3aGVuIHNyY2Rpcj1idWlsZGRpcg0KIGNsZWFuLWxv
Y2FsOg0K

--=-OM0z31zYqd7GiJ2rww7t
Content-Disposition: attachment; filename=dbus-flask-0.1.diff
Content-Transfer-Encoding: base64
Content-Type: text/x-patch; name=dbus-flask-0.1.diff; charset=

SW5kZXg6IGFjY2Vzc192ZWN0b3JzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL25mc2hvbWUvcGFs
L0NWUy9zZWxpbnV4LXVzci9wb2xpY3kvZmxhc2svYWNjZXNzX3ZlY3RvcnMsdg0KcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjYNCmRpZmYgLXUgLXIxLjYgYWNjZXNzX3ZlY3RvcnMNCi0tLSBhY2Nlc3Nf
dmVjdG9ycwk0IEZlYiAyMDA0IDE4OjMzOjQyIC0wMDAwCTEuNg0KKysrIGFjY2Vzc192ZWN0b3Jz
CTkgRmViIDIwMDQgMTk6NTE6MzUgLTAwMDANCkBAIC0zNDMsNiArMzQzLDE1IEBADQogCWxlYXNl
DQogfQ0KIA0KKyMgRGVmaW5lIHRoZSBhY2Nlc3MgdmVjdG9yIGludGVycHJldGF0aW9uIGZvciBj
b250cm9sbGluZw0KKyMgYWNjZXNzIGFuZCBjb21tdW5pY2F0aW9uIHRocm91Z2ggdGhlIEQtQlVT
IG1lc3NhZ2luZw0KKyMgc3lzdGVtLg0KKyMNCitjbGFzcyBkYnVzDQorew0KKwlhY3F1aXJlX3N2
Yw0KKwlzZW5kX21zZw0KK30NCiANCiAjDQogIyBEZWZpbmUgdGhlIGFjY2VzcyB2ZWN0b3IgaW50
ZXJwcmV0YXRpb24gZm9yIGNvbnRyb2xsaW5nDQpJbmRleDogc2VjdXJpdHlfY2xhc3Nlcw0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQ0KUkNTIGZpbGU6IC9uZnNob21lL3BhbC9DVlMvc2VsaW51eC11c3IvcG9saWN5L2Zs
YXNrL3NlY3VyaXR5X2NsYXNzZXMsdg0KcmV0cmlldmluZyByZXZpc2lvbiAxLjINCmRpZmYgLXUg
LXIxLjIgc2VjdXJpdHlfY2xhc3Nlcw0KLS0tIHNlY3VyaXR5X2NsYXNzZXMJNCBOb3YgMjAwMyAy
MDowOToxMiAtMDAwMAkxLjINCisrKyBzZWN1cml0eV9jbGFzc2VzCTI4IEphbiAyMDA0IDE5OjU1
OjAyIC0wMDAwDQpAQCAtNDMsNiArNDMsNyBAQA0KICMNCiAjIHVzZXJzcGFjZSBvYmplY3QgbWFu
YWdlciBjbGFzc2VzDQogIw0KK2NsYXNzIGRidXMNCiANCiAjIHBhc3N3ZC9jaGZuL2Noc2gNCiBj
bGFzcyBwYXNzd2QNCg==

--=-OM0z31zYqd7GiJ2rww7t
Content-Disposition: attachment; filename=se-dbus-README
Content-Transfer-Encoding: base64
Content-Type: text/x-readme; name=se-dbus-README; charset=

U0UtREJVUyAtLSAgTWF0dGhldyBSaWNrYXJkIDxtanJpY2thQGVwb2NoLm5jc2MubWlsPg0KLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tDQpTRS1EQlVTIHByb3ZpZGVzIHRoZSBzdGFuZGFyZCBEQlVTIHN5c3RlbSB3
aXRoIFNFTGludXggY29tcGF0aWJsZQ0Kc2VjdXJpdHkgY29udHJvbHMuICBUaGVzZSBzZWN1cml0
eSBjb250cm9scyBhcmUgYXBwbGljYWJsZSB0byBib3RoIHRoZQ0Kc3lzdGVtLXdpZGUgYW5kIHBl
ci1zZXNzaW9uIGRhZW1vbnMuICBUaGVzZSBjb250cm9scyBhcmUgcHJpbWFyaWx5IA0KYmFzZWQg
b24gY29udHJvbGxpbmcgc2VydmljZSBuYW1lcyByZWdpc3RlcmluZyBvbiB0aGUgYnVzLCBhbmQg
b25jZQ0KcmVnaXN0ZXJlZCwgY29udHJvbGxpbmcgbWVzc2FnZSBwYXNzaW5nIHRvIHRoZXNlIHNl
cnZpY2VzLg0KDQpUaGVzZSBjb250cm9scyBhcmUgZGVmaW5lZCBpbiB0aGUgZGJ1cyBjbGFzcyBp
biBmbGFzay4gIFNFLURCVVMgdXNlcw0KdHdvIG5ldyBwZXJtaXNzaW9ucyBpbiB0aGlzIGNsYXNz
OiBzZW5kX21zZyBhbmQgYWNxdWlyZV9zdmMsIHdoaWNoDQpjb250cm9sIG1lc3NhZ2Ugc2VuZGlu
ZyBhbmQgc2VydmljZSBhY3F1aXNpdGlvbiwgcmVzcGVjdGl2ZWx5LiAgVGhlc2UNCmFjY2VzcyBj
b250cm9scyBhcmUgY2hlY2tlZCBiZWZvcmUgdGhlIHN0YW5kYXJkIERCVVMgc2VjdXJpdHkgcG9s
aWN5DQppcyBjaGVja2VkLg0KDQpTZXJ2aWNlIEFjcXVpc2l0aW9uDQotLS0tLS0tLS0tLS0tLS0t
LS0tDQpTRS1EQlVTIGludHJvZHVjZXMgc2V2ZXJhbCBuZXcgY29udHJvbHMgaW4gcmVnYXJkcyB0
byB3aG8gY2FuIGFjcXVpcmUNCmEgc2VydmljZSBuYW1lLiAgQSBuZXcgY29uZmlndXJhdGlvbiBm
aWxlIGlzIGRlZmluZWQgdG8gc3RvcmUgc2VydmljZQ0KcG9saWN5IGluZm9ybWF0aW9uOiBzZXBv
bGljeS5jb25mLiAgVGhpcyBmaWxlIHByb3ZpZGVzIGEgcHNldWRvLQ0KbGFiZWxsaW5nIHN5c3Rl
bSB0byBnaXZlIERCVVMgc2VydmljZXMgYSBzZWN1cml0eSBjb250ZXh0LiAgSXQgaXMgYSANCnNp
bXBsZSBwbGFpbiB0ZXh0IGNvbmZpZ3VyYXRpb24gZmlsZS4gIFRoZSBmb3JtYXQgaXM6DQogICAg
PHNlcnZpY2UgbmFtZT4gPHdoaXRlc3BhY2U+IDxzZWN1cml0eSBjb250ZXh0Pg0KQSBsb25nZXN0
IG1hdGNoIGFsZ29yaXRobSBpcyBhcHBsaWVkIHdoZW4gbWF0Y2hpbmcgYSBzZXJ2aWNlIG5hbWUg
dG8gYQ0Kc2VjdXJpdHkgY29udGV4dC4gIFRoaXMgc2ltcGxpZmllcyBzZXJ2aWNlIHBvbGljeSBk
ZWZpbml0aW9ucyBhcyBpdA0KYWxsb3dzIHNvbWUgd2lsZGNhcmQgbGlrZSBtYXRjaGluZy4gIEZv
ciBleGFtcGxlLCBpZiB0aGUgc2Vwb2xpY3kuY29uZg0KZmlsZSBkZWZpbmVzOg0KICAgIG9yZy5m
cmVlZGVza3RvcC5EQnVzICAgICAgICAgc3lzdGVtX3U6c2VydmljZV9yOmRidXNkX3QNCmFuZCBh
IHByb2Nlc3MgdHJpZXMgdG8gYWNxdWlyZSB0aGUgc2VydmljZSBvcmcuZnJlZWRlc2t0b3AuREJ1
cy5FeGFtcGxlLA0KdGhpcyBzZXJ2aWNlIHdpbGwgYmUgbGFiZWxsZWQgd2l0aCB0aGUgc3lzdGVt
X3U6c2VydmljZV9yOmRidXNkX3QNCmNvbnRleHQgc2luY2UgaXQgaXMgbm90IHByZXZpb3VzbHkg
ZGVmaW5lZCwgYW5kIHRoaXMgaXMgdGhlIGxvbmdlc3QNCm1hdGNoLg0KDQpBIHNlY3VyaXR5IGNo
ZWNrIGlzIHRoZW4gbWFkZSBmcm9tIHRoZSBjb250ZXh0IG9mIHRoZSBjb25uZWN0aW5nDQpwcm9j
ZXNzIChvYnRhaW5lZCB2aWEgZ2V0cGVlcmNvbigpKSB0byB0aGlzIHNlcnZpY2UgbGFiZWwgZm9y
IHRoZQ0KYWNxdWlyZV9zdmMgcGVybWlzc2lvbi4gIElmIHRoZSBzZWN1cml0eSBwb2xpY3kgYWxs
b3dzIHRoaXMsIHN0YW5kYXJkDQpEQlVTIHNlY3VyaXR5IGNoZWNrcyBhcmUgcGVyZm9ybWVkLCBh
bmQgdGhlbiB0aGUgc2VydmljZSBpcyBhY3F1aXJlZA0KaWYgcGVybWl0dGVkLiAgSWYgbm8gcGF0
dGVybiBpbiB0aGUgc2Vwb2xpY3kuY29uZiBtYXRjaGVzIHRoZSBzZXJ2aWNlLA0KYSBkZWZhdWx0
IGxhYmVsIGlzIHVzZWQuICBUaGlzIGRlZmF1bHQgbGFiZWwgaXMgdGhlIGNvbnRleHQgb2YgdGhl
IA0KZGJ1cyBkYWVtb24gaXRzZWxmLg0KDQpPbmNlIGFjcXVpcmVkLCB0aGUgY29udGV4dCBvZiB0
aGUgYWNxdWlyaW5nIHByb2Nlc3MgaXMgc3RvcmVkIHdpdGggdGhhdA0Kc2VydmljZSBuYW1lLiAg
Tm90ZSB0aGF0IHRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBwc2V1ZG8tbGFiZWwNCnRoYXQg
aXMgcHJvdmlkZWQgaW4gdGhlIHNlcG9saWN5LmNvbmYuDQoNCk1lc3NhZ2UgU2VuZGluZw0KLS0t
LS0tLS0tLS0tLS0tDQpPbmNlIGEgc2VydmljZSBpcyBhY3F1aXJlZCBvbiB0aGUgYnVzLCBTRS1E
QlVTIGVuZm9yY2VzIHdobyBjYW4gcGFzcw0KbWVzc2FnZXMgdG8gaXQuICBXaGVuIGFub3RoZXIg
cHJvY2VzcyB0cmllcyB0byBzZW5kIGEgbWVzc2FnZSB0byANCmEgc2VydmljZSwgYSBzZWN1cml0
eSBjaGVjayBpcyBtYWRlIGZyb20gdGhlIHNlbmRpbmcgcHJvY2VzcydzIGNvbnRleHQNCihvYnRh
aW5lZCB2aWEgZ2V0cGVlcmNvbigpKSB0byB0aGUgc2VydmljZXMgc2VjdXJpdHkgY29udGV4dCAo
dGhlDQpjb250ZXh0IG9mIGl0cyBvd25lciwgc3RvcmVkIHByZXZpb3VzbHkpIGZvciB0aGUgc2Vu
ZF9tc2cgcGVybWlzc2lvbi4NCklmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCwgdGhlIHN0YW5kYXJk
IERCVVMgcG9saWN5IGNoZWNrcyB0YWtlIHBsYWNlLA0KYW5kIGlmIGFsbG93ZWQsIHRoZSBtZXNz
YWdlIGlzIHBhc3NlZCBvbi4NCg0KRW5mb3JjaW5nL1Blcm1pc3NpdmUgTW9kZQ0KLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQ0KSWYgdGhlIGtlcm5lbCBpcyBpbiBwZXJtaXNzaXZlIG1vZGUsIG5v
dGhpbmcgd2lsbCBhY3R1YWxseSBiZSBkZW5pZWQsDQpidXQgeW91IHdpbGwgc3RpbGwgc2VlIGF1
ZGl0IGxvZ3Mgb2Ygd2hhdCB3b3VsZCBoYXZlIGJlZW4gYmxvY2tlZC4NClNFLURCVVMgd2lsbCBs
b2cgZGVuaWFscyB0byBzdGFuZGFyZCBlcnJvciBhcyB3ZWxsIGFzIHRvIHN5c2xvZ2QuDQoNCkJ1
aWxkaW5nIHdpdGggU0VMaW51eCBzdXBwb3J0DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQ0KRmlyc3QgcGF0Y2ggeW91ciBEQlVTIHNvdXJjZSAocHVsbGVkIGZyb20gQ1ZTLCBpdCBtYXkg
YWxzbyBhcHBseSB0byANCjAuMjAgYnV0IEkgaGF2ZW4ndCB0ZXN0ZWQgdGhhdCkgd2l0aCBteSBT
RS1EQlVTIHBhdGNoLiAgWW91IGFsc28gbmVlZA0KdG8gcGF0Y2ggeW91ciBmbGFzayBhY2Nlc3Nf
dmVjdG9ycyBhbmQgc2VjdXJpdHlfY2xhc3NlcyB0byBwcm92aWRlIA0Kc3VwcG9ydCBmb3IgdGhl
IGRidXMgY2xhc3MuICBBZnRlciBidWlsZGluZyB0aGUgdXBkYXRlZCBmbGFzaywgeW91IHdpbGwN
Cm5lZWQgdG8gY29weSB0aGVzZSBoZWFkZXJzIHRvIGxpYnNlbGludXggc28gdGhhdCB0aGV5IGNh
biBiZSB1c2VkIGJ5IA0KdGhlIHVzZXIgc3BhY2UgQVZDIGNvZGUuDQoNCllvdSBuZWVkIHRvIHVz
ZSBhdCBsZWFzdCBhIDIuNi4yIGtlcm5lbCB0byBnZXQgYWxsIHRoZSBmZWF0dXJlcyB5b3UNCm5l
ZWQgZm9yIFNFLURCVVMgKGdldHBlZXJjb24sIHVzZXIgYWNjZXNzaWJsZSBlbmZvcmNlIGZsYWcp
LCBhbmQgDQpwcmVmZXJyYWJseSBvbmUgbmV3ZXIgdG8gc3VwcG9ydCBmbHVzaGluZyB0aGUgdXNl
ciBzcGFjZSBBVkMgd2hlbiANCnBvbGljeSBpcyBjaGFuZ2VkLiAgWW91IHdpbGwgYWxzbyBuZWVk
IHRoZSBsYXRlc3QgbGlic2VsaW51eCB0bw0Kc3VwcG9ydCB0aGlzLg0KDQpUbyBidWlsZCBEQlVT
IHdpdGggU0VMaW51eCBzdXBwb3J0LCBwYXNzIC0tZW5hYmxlLXNlbGludXggdG8gDQphdXRvZ2Vu
LnNoIChvciBjb25maWd1cmUpLiAgVGhpcyB3aWxsIGVuYWJsZSBzdXBwb3J0IGZvciBTRUxpbnV4
IA0Kc2VjdXJpdHkgbWVjaGFuaXNtcy4gIEhvd2V2ZXIsIGlmIGxhdGVyIHRoZSBkYWVtb24gaXMg
cnVuIG9uIGEga2VybmVsDQp3aXRob3V0IFNFTGludXggc3VwcG9ydCwgaXQgc2hvdWxkIHN0aWxs
IGZ1bmN0aW9uIHByb3Blcmx5ICh3aXRob3V0DQphY3R1YWxseSBjaGVja2luZyBhbnkgcG9saWN5
IG9mIGNvdXJzZSkuDQoNClBvbGljeQ0KLS0tLS0tDQpJIGhhdmVuJ3Qgd3JpdHRlbiBhbnkga2Vy
bmVsIHBvbGljeSB0byBhbGxvdyBzdGFuZGFyZCBEQlVTIHNlcnZpY2VzDQphbmQgbWVzc2FnZXMu
ICBUaGF0IGlzIGEgVE9ETyAob3IgeW91IGNvdWxkIHdyaXRlIGl0IGFuZCBzZW5kIGl0DQphbG9u
ZykuDQoNCkJ1Z3MvUXVlc3Rpb25zDQotLS0tLS0tLS0tLS0tLQ0KVGhpcyBjb2RlIGlzIHN0aWxs
IHVuZGVyIGRldmVsb3BtZW50LCBhbmQgaXMgbm90IHlldCBjb21wbGV0ZSBvciBidWcNCmZyZWUu
ICBJZiB5b3UgZmluZCBhbnkgYnVncyBvciBoYXZlIGFueSBxdWVzdGlvbnMvc3VnZ2VzdGlvbnMg
cGxlYXNlIA0Kc2VuZCBtYWlsIHRvIG1lIDxtanJpY2thQGVwb2NoLm5jc2MubWlsPiBvciB0byB0
aGUgU0VMaW51eCBtYWlsaW5nIA0KbGlzdDogPFNFTGludXhAdHljaG8ubnNhLmdvdj4uDQoNCk9u
ZSBxdWljayB0ZXN0IHRvIG1ha2Ugc3VyZSB5b3UgaGF2ZSBwYXRjaGVkIHRoaW5ncyBjb3JyZWN0
bHkgYW5kDQpoYXZlIGFsbCB0aGUgZnVuY3Rpb25hbGl0eSBuZWVkZWQgaW4geW91ciBrZXJuZWwv
bGlic2VsaW51eCBpcyB0bw0KcnVuIHRoZSBidXMvYnVzLXRlc3QgdGVzdCBwcm9ncmFtLiAgWW91
IGNhbiBwb2ludCB0aGlzIHRvIHRlc3QvZGF0YSB0bw0KcnVuIHRocm91Z2ggdGhlIHN0YW5kYXJk
IHRlc3Qgc3VpdGUuICBZb3Ugc2hvdWxkIHNlZSBsb3RzIG9mIGRlbmlhbHMgaWYNCnlvdSBkb24n
dCBoYXZlIGFueSBhZGRpdGlvbmFsIHBvbGljeSBpbiBwbGFjZS4gIFlvdSBzaG91bGQgYWxzbyBi
ZSBhYmxlDQp0byB1c2UgZGJ1cy1zZW5kIGFuZCBkYnVzLW1vbml0b3IgZm9yIG1vcmUgdGVzdGlu
Zy4NCg0K

--=-OM0z31zYqd7GiJ2rww7t--