From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Campbell Subject: Re: [Xen-staging] [xen staging] tools: Refactor "xentoollog" into its own library Date: Thu, 10 Dec 2015 10:31:07 +0000 Message-ID: <1449743467.9759.58.camel@citrix.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xensource.com, Ian Jackson , Wei Liu , Jim Fehlig List-Id: xen-devel@lists.xenproject.org T24gV2VkLCAyMDE1LTEyLTA5IGF0IDEyOjQ1ICswMDAwLCBwYXRjaGJvdEB4ZW4ub3JnIHdyb3Rl Ogo+IGNvbW1pdCBjN2QzYWZiYjQ0YjQ3YWY5MTAzYmUwYjkxNGFmZDU4OGE4NGQ5ZTYyCj4gQXV0 aG9yOsKgwqDCoMKgwqBJYW4gQ2FtcGJlbGwgPGlhbi5jYW1wYmVsbEBjaXRyaXguY29tPgo+IEF1 dGhvckRhdGU6IFRodSBEZWMgMyAxMToyMjowMiAyMDE1ICswMDAwCj4gQ29tbWl0OsKgwqDCoMKg wqBJYW4gQ2FtcGJlbGwgPGlhbi5jYW1wYmVsbEBjaXRyaXguY29tPgo+IENvbW1pdERhdGU6IFdl ZCBEZWMgOSAxMjozNzowMCAyMDE1ICswMDAwCj4gCj4gwqDCoMKgwqB0b29sczogUmVmYWN0b3Ig InhlbnRvb2xsb2ciIGludG8gaXRzIG93biBsaWJyYXJ5CgpUaGlzIGhhcyBicm9rZW4gdGhlIGxp YnZpcnQgYnVpbGQKaHR0cDovL2xvZ3MudGVzdC1sYWIueGVucHJvamVjdC5vcmcvb3NzdGVzdC9s b2dzLzY1NjQ4L2J1aWxkLWFtZDY0LWxpYnZpcnQvNS50cy1saWJ2aXJ0LWJ1aWxkLmxvZwoKICAg IC91c3IvYmluL2xkOiAuLi9zcmMvLmxpYnMvbGlidmlydF9kcml2ZXJfbGlieGxfaW1wbC5hKGxp YnZpcnRfZHJpdmVyX2xpYnhsX2ltcGxfbGEtbGlieGxfY29uZi5vKTogdW5kZWZpbmVkIHJlZmVy ZW5jZSB0byBzeW1ib2wgJ3h0bF9sb2dnZXJfZGVzdHJveUBAVkVSU18xLjAnCiAgICAvdXNyL2Jp bi9sZDogbm90ZTogJ3h0bF9sb2dnZXJfZGVzdHJveUBAVkVSU18xLjAnIGlzIGRlZmluZWQgaW4g RFNPIC9ob21lL29zc3Rlc3QvYnVpbGQuNjU2NDguYnVpbGQtYW1kNjQtbGlidmlydC94ZW5kaXN0 L3Vzci9sb2NhbC9saWIvL2xpYnhlbnRvb2xsb2cuc28uMSBzbyB0cnkgYWRkaW5nIGl0IHRvIHRo ZSBsaW5rZXIgY29tbWFuZCBsaW5lCiAgICAvaG9tZS9vc3N0ZXN0L2J1aWxkLjY1NjQ4LmJ1aWxk LWFtZDY0LWxpYnZpcnQveGVuZGlzdC91c3IvbG9jYWwvbGliLy9saWJ4ZW50b29sbG9nLnNvLjE6 IGNvdWxkIG5vdCByZWFkIHN5bWJvbHM6IEludmFsaWQgb3BlcmF0aW9uCiAgICBjb2xsZWN0Mjog ZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKCkknbSBzdXJlIEkgaGFkIGNoZWNrZWQg bGlidmlydC5naXQgZm9yIHN1Y2ggdXNhZ2UsIGJ1dCBpdCBpcyBvYnZpb3VzbHkKdGhlcmUgYW5k IGhhcyBiZWVuIHNpbmNlIDIwMTMsIHNvIGNsZWFybHkgSSB3YXMgd3JvbmcuCgpJIGhhdmUgcmV2 ZXJ0ZWQgdGhpcyBjb21taXQgKHNlZSBiZWxvdykgd2hpbGUgSSBzb3J0IG91dCBhIGxpYnZpcnQg cGF0Y2guwqAKCk5vdGUgdGhhdCBJIGhhdmUgd291bmQgYmFjayBNSU5JT1NfVVBTVFJFQU1fUkVW SVNJT04KYW5kwqBRRU1VX1RSQURJVElPTkFMX1JFVklTSU9OIGhlcmUgYnV0IEkgaGF2ZSBub3Qg cmV3b3VuZCB0aGVpciByZXNwZWN0aXZlCm1hc3RlciBicmFuY2hlcy4gSW4gdGhlIGV2ZW50IHdl IG5lZWQgdG8gcHVzaCBzb21ldGhpbmcgdG8gb25lIG9mIHRoZXNlCmJlZm9yZSB0aGlzIHBhdGNo IGxhbmRzIGFnYWluIElhbiBhbmQgSSBoYXZlIGFncmVlZCB3ZSB3aWxsIGRvIHRoZQpuZWNlc3Nh cnkgcmV2ZXJ0IGF0IHRoYXQgcG9pbnQgYmVmb3JlIHN0YWNraW5nIGFueSBuZXcgc3R1ZmYgb24g dG9wLgoKSWFuLgoKY29tbWl0IGVjMDcxMjU3NjE5ODYzM2RkN2ZiZmUyNTI5MGIwMzBkNWEyM2Iy NTIKQXV0aG9yOiBJYW4gQ2FtcGJlbGwgPGlhbi5jYW1wYmVsbEBjaXRyaXguY29tPgpEYXRlOsKg wqDCoFRodSBEZWMgMTAgMTA6MjE6MzQgMjAxNSArMDAwMAoKwqDCoMKgwqBSZXZlcnQgInRvb2xz OiBSZWZhY3RvciAieGVudG9vbGxvZyIgaW50byBpdHMgb3duIGxpYnJhcnkiCsKgwqDCoMKgCsKg wqDCoMKgVGhpcyByZXZlcnRzIGNvbW1pdCBjN2QzYWZiYjQ0YjQ3YWY5MTAzYmUwYjkxNGFmZDU4 OGE4NGQ5ZTYyIHdoaWNoCsKgwqDCoMKgYnJva2UgdGhlIGxpYnZpcnQgYnVpbGQsIHNpbmNlIGxp YnZpcnQgdXNlcyB4dGxfKiBhbmQgaGVuY2UgbmVlZHMKwqDCoMKgwqB1cGRhdGluZyB0byBsaW5r IGFnYWluc3QgdGhlIG5ldyBsaWJyYXJ5IHdoZW4gbmVjZXNzYXJ5LgrCoMKgwqDCoArCoMKgwqDC oFNpZ25lZC1vZmYtYnk6IElhbiBDYW1wYmVsbCA8aWFuLmNhbXBiZWxsQGNpdHJpeC5jb20+Cgpk aWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25vcmUKaW5kZXggYTJjODVlMS4uOTFlMTQz MCAxMDA2NDQKLS0tIGEvLmdpdGlnbm9yZQorKysgYi8uZ2l0aWdub3JlCkBAIC01OCw3ICs1OCw2 IEBAIHN0dWJkb20vZ2NjLSoKwqBzdHViZG9tL2luY2x1ZGUKwqBzdHViZG9tL2lvZW11CsKgc3R1 YmRvbS94ZW5zdG9yZQotc3R1YmRvbS9saWJ4ZW50b29sbG9nLSoKwqBzdHViZG9tL2xpYnhjLSoK wqBzdHViZG9tL2x3aXAtKgrCoHN0dWJkb20vbWluaS1vcy0qCmRpZmYgLS1naXQgYS9Db25maWcu bWsgYi9Db25maWcubWsKaW5kZXggOGZjNzc2Ny4uMjE2YTY0MiAxMDA2NDQKLS0tIGEvQ29uZmln Lm1rCisrKyBiL0NvbmZpZy5tawpAQCAtMjU1LDkgKzI1NSw5IEBAIE1JTklPU19VUFNUUkVBTV9V UkwgPz0gZ2l0Oi8veGVuYml0cy54ZW4ub3JnL21pbmktb3MuZ2l0CsKgZW5kaWYKwqBPVk1GX1VQ U1RSRUFNX1JFVklTSU9OID89IDUyYTk5NDkzY2NlODhhOWQ0ZWM4YTAyZDdmMWJkMWExMDAxY2U2 MGQKwqBRRU1VX1VQU1RSRUFNX1JFVklTSU9OID89IG1hc3RlcgotTUlOSU9TX1VQU1RSRUFNX1JF VklTSU9OID89IGQyNTc3M2M4YWZhMmY0ZGJiYjQ2NjExNmRhZWI2MDE1OWRkZDIyYmQKLSMgVGh1 IERlYyAzIDExOjIzOjI1IDIwMTUgKzAwMDAKLSMgbWluaS1vczogSW5jbHVkZSBsaWJ4ZW50b29s bG9nIHdpdGggbGlieGMKK01JTklPU19VUFNUUkVBTV9SRVZJU0lPTiA/PSBiY2NkOTAwNzFlODYz ZWMyMjIxNmEwMDBmMWEwNzAzNWUyZjIyNmZmCisjIE1vbiBOb3YgMjMgMTY6MzQ6MzEgMjAxNSAr MDAwMAorIyBBZGQgYSAuZ2l0aWdub3JlCsKgCsKgU0VBQklPU19VUFNUUkVBTV9SRVZJU0lPTiA/ PSByZWwtMS45LjAKwqAjIFR1ZSBOb3YgMTcgMDk6MTg6NDQgMjAxNSAtMDUwMApAQCAtMjY2LDkg KzI2Niw5IEBAIFNFQUJJT1NfVVBTVFJFQU1fUkVWSVNJT04gPz0gcmVsLTEuOS4wCsKgRVRIRVJC T09UX05JQ1MgPz0gcnRsODEzOSA4MDg2MTAwZQrCoArCoAotUUVNVV9UUkFESVRJT05BTF9SRVZJ U0lPTiA/PSA5ZmFkOWVkMjg1ODM1Y2FlZjY0YmI4ZGFiMzUyZTI4N2FkODUzOGMyCi0jIFRodSBE ZWMgMyAxMToyMzoxNiAyMDE1ICswMDAwCi0jIHFlbXUteGVuLXRyYWRpdGlvbmFsOiBVc2UgeGVu dG9vbGxvZyBhcyBhIHNlcGFyYXRlIGxpYnJhcnkKK1FFTVVfVFJBRElUSU9OQUxfUkVWSVNJT04g Pz0gOTFjMTViZmFlYzE3NjRjZTI4OTZhMzkzZWFiZWUxMTgzYWZlMTEzMAorIyBXZWQgRGVjIDkg MTE6NDc6MzUgMjAxNSArMDAwMAorIyBuZXQ6IHBjbmV0OiBhZGQgY2hlY2sgdG8gdmFsaWRhdGUg cmVjZWl2ZSBkYXRhIHNpemUoQ1ZFLTIwMTUtNzUwNCkKwqAKwqAjIFNwZWNpZnkgd2hpY2ggcWVt dS1kbSB0byB1c2UuIFRoaXMgbWF5IGJlIGBpb2VtdScgdG8gdXNlIHRoZSBvbGQKwqAjIE1lcmN1 cmlhbCBpbi10cmVlIHZlcnNpb24sIG9yIGEgbG9jYWwgZGlyZWN0b3J5LCBvciBhIGdpdCBVUkwu CmRpZmYgLS1naXQgYS9zdHViZG9tL01ha2VmaWxlIGIvc3R1YmRvbS9NYWtlZmlsZQppbmRleCA5 YzkyM2RkLi5lMTM1OWNmIDEwMDY0NAotLS0gYS9zdHViZG9tL01ha2VmaWxlCisrKyBiL3N0dWJk b20vTWFrZWZpbGUKQEAgLTMxMywxMSArMzEzLDYgQEAgbWstaGVhZGVycy0kKFhFTl9UQVJHRVRf QVJDSCk6ICQoSU9FTVVfTElOS0ZBUk1fVEFSR0VUKQrCoAnCoMKgbG4gLXNmICQod2lsZGNhcmQg JChYRU5fUk9PVCkvdG9vbHMvaW5jbHVkZS94ZW4tZm9yZWlnbi8qKSBpbmNsdWRlL3hlbi1mb3Jl aWduLyAmJiBcCsKgCcKgwqAkKE1BS0UpIERFU1RESVI9IC1DIGluY2x1ZGUveGVuLWZvcmVpZ24v ICYmIFwKwqAJwqDCoCggWyAtaCBpbmNsdWRlL3hlbi9mb3JlaWduIF0gfHwgbG4gLXNmIC4uL3hl bi1mb3JlaWduIGluY2x1ZGUveGVuL2ZvcmVpZ24gKQotCW1rZGlyIC1wIGxpYnMtJChYRU5fVEFS R0VUX0FSQ0gpL3Rvb2xsb2cKLQlbIC1oIGxpYnMtJChYRU5fVEFSR0VUX0FSQ0gpL3Rvb2xsb2cv TWFrZWZpbGUgXSB8fCAoIGNkIGxpYnMtJChYRU5fVEFSR0VUX0FSQ0gpL3Rvb2xsb2cgJiYgXAot CcKgwqBsbiAtc2YgJChYRU5fUk9PVCkvdG9vbHMvbGlicy90b29sbG9nL2luY2x1ZGUvKi5oIC4g JiYgXAotCcKgwqBsbiAtc2YgJChYRU5fUk9PVCkvdG9vbHMvbGlicy90b29sbG9nLyouYyAuICYm IFwKLQnCoMKgbG4gLXNmICQoWEVOX1JPT1QpL3Rvb2xzL2xpYnMvdG9vbGxvZy9NYWtlZmlsZSAu ICkKwqAJbWtkaXIgLXAgbGlieGMtJChYRU5fVEFSR0VUX0FSQ0gpCsKgCVsgLWggbGlieGMtJChY RU5fVEFSR0VUX0FSQ0gpL01ha2VmaWxlIF0gfHwgKCBjZCBsaWJ4Yy0kKFhFTl9UQVJHRVRfQVJD SCkgJiYgXArCoAnCoMKgbG4gLXNmICQoWEVOX1JPT1QpL3Rvb2xzL2xpYnhjLyouaCAuICYmIFwK QEAgLTM0MSwyMyArMzM2LDEyIEBAICQoVEFSR0VUU19NSU5JT1MpOiBtaW5pLW9zLSU6CsKgCWRv bmUKwqAKwqAjIyMjIyMjCi0jIGxpYnhlbnRvb2xsb2cKLSMjIyMjIyMKLQotLlBIT05ZOiBsaWJ4 ZW50b29sbG9nCi1saWJ4ZW50b29sbG9nOiBsaWJzLSQoWEVOX1RBUkdFVF9BUkNIKS90b29sbG9n L2xpYnhlbnRvb2xsb2cuYQotbGlicy0kKFhFTl9UQVJHRVRfQVJDSCkvdG9vbGxvZy9saWJ4ZW50 b29sbG9nLmE6ICQoTkVXTElCX1NUQU1QRklMRSkKLQkkKE1BS0UpIC1DICQoWEVOX1JPT1QpL3Rv b2xzL2luY2x1ZGUKLQkkKE1BS0UpIERFU1RESVI9IC1DICQoTUlOSV9PUykgbGlua3MKLQlDUFBG TEFHUz0iJChUQVJHRVRfQ1BQRkxBR1MpIiBDRkxBR1M9IiQoVEFSR0VUX0NGTEFHUykiICQoTUFL RSkgREVTVERJUj0gLUMgbGlicy0kKFhFTl9UQVJHRVRfQVJDSCkvdG9vbGxvZwotCi0jIyMjIyMj CsKgIyBsaWJ4YwrCoCMjIyMjIyMKwqAKwqAuUEhPTlk6IGxpYnhjCsKgbGlieGM6IGxpYnhjLSQo WEVOX1RBUkdFVF9BUkNIKS9saWJ4ZW5jdHJsLmEgbGlieGMtJChYRU5fVEFSR0VUX0FSQ0gpL2xp Ynhlbmd1ZXN0LmEKLWxpYnhjLSQoWEVOX1RBUkdFVF9BUkNIKS9saWJ4ZW5jdHJsLmE6IGxpYnhl bnRvb2xsb2cgY3Jvc3MtemxpYgorbGlieGMtJChYRU5fVEFSR0VUX0FSQ0gpL2xpYnhlbmN0cmwu YTogY3Jvc3MtemxpYgrCoAkkKE1BS0UpIC1DICQoWEVOX1JPT1QpL3Rvb2xzL2luY2x1ZGUKwqAJ JChNQUtFKSBERVNURElSPSAtQyAkKE1JTklfT1MpIGxpbmtzCsKgCUNQUEZMQUdTPSIkKFRBUkdF VF9DUFBGTEFHUykiIENGTEFHUz0iJChUQVJHRVRfQ0ZMQUdTKSIgJChNQUtFKSBERVNURElSPSBD T05GSUdfTElCWENfTUlOSU9TPXkgLUMgbGlieGMtJChYRU5fVEFSR0VUX0FSQ0gpCkBAIC01MzEs MTEgKzUxNSw2IEBAIGNsZWFuOgrCoAkkKE1BS0UpIC1DIHZ0cG1tZ3IgY2xlYW4KwqAJcm0gLWZy IGdydWItJChYRU5fVEFSR0VUX0FSQ0gpCsKgCXJtIC1mICQoU1RVQkRPTVBBVEgpCi0JWyAhIC1l IGxpYnMtJChYRU5fVEFSR0VUX0FSQ0gpL3Rvb2xsb2cvTWFrZWZpbGUgXSB8fCAkKE1BS0UpIERF U1RESVI9IC1DIGxpYnMtJChYRU5fVEFSR0VUX0FSQ0gpL3Rvb2xsb2cgY2xlYW4KLQlbICEgLWUg bGlicy0kKFhFTl9UQVJHRVRfQVJDSCkvZXZ0Y2huL01ha2VmaWxlIF0gfHwgJChNQUtFKSBERVNU RElSPSAtQyBsaWJzLSQoWEVOX1RBUkdFVF9BUkNIKS9ldnRjaG4gY2xlYW4KLQlbICEgLWUgbGli cy0kKFhFTl9UQVJHRVRfQVJDSCkvZ250dGFiL01ha2VmaWxlIF0gfHwgJChNQUtFKSBERVNURElS PSAtQyBsaWJzLSQoWEVOX1RBUkdFVF9BUkNIKS9nbnR0YWIgY2xlYW4KLQlbICEgLWUgbGlicy0k KFhFTl9UQVJHRVRfQVJDSCkvY2FsbC9NYWtlZmlsZSBdIHx8ICQoTUFLRSkgREVTVERJUj0gLUMg bGlicy0kKFhFTl9UQVJHRVRfQVJDSCkvY2FsbCBjbGVhbgotCVsgISAtZSBsaWJzLSQoWEVOX1RB UkdFVF9BUkNIKS9mb3JlaWdubWVtb3J5L01ha2VmaWxlIF0gfHwgJChNQUtFKSBERVNURElSPSAt QyBsaWJzLSQoWEVOX1RBUkdFVF9BUkNIKS9mb3JlaWdubWVtb3J5IGNsZWFuCsKgCVsgISAtZSBs aWJ4Yy0kKFhFTl9UQVJHRVRfQVJDSCkvTWFrZWZpbGUgXSB8fCAkKE1BS0UpIERFU1RESVI9IC1D IGxpYnhjLSQoWEVOX1RBUkdFVF9BUkNIKSBjbGVhbgrCoAktWyAhIC1kIGlvZW11IF0gfHwgJChN QUtFKSBERVNURElSPSAtQyBpb2VtdSBjbGVhbgrCoAktWyAhIC1kIHhlbnN0b3JlIF0gfHwgJChN QUtFKSBERVNURElSPSAtQyB4ZW5zdG9yZSBjbGVhbgpAQCAtNTQ2LDcgKzUyNSw2IEBAIGNyb3Nz Y2xlYW46IGNsZWFuCsKgCXJtIC1mciAkKENST1NTX1JPT1QpCsKgCXJtIC1mciBuZXdsaWItJChY RU5fVEFSR0VUX0FSQ0gpCsKgCXJtIC1mciB6bGliLSQoWEVOX1RBUkdFVF9BUkNIKSBwY2l1dGls cy0kKFhFTl9UQVJHRVRfQVJDSCkKLQlybSAtZnIgbGlicy0kKFhFTl9UQVJHRVRfQVJDSCkKwqAJ cm0gLWZyIGxpYnhjLSQoWEVOX1RBUkdFVF9BUkNIKSBpb2VtdSB4ZW5zdG9yZQrCoAlybSAtZnIg Z21wLSQoWEVOX1RBUkdFVF9BUkNIKQrCoAlybSAtZnIgcG9sYXJzc2wtJChYRU5fVEFSR0VUX0FS Q0gpCmRpZmYgLS1naXQgYS9zdHViZG9tL2dydWIvTWFrZWZpbGUgYi9zdHViZG9tL2dydWIvTWFr ZWZpbGUKaW5kZXggMjZkZmY0NS4uOTM0Y2M0YyAxMDA2NDQKLS0tIGEvc3R1YmRvbS9ncnViL01h a2VmaWxlCisrKyBiL3N0dWJkb20vZ3J1Yi9NYWtlZmlsZQpAQCAtNSw3ICs1LDYgQEAgdnBhdGgg JS5jIC4uL2dydWItdXBzdHJlYW0KwqAKwqBCT09UPSQoT0JKX0RJUikvYm9vdC0kKFhFTl9UQVJH RVRfQVJDSCkubwrCoAotREVGX0NQUEZMQUdTICs9IC1JJChYRU5fUk9PVCkvdG9vbHMvbGlicy90 b29sbG9nL2luY2x1ZGUKwqBERUZfQ1BQRkxBR1MgKz0gLUkkKFhFTl9ST09UKS90b29scy9saWJ4 Yy9pbmNsdWRlIC1JJChYRU5fUk9PVCkvdG9vbHMvaW5jbHVkZSAtSS4KwqBERUZfQ1BQRkxBR1Mg Kz0gLUkuLi9ncnViLXVwc3RyZWFtL3N0YWdlMQrCoERFRl9DUFBGTEFHUyArPSAtSS4uL2dydWIt dXBzdHJlYW0vc3RhZ2UyCmRpZmYgLS1naXQgYS90b29scy9NYWtlZmlsZSBiL3Rvb2xzL01ha2Vm aWxlCmluZGV4IDlmNzRhYzcuLjgyMGNhNDAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL01ha2VmaWxlCisr KyBiL3Rvb2xzL01ha2VmaWxlCkBAIC0zLDcgKzMsNiBAQCBpbmNsdWRlICQoWEVOX1JPT1QpL3Rv b2xzL1J1bGVzLm1rCsKgCsKgU1VCRElSUy15IDo9CsKgU1VCRElSUy15ICs9IGluY2x1ZGUKLVNV QkRJUlMteSArPSBsaWJzCsKgU1VCRElSUy15ICs9IGxpYnhjCsKgU1VCRElSUy0kKEZMQVNLX0VO QUJMRSkgKz0gZmxhc2sKwqBTVUJESVJTLXkgKz0geGVuc3RvcmUKQEAgLTI0OSwxNCArMjQ4LDEy IEBAIHN1YmRpci1hbGwtcWVtdS14ZW4tZGlyOiBxZW11LXhlbi1kaXItZmluZArCoAkJLS1pbmNs dWRlZGlyPSQoTElCRVhFQ19JTkMpIFwKwqAJCS0tc291cmNlLXBhdGg9JCRzb3VyY2UgXArCoAkJ LS1leHRyYS1jZmxhZ3M9Ii1JJChYRU5fUk9PVCkvdG9vbHMvaW5jbHVkZSBcCi0JCS1JJChYRU5f Uk9PVCkvdG9vbHMvbGlicy90b29sbG9nL2luY2x1ZGUgXArCoAkJLUkkKFhFTl9ST09UKS90b29s cy9saWJ4Yy9pbmNsdWRlIFwKwqAJCS1JJChYRU5fUk9PVCkvdG9vbHMveGVuc3RvcmUvaW5jbHVk ZSBcCsKgCQktSSQoWEVOX1JPT1QpL3Rvb2xzL3hlbnN0b3JlL2NvbXBhdC9pbmNsdWRlIFwKwqAJ CSQoRVhUUkFfQ0ZMQUdTX1FFTVVfWEVOKSIgXArCoAkJLS1leHRyYS1sZGZsYWdzPSItTCQoWEVO X1JPT1QpL3Rvb2xzL2xpYnhjIFwKwqAJCS1MJChYRU5fUk9PVCkvdG9vbHMveGVuc3RvcmUgXAot CQktV2wsLXJwYXRoLWxpbms9JChYRU5fUk9PVCkvdG9vbHMvbGlicy90b29sbG9nIFwKwqAJCSQo UUVNVV9VUFNUUkVBTV9SUEFUSCkiIFwKwqAJCS0tYmluZGlyPSQoTElCRVhFQ19CSU4pIFwKwqAJ CS0tZGF0YWRpcj0kKFNIQVJFRElSKS9xZW11LXhlbiBcCmRpZmYgLS1naXQgYS90b29scy9SdWxl cy5tayBiL3Rvb2xzL1J1bGVzLm1rCmluZGV4IDA2NTJlNGIuLjM3YjBhYWYgMTAwNjQ0Ci0tLSBh L3Rvb2xzL1J1bGVzLm1rCisrKyBiL3Rvb2xzL1J1bGVzLm1rCkBAIC0xMCw3ICsxMCw2IEBAIGV4 cG9ydCBfSU5TVEFMTCA6PSAkKElOU1RBTEwpCsKgSU5TVEFMTCA9ICQoWEVOX1JPT1QpL3Rvb2xz L2Nyb3NzLWluc3RhbGwKwqAKwqBYRU5fSU5DTFVERcKgwqDCoMKgwqDCoMKgwqA9ICQoWEVOX1JP T1QpL3Rvb2xzL2luY2x1ZGUKLVhFTl9MSUJYRU5UT09MTE9HwqDCoD0gJChYRU5fUk9PVCkvdG9v bHMvbGlicy90b29sbG9nCsKgWEVOX0xJQlhDwqDCoMKgwqDCoMKgwqDCoMKgwqA9ICQoWEVOX1JP T1QpL3Rvb2xzL2xpYnhjCsKgWEVOX1hFTkxJR0hUwqDCoMKgwqDCoMKgwqA9ICQoWEVOX1JPT1Qp L3Rvb2xzL2xpYnhsCsKgWEVOX1hFTlNUT1JFwqDCoMKgwqDCoMKgwqA9ICQoWEVOX1JPT1QpL3Rv b2xzL3hlbnN0b3JlCkBAIC03NywxNSArNzYsMTAgQEAgZW5kaWYKwqAjIENvbnN1bWVycyBvZiBs aWJmb28gc2hvdWxkIG5vdCBkaXJlY3RseSB1c2UgJChTSERFUFNfbGliZm9vKSBvcgrCoCMgJChT SExJQl9saWJmb28pCsKgCi1DRkxBR1NfbGlieGVudG9vbGxvZyA9IC1JJChYRU5fTElCWEVOVE9P TExPRykvaW5jbHVkZSAkKENGTEFHU194ZW5pbmNsdWRlKQotU0hERVBTX2xpYnhlbnRvb2xsb2cg PQotTERMSUJTX2xpYnhlbnRvb2xsb2cgPSAkKFhFTl9MSUJYRU5UT09MTE9HKS9saWJ4ZW50b29s bG9nJChsaWJleHRlbnNpb24pCi1TSExJQl9saWJ4ZW50b29sbG9nwqDCoD0gLVdsLC1ycGF0aC1s aW5rPSQoWEVOX0xJQlhFTlRPT0xMT0cpCi0KLUNGTEFHU19saWJ4ZW5jdHJsID0gLUkkKFhFTl9M SUJYQykvaW5jbHVkZSAkKENGTEFHU19saWJ4ZW50b29sbG9nKSAkKENGTEFHU194ZW5pbmNsdWRl KQotU0hERVBTX2xpYnhlbmN0cmwgPSAkKFNITElCX2xpYnhlbnRvb2xsb2cpCi1MRExJQlNfbGli eGVuY3RybCA9ICQoU0hERVBTX2xpYnhlbmN0cmwpICQoWEVOX0xJQlhDKS9saWJ4ZW5jdHJsJChs aWJleHRlbnNpb24pCi1TSExJQl9saWJ4ZW5jdHJswqDCoD0gJChTSERFUFNfbGlieGVuY3RybCkg LVdsLC1ycGF0aC1saW5rPSQoWEVOX0xJQlhDKQorQ0ZMQUdTX2xpYnhlbmN0cmwgPSAtSSQoWEVO X0xJQlhDKS9pbmNsdWRlICQoQ0ZMQUdTX3hlbmluY2x1ZGUpCitTSERFUFNfbGlieGVuY3RybCA9 CitMRExJQlNfbGlieGVuY3RybCA9ICQoWEVOX0xJQlhDKS9saWJ4ZW5jdHJsJChsaWJleHRlbnNp b24pCitTSExJQl9saWJ4ZW5jdHJswqDCoD0gLVdsLC1ycGF0aC1saW5rPSQoWEVOX0xJQlhDKQrC oArCoENGTEFHU19saWJ4ZW5ndWVzdCA9IC1JJChYRU5fTElCWEMpL2luY2x1ZGUgJChDRkxBR1Nf eGVuaW5jbHVkZSkKwqBTSERFUFNfbGlieGVuZ3Vlc3QgPQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGli cy9NYWtlZmlsZSBiL3Rvb2xzL2xpYnMvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDczYmU1MDAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbGlicy9NYWtlZmlsZQorKysgL2Rl di9udWxsCkBAIC0xLDcgKzAsMCBAQAotWEVOX1JPT1QgPSAkKENVUkRJUikvLi4vLi4KLWluY2x1 ZGUgJChYRU5fUk9PVCkvdG9vbHMvUnVsZXMubWsKLQotU1VCRElSUy15IDo9Ci1TVUJESVJTLXkg Kz0gdG9vbGxvZwotCi1hbGwgY2xlYW4gaW5zdGFsbCBkaXN0Y2xlYW46ICU6IHN1YmRpcnMtJQpk aWZmIC0tZ2l0IGEvdG9vbHMvbGlicy90b29sbG9nL01ha2VmaWxlIGIvdG9vbHMvbGlicy90b29s bG9nL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDEyNDAzLi4wMDAw MDAwCi0tLSBhL3Rvb2xzL2xpYnMvdG9vbGxvZy9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0x LDU5ICswLDAgQEAKLVhFTl9ST09UID0gJChDVVJESVIpLy4uLy4uLy4uCi1pbmNsdWRlICQoWEVO X1JPT1QpL3Rvb2xzL1J1bGVzLm1rCi0KLU1BSk9SCT0gMQotTUlOT1IJPSAwCi1TSExJQl9MREZM QUdTICs9IC1XbCwtLXZlcnNpb24tc2NyaXB0PWxpYnhlbnRvb2xsb2cubWFwCi0KLUNGTEFHUwkr PSAtV2Vycm9yIC1XbWlzc2luZy1wcm90b3R5cGVzCi1DRkxBR1MJKz0gLUkuL2luY2x1ZGUKLQot U1JDUy15CSs9IHh0bF9jb3JlLmMKLVNSQ1MteQkrPSB4dGxfbG9nZ2VyX3N0ZGlvLmMKLQotTElC X09CSlMgOj0gJChwYXRzdWJzdCAlLmMsJS5vLCQoU1JDUy15KSkKLVBJQ19PQkpTIDo9ICQocGF0 c3Vic3QgJS5jLCUub3BpYywkKFNSQ1MteSkpCi0KLUxJQiA6PSBsaWJ4ZW50b29sbG9nLmEKLWlm bmVxICgkKG5vc2hhcmVkbGlicykseSkKLUxJQiArPSBsaWJ4ZW50b29sbG9nLnNvCi1lbmRpZgot Ci0uUEhPTlk6IGFsbAotYWxsOiBidWlsZAotCi0uUEhPTlk6IGJ1aWxkCi1idWlsZDoKLQkkKE1B S0UpIGxpYnMKLQotLlBIT05ZOiBsaWJzCi1saWJzOiAkKExJQikKLQotbGlieGVudG9vbGxvZy5h OiAkKExJQl9PQkpTKQotCSQoQVIpIHJjICRAICReCi0KLWxpYnhlbnRvb2xsb2cuc286IGxpYnhl bnRvb2xsb2cuc28uJChNQUpPUikKLQkkKFNZTUxJTktfU0hMSUIpICQ8ICRACi1saWJ4ZW50b29s bG9nLnNvLiQoTUFKT1IpOiBsaWJ4ZW50b29sbG9nLnNvLiQoTUFKT1IpLiQoTUlOT1IpCi0JJChT WU1MSU5LX1NITElCKSAkPCAkQAotCi1saWJ4ZW50b29sbG9nLnNvLiQoTUFKT1IpLiQoTUlOT1Ip OiAkKFBJQ19PQkpTKSBsaWJ4ZW50b29sbG9nLm1hcAotCSQoQ0MpICQoTERGTEFHUykgLVdsLCQo U09OQU1FX0xERkxBRykgLVdsLGxpYnhlbnRvb2xsb2cuc28uJChNQUpPUikgJChTSExJQl9MREZM QUdTKSAtbyAkQCAkKFBJQ19PQkpTKSAkKEFQUEVORF9MREZMQUdTKQotCi0uUEhPTlk6IGluc3Rh bGwKLWluc3RhbGw6IGJ1aWxkCi0JJChJTlNUQUxMX0RJUikgJChERVNURElSKSQobGliZGlyKQot CSQoSU5TVEFMTF9ESVIpICQoREVTVERJUikkKGluY2x1ZGVkaXIpCi0JJChJTlNUQUxMX1NITElC KSBsaWJ4ZW50b29sbG9nLnNvLiQoTUFKT1IpLiQoTUlOT1IpICQoREVTVERJUikkKGxpYmRpcikK LQkkKElOU1RBTExfREFUQSkgbGlieGVudG9vbGxvZy5hICQoREVTVERJUikkKGxpYmRpcikKLQkk KFNZTUxJTktfU0hMSUIpIGxpYnhlbnRvb2xsb2cuc28uJChNQUpPUikuJChNSU5PUikgJChERVNU RElSKSQobGliZGlyKS9saWJ4ZW50b29sbG9nLnNvLiQoTUFKT1IpCi0JJChTWU1MSU5LX1NITElC KSBsaWJ4ZW50b29sbG9nLnNvLiQoTUFKT1IpICQoREVTVERJUikkKGxpYmRpcikvbGlieGVudG9v bGxvZy5zbwotCSQoSU5TVEFMTF9EQVRBKSBpbmNsdWRlL3hlbnRvb2xsb2cuaCAkKERFU1RESVIp JChpbmNsdWRlZGlyKQotCi0uUEhPTlk6IFRBR1MKLVRBR1M6Ci0JZXRhZ3MgLXQgKi5jICouaAot Ci0uUEhPTlk6IGNsZWFuCi1jbGVhbjoKLQlybSAtcmYgKi5ycG0gJChMSUIpICp+ICQoREVQUykg JChMSUJfT0JKUykgJChQSUNfT0JKUykKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnMvdG9vbGxvZy9p bmNsdWRlL3hlbnRvb2xsb2cuaCBiL3Rvb2xzL2xpYnMvdG9vbGxvZy9pbmNsdWRlL3hlbnRvb2xs b2cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODUzZTljNy4uMDAwMDAwMAotLS0g YS90b29scy9saWJzL3Rvb2xsb2cvaW5jbHVkZS94ZW50b29sbG9nLmgKKysrIC9kZXYvbnVsbApA QCAtMSwxMzYgKzAsMCBAQAotLyoKLSAqIHhlbnRvb2xsb2cuaAotICoKLSAqIENvcHlyaWdodCAo YykgMjAxMCBDaXRyaXgKLSAqIFBhcnQgb2YgYSBnZW5lcmljIGxvZ2dpbmcgaW50ZXJmYWNlIHVz ZWQgYnkgdmFyaW91cyBkb20wIHVzZXJsYW5kIGxpYnJhcmllcy4KLSAqCi0gKiBUaGlzIGxpYnJh cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OwotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LsKgwqBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs aWJyYXJ5OyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0gKi8K LQotI2lmbmRlZiBYRU5UT09MTE9HX0gKLSNkZWZpbmUgWEVOVE9PTExPR19ICi0KLSNpbmNsdWRl IDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotCi0KLS8qLS0tLS0tLS0tLSBjb21tb24g ZGVjbGFyYXRpb25zIGFuZCB0eXBlcyAtLS0tLS0tLS0tKi8KLQotdHlwZWRlZiBlbnVtIHhlbnRv b2xsb2dfbGV2ZWwgewotwqDCoMKgwqBYVExfTk9ORSwgLyogc2VudGluZWwgZXRjLCBuZXZlciB1 c2VkIGZvciBsb2dnaW5nICovCi3CoMKgwqDCoFhUTF9ERUJVRywKLcKgwqDCoMKgWFRMX1ZFUkJP U0UsCi3CoMKgwqDCoFhUTF9ERVRBSUwsCi3CoMKgwqDCoFhUTF9QUk9HUkVTUywgLyogYWxzbyB1 c2VkIGZvciAicHJvZ3Jlc3MiIG1lc3NhZ2VzICovCi3CoMKgwqDCoFhUTF9JTkZPLAotwqDCoMKg wqBYVExfTk9USUNFLAotwqDCoMKgwqBYVExfV0FSTiwKLcKgwqDCoMKgWFRMX0VSUk9SLAotwqDC oMKgwqBYVExfQ1JJVElDQUwsCi3CoMKgwqDCoFhUTF9OVU1fTEVWRUxTCi19IHhlbnRvb2xsb2df bGV2ZWw7Ci0KLXR5cGVkZWYgc3RydWN0IHhlbnRvb2xsb2dfbG9nZ2VyIHhlbnRvb2xsb2dfbG9n Z2VyOwotc3RydWN0IHhlbnRvb2xsb2dfbG9nZ2VyIHsKLcKgwqDCoMKgdm9pZCAoKnZtZXNzYWdl KShzdHJ1Y3QgeGVudG9vbGxvZ19sb2dnZXIgKmxvZ2dlciwKLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlbnRvb2xsb2dfbGV2ZWwgbGV2ZWwsCi3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnQgZXJybm92YWwgLyogb3IgLTEgKi8s Ci3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICpj b250ZXh0IC8qIGVnICJ4YyIsICJ4bCIsIG1heSBiZSAwICovLAotwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3QgY2hhciAqZm9ybWF0IC8qIHdpdGhvdXQgbGV2 ZWwsIGNvbnRleHQsIFxuICovLAotwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgdmFfbGlzdCBhbCkKLcKgwqDCoMKgwqDCoMKgwqDCoF9fYXR0cmlidXRlX18oKGZvcm1h dChwcmludGYsNSwwKSkpOwotwqDCoMKgwqB2b2lkICgqcHJvZ3Jlc3MpKHN0cnVjdCB4ZW50b29s bG9nX2xvZ2dlciAqbG9nZ2VyLAotwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgY29uc3QgY2hhciAqY29udGV4dCAvKiBzZWUgYWJvdmUgKi8sCi3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICpkb2luZ193aGF0IC8qIG5v IFxyLFxuICovLAotwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50 IHBlcmNlbnQsIHVuc2lnbmVkIGxvbmcgZG9uZSwgdW5zaWduZWQgbG9uZyB0b3RhbCkKLcKgwqDC oMKgwqDCoMKgwqDCoC8qIG51bGwgZnVuY3Rpb24gcG9pbnRlciBpcyBvay4KLcKgwqDCoMKgwqDC oMKgwqDCoMKgKiB3aWxsIGFsd2F5cyBiZSBjYWxsZWQgd2l0aCBkb25lPT0wIGZvciBlYWNoIG5l dwotwqDCoMKgwqDCoMKgwqDCoMKgwqAqIGNvbnRleHQvZG9pbmdfd2hhdCAqLzsKLcKgwqDCoMKg dm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCB4ZW50b29sbG9nX2xvZ2dlciAqbG9nZ2VyKTsKLcKgwqDC oMKgLyogZWFjaCBsb2dnZXIgY2FuIHB1dCBpdHMgbmVjZXNzYXJ5IGRhdGEgaGVyZSAqLwotfTsK LQotCi0vKi0tLS0tLS0tLS0gZmFjaWxpdGllcyBmb3IgY29uc3VtaW5nIGxvZyBtZXNzYWdlcyAt LS0tLS0tLS0tKi8KLQotI2RlZmluZSBYVExfU1RESU9TVFJFQU1fU0hPV19QSUTCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAwMDF1Ci0jZGVmaW5lIFhUTF9TVERJT1NUUkVBTV9TSE9XX0RBVEXCoMKg wqDCoMKgwqDCoMKgwqDCoMKgMDAydQotI2RlZmluZSBYVExfU1RESU9TVFJFQU1fSElERV9QUk9H UkVTU8KgwqDCoMKgwqDCoMKgMDA0dQotI2RlZmluZSBYVExfU1RESU9TVFJFQU1fUFJPR1JFU1Nf VVNFX0NSwqDCoMKgwqDCoDAxMHUgLyogZGVmYXVsdCBpcyB0byAqLwotI2RlZmluZSBYVExfU1RE SU9TVFJFQU1fUFJPR1JFU1NfTk9fQ1LCoMKgwqDCoMKgwqAwMjB1IC8qIHVzZSBcciB0byB0dHlz ICovCi0KLXR5cGVkZWYgc3RydWN0IHhlbnRvb2xsb2dfbG9nZ2VyX3N0ZGlvc3RyZWFtwqDCoHhl bnRvb2xsb2dfbG9nZ2VyX3N0ZGlvc3RyZWFtOwotCi14ZW50b29sbG9nX2xvZ2dlcl9zdGRpb3N0 cmVhbSAqeHRsX2NyZWF0ZWxvZ2dlcl9zdGRpb3N0cmVhbQotwqDCoMKgwqDCoMKgwqDCoChGSUxF ICpmLCB4ZW50b29sbG9nX2xldmVsIG1pbl9sZXZlbCwgdW5zaWduZWQgZmxhZ3MpOwotwqDCoMKg wqAvKiBtYXkgcmV0dXJuIDAgaWYgbWFsbG9jIGZhaWxzLCBpbiB3aGljaCBjYXNlIGVycm9yIHdh cyBsb2dnZWQgKi8KLcKgwqDCoMKgLyogZGVzdHJveSBvbiB0aGlzIGxvZ2dlciBkb2VzIG5vdCBj bG9zZSB0aGUgZmlsZSAqLwotCi12b2lkIHh0bF9zdGRpb3N0cmVhbV9zZXRfbWlubGV2ZWwoeGVu dG9vbGxvZ19sb2dnZXJfc3RkaW9zdHJlYW0qLAotwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZW50b29sbG9nX2xldmVs IG1pbl9sZXZlbCk7Ci12b2lkIHh0bF9zdGRpb3N0cmVhbV9hZGp1c3RfZmxhZ3MoeGVudG9vbGxv Z19sb2dnZXJfc3RkaW9zdHJlYW0qLAotwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBzZXRfZmxhZ3MsIHVu c2lnbmVkIGNsZWFyX2ZsYWdzKTsKLcKgwqAvKiBpZiBzZXRfZmxhZ3MgYW5kIGNsZWFyX2ZsYWdz IG92ZXJsYXAsIHNldF9mbGFncyB0YWtlcyBwcmVjZWRlbmNlICovCi0KLXZvaWQgeHRsX2xvZ2dl cl9kZXN0cm95KHN0cnVjdCB4ZW50b29sbG9nX2xvZ2dlciAqbG9nZ2VyIC8qIDAgaXMgb2sgKi8p OwotCi0KLS8qLS0tLS0tLS0tLSBmYWNpbGl0aWVzIGZvciBnZW5lcmF0aW5nIGxvZyBtZXNzYWdl cyAtLS0tLS0tLS0tKi8KLQotdm9pZCB4dGxfbG9ndihzdHJ1Y3QgeGVudG9vbGxvZ19sb2dnZXIg KmxvZ2dlciwKLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZW50b29sbG9nX2xldmVsIGxl dmVsLAotwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCBlcnJub3ZhbCAvKiBvciAtMSAq LywKLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICpjb250ZXh0IC8qIGVn ICJ4YyIsICJ4ZW5zdG9yZSIsICJ4bCIsIG1heSBiZSAwICovLAotwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGNvbnN0IGNoYXIgKmZvcm1hdCAvKiBkb2VzIG5vdCBjb250YWluIFxuICovLAot wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhX2xpc3QpIF9fYXR0cmlidXRlX18oKGZvcm1h dChwcmludGYsNSwwKSkpOwotCi12b2lkIHh0bF9sb2coc3RydWN0IHhlbnRvb2xsb2dfbG9nZ2Vy ICpsb2dnZXIsCi3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlbnRvb2xsb2dfbGV2ZWwgbGV2 ZWwsCi3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCBlcnJub3ZhbCAvKiBvciAtMSAqLywK LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3QgY2hhciAqY29udGV4dCAvKiBlZyAieGMi LCAieGVuc3RvcmUiLCAieGwiICovLAotwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBj aGFyICpmb3JtYXQgLyogZG9lcyBub3QgY29udGFpbiBcbiAqLywKLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLDUsNikpKTsKLQotdm9p ZCB4dGxfcHJvZ3Jlc3Moc3RydWN0IHhlbnRvb2xsb2dfbG9nZ2VyICpsb2dnZXIsCi3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICpjb250ZXh0IC8qIHNlZSBh Ym92ZSwgbWF5IGJlIDAgKi8sCi3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBj b25zdCBjaGFyICpkb2luZ193aGF0LAotwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgdW5zaWduZWQgbG9uZyBkb25lLCB1bnNpZ25lZCBsb25nIHRvdGFsKTsKLQotCi0vKi0tLS0t LS0tLS0gZmFjaWxpdGllcyBmb3IgZGVmaW5pbmcgbG9nIG1lc3NhZ2UgY29uc3VtZXJzIC0tLS0t LS0tLS0qLwotCi1jb25zdCBjaGFyICp4dGxfbGV2ZWxfdG9fc3RyaW5nKHhlbnRvb2xsb2dfbGV2 ZWwpOyAvKiBuZXZlciBmYWlscyAqLwotCi0KLSNkZWZpbmUgWFRMX05FV19MT0dHRVIoTE9HR0VS LGJ1ZmZlcikgKHvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgXAotwqDCoMKgwqB4ZW50b29sbG9nX2xvZ2dlcl8jI0xPR0dFUiAq bmV3X2NvbnN1bWVyO8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoFwKLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKLcKgwqDCoMKgKGJ1 ZmZlcikudnRhYmxlLnZtZXNzYWdlID0gTE9HR0VSIyNfdm1lc3NhZ2U7wqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKLcKgwqDCoMKgKGJ1ZmZlcikudnRhYmxl LnByb2dyZXNzID0gTE9HR0VSIyNfcHJvZ3Jlc3M7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoFwKLcKgwqDCoMKgKGJ1ZmZlcikudnRhYmxlLmRlc3Ryb3nCoMKg PSBMT0dHRVIjI19kZXN0cm95O8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoFwKLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKLcKgwqDCoMKgbmV3 X2NvbnN1bWVyID0gbWFsbG9jKHNpemVvZigqbmV3X2NvbnN1bWVyKSk7wqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKLcKgwqDCoMKgaWYgKCFuZXdfY29uc3Vt ZXIpIHvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCi3CoMKgwqDCoMKg wqDCoMKgeHRsX2xvZygoeGVudG9vbGxvZ19sb2dnZXIqKSZidWZmZXIswqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCi3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoFhUTF9DUklUSUNBTCwgZXJybm8sICJ4dGwiLMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCi3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBu ZXcgbWVzc2FnZSBsb2dnZXIiKTvCoMKgwqDCoFwKLcKgwqDCoMKgfSBlbHNlIHvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCi3C oMKgwqDCoMKgwqDCoMKgKm5ld19jb25zdW1lciA9IGJ1ZmZlcjvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgXAotwqDCoMKgwqB9wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCi3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBcCi3CoMKgwqDCoG5ld19jb25zdW1lcjvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKLX0pOwotCi0KLSNlbmRpZiAvKiBY RU5UT09MTE9HX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnMvdG9vbGxvZy9saWJ4ZW50b29s bG9nLm1hcCBiL3Rvb2xzL2xpYnMvdG9vbGxvZy9saWJ4ZW50b29sbG9nLm1hcApkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggYzE4M2NmNS4uMDAwMDAwMAotLS0gYS90b29scy9saWJzL3Rv b2xsb2cvbGlieGVudG9vbGxvZy5tYXAKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1W RVJTXzEuMCB7Ci0JZ2xvYmFsOgotCQl4dGxfY3JlYXRlbG9nZ2VyX3N0ZGlvc3RyZWFtOwotCQl4 dGxfbGV2ZWxfdG9fc3RyaW5nOwotCQl4dGxfbG9nOwotCQl4dGxfbG9nZ2VyX2Rlc3Ryb3k7Ci0J CXh0bF9sb2d2OwotCQl4dGxfcHJvZ3Jlc3M7Ci0JCXh0bF9zdGRpb3N0cmVhbV9hZGp1c3RfZmxh Z3M7Ci0JCXh0bF9zdGRpb3N0cmVhbV9zZXRfbWlubGV2ZWw7Ci0JbG9jYWw6ICo7IC8qIERvIG5v dCBleHBvc2UgYW55dGhpbmcgYnkgZGVmYXVsdCAqLwotfTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xp YnMvdG9vbGxvZy94dGxfY29yZS5jIGIvdG9vbHMvbGlicy90b29sbG9nL3h0bF9jb3JlLmMKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NzI0YTAuLjAwMDAwMDAKLS0tIGEvdG9vbHMv bGlicy90b29sbG9nL3h0bF9jb3JlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0v KgotICogeHRsX2NvcmUuYwotICoKLSAqIGNvcmUgY29kZSBpbmNsdWRpbmcgZnVuY3Rpb25zIGZv ciBnZW5lcmF0aW5nIGxvZyBtZXNzYWdlcwotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBDaXRy aXgKLSAqIFBhcnQgb2YgYSBnZW5lcmljIGxvZ2dpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdmFyaW91 cyBkb20wIHVzZXJsYW5kIGxpYnJhcmllcy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOwotICogdmVyc2lv biAyLjEgb2YgdGhlIExpY2Vuc2UuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLsKgwqBTZWUgdGhl IEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBJZiBu b3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0gKi8KLQotI2luY2x1ZGUg InhlbnRvb2xsb2cuaCIKLQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPGVycm5vLmg+ Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpsZXZlbF9zdHJpbmdz W1hUTF9OVU1fTEVWRUxTXT0gewotwqDCoMKgwqAiW0JVRzpYVExfTk9ORV0iLAotwqDCoMKgwqAi ZGVidWciLCAidmVyYm9zZSIsICJkZXRhaWwiLMKgwqAvKiBub3JtYWxseSBvZmYgYnkgZGVmYXVs dCAqLwotwqDCoMKgwqAicHJvZ3Jlc3MiLCAiaW5mbyIsICJub3RpY2UiLMKgwqAvKiBub3QgYSBw cm9ibGVtICovCi3CoMKgwqDCoCJ3YXJuaW5nIiwgImVycm9yIiwgImNyaXRpY2FsIiAvKiBwcm9i bGVtcyBhbmQgZXJyb3JzICovCi19OwotCi1jb25zdCBjaGFyICp4dGxfbGV2ZWxfdG9fc3RyaW5n KHhlbnRvb2xsb2dfbGV2ZWwgbGV2ZWwpIHsKLcKgwqDCoMKgYXNzZXJ0KGxldmVsID49IDAgJiYg bGV2ZWwgPCBYVExfTlVNX0xFVkVMUyk7Ci3CoMKgwqDCoHJldHVybiBsZXZlbF9zdHJpbmdzW2xl dmVsXTsKLX0KLQotdm9pZCB4dGxfbG9ndihzdHJ1Y3QgeGVudG9vbGxvZ19sb2dnZXIgKmxvZ2dl ciwKLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZW50b29sbG9nX2xldmVsIGxldmVsLAot wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCBlcnJub3ZhbCAvKiBvciAtMSAqLywKLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICpjb250ZXh0IC8qIGVnICJ4YyIs ICJ4ZW5zdG9yZSIsICJ4bCIgKi8sCi3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3Qg Y2hhciAqZm9ybWF0IC8qIGRvZXMgbm90IGNvbnRhaW4gXG4gKi8sCi3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgdmFfbGlzdCBhbCkgewotwqDCoMKgwqBpbnQgZXJybm9fc2F2ZSA9IGVycm5v OwotwqDCoMKgwqBhc3NlcnQobGV2ZWwgPiBYVExfTk9ORSAmJiBsZXZlbCA8IFhUTF9OVU1fTEVW RUxTKTsKLcKgwqDCoMKgbG9nZ2VyLT52bWVzc2FnZShsb2dnZXIsbGV2ZWwsZXJybm92YWwsY29u dGV4dCxmb3JtYXQsYWwpOwotwqDCoMKgwqBlcnJubyA9IGVycm5vX3NhdmU7Ci19Ci0KLXZvaWQg eHRsX2xvZyhzdHJ1Y3QgeGVudG9vbGxvZ19sb2dnZXIgKmxvZ2dlciwKLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgeGVudG9vbGxvZ19sZXZlbCBsZXZlbCwKLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaW50IGVycm5vdmFsIC8qIG9yIC0xICovLAotwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBjb25zdCBjaGFyICpjb250ZXh0IC8qIGVnICJ4YyIsICJ4ZW5zdG9yZSIsICJ4bCIgKi8sCi3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnN0IGNoYXIgKmZvcm1hdCAvKiBkb2VzIG5vdCBj b250YWluIFxuICovLAotwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuLi4pIHsKLcKgwqDCoMKg dmFfbGlzdCBhbDsKLcKgwqDCoMKgdmFfc3RhcnQoYWwsZm9ybWF0KTsKLcKgwqDCoMKgeHRsX2xv Z3YobG9nZ2VyLGxldmVsLGVycm5vdmFsLGNvbnRleHQsZm9ybWF0LGFsKTsKLcKgwqDCoMKgdmFf ZW5kKGFsKTsKLX0KLQotdm9pZCB4dGxfcHJvZ3Jlc3Moc3RydWN0IHhlbnRvb2xsb2dfbG9nZ2Vy ICpsb2dnZXIsCi3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFy ICpjb250ZXh0LCBjb25zdCBjaGFyICpkb2luZ193aGF0LAotwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgdW5zaWduZWQgbG9uZyBkb25lLCB1bnNpZ25lZCBsb25nIHRvdGFsKSB7 Ci3CoMKgwqDCoGludCBwZXJjZW50ID0gMDsKLQotwqDCoMKgwqBpZiAoIWxvZ2dlci0+cHJvZ3Jl c3MpIHJldHVybjsKLQotwqDCoMKgwqBpZiAoIHRvdGFsICkKLcKgwqDCoMKgwqDCoMKgwqBwZXJj ZW50ID0gKHRvdGFsIDwgTE9OR19NQVgvMTAwKQotwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgPyAo ZG9uZSAqIDEwMCkgLyB0b3RhbAotwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgOiBkb25lIC8gKCh0 b3RhbCArIDk5KSAvIDEwMCk7Ci0KLcKgwqDCoMKgbG9nZ2VyLT5wcm9ncmVzcyhsb2dnZXIsIGNv bnRleHQsIGRvaW5nX3doYXQsIHBlcmNlbnQsIGRvbmUsIHRvdGFsKTsKLX0KLQotdm9pZCB4dGxf bG9nZ2VyX2Rlc3Ryb3koc3RydWN0IHhlbnRvb2xsb2dfbG9nZ2VyICpsb2dnZXIpIHsKLcKgwqDC oMKgaWYgKCFsb2dnZXIpIHJldHVybjsKLcKgwqDCoMKgbG9nZ2VyLT5kZXN0cm95KGxvZ2dlcik7 Ci19CmRpZmYgLS1naXQgYS90b29scy9saWJzL3Rvb2xsb2cveHRsX2xvZ2dlcl9zdGRpby5jIGIv dG9vbHMvbGlicy90b29sbG9nL3h0bF9sb2dnZXJfc3RkaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMGNkOTIwNi4uMDAwMDAwMAotLS0gYS90b29scy9saWJzL3Rvb2xsb2cveHRs X2xvZ2dlcl9zdGRpby5jCisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAKLS8qCi0gKiB4 dGxfbG9nZ2VyX3N0ZGlvLmMKLSAqCi0gKiBsb2cgbWVzc2FnZSBjb25zdW1lciB0aGF0IHdyaXRl cyB0byBzdGRpbwotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBDaXRyaXgKLSAqIFBhcnQgb2Yg YSBnZW5lcmljIGxvZ2dpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdmFyaW91cyBkb20wIHVzZXJsYW5k IGxpYnJhcmllcy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOwotICogdmVyc2lvbiAyLjEgb2YgdGhlIExp Y2Vuc2UuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLsKgwqBTZWUgdGhlIEdOVQotICogTGVzc2Vy IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj Ci0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0gKi8KLQotI2luY2x1ZGUgInhlbnRvb2xsb2cuaCIK LQotI2luY2x1ZGUgPHRpbWUuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdHJp bmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUg PHN0ZGJvb2wuaD4KLQotc3RydWN0IHhlbnRvb2xsb2dfbG9nZ2VyX3N0ZGlvc3RyZWFtIHsKLcKg wqDCoMKgeGVudG9vbGxvZ19sb2dnZXIgdnRhYmxlOwotwqDCoMKgwqBGSUxFICpmOwotwqDCoMKg wqB4ZW50b29sbG9nX2xldmVsIG1pbl9sZXZlbDsKLcKgwqDCoMKgdW5zaWduZWQgZmxhZ3M7Ci3C oMKgwqDCoGludCBwcm9ncmVzc19lcmFzZV9sZW4sIHByb2dyZXNzX2xhc3RfcGVyY2VudDsKLcKg wqDCoMKgYm9vbCBwcm9ncmVzc191c2VfY3I7Ci19OwotCi1zdGF0aWMgdm9pZCBwcm9ncmVzc19l cmFzZSh4ZW50b29sbG9nX2xvZ2dlcl9zdGRpb3N0cmVhbSAqbGcpIHsKLcKgwqDCoMKgaWYgKGxn LT5wcm9ncmVzc19lcmFzZV9sZW4pCi3CoMKgwqDCoMKgwqDCoMKgZnByaW50ZihsZy0+ZiwgIlxy JSpzXHIiLCBsZy0+cHJvZ3Jlc3NfZXJhc2VfbGVuLCAiIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0 ZGlvc3RyZWFtX3ZtZXNzYWdlKHhlbnRvb2xsb2dfbG9nZ2VyICpsb2dnZXJfaW4sCi3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB4ZW50b29sbG9nX2xldmVsIGxldmVsLAotwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50IGVycm5vdmFsLAotwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgY29uc3QgY2hhciAqY29udGV4dCwKLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnN0IGNoYXIgKmZvcm1hdCwKLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHZhX2xpc3QgYWwpIHsKLcKgwqDCoMKgeGVudG9vbGxvZ19sb2dnZXJfc3RkaW9zdHJl YW0gKmxnID0gKHZvaWQqKWxvZ2dlcl9pbjsKLQotwqDCoMKgwqBpZiAobGV2ZWwgPCBsZy0+bWlu X2xldmVsKQotwqDCoMKgwqDCoMKgwqDCoHJldHVybjsKLQotwqDCoMKgwqBwcm9ncmVzc19lcmFz ZShsZyk7Ci0KLcKgwqDCoMKgaWYgKGxnLT5mbGFncyAmIFhUTF9TVERJT1NUUkVBTV9TSE9XX0RB VEUpIHsKLcKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgdG0gbHRfYnVmOwotwqDCoMKgwqDCoMKgwqDC oHRpbWVfdCBub3cgPSB0aW1lKDApOwotwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCB0bSAqbHQ9IGxv Y2FsdGltZV9yKCZub3csICZsdF9idWYpOwotwqDCoMKgwqDCoMKgwqDCoGlmIChsdCAhPSBOVUxM KQotwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZnByaW50ZihsZy0+ZiwgIiUwNGQtJTAyZC0lMDJk ICUwMmQ6JTAyZDolMDJkICVzICIsCi3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgbHQtPnRtX3llYXIrMTkwMCwgbHQtPnRtX21vbisxLCBsdC0+dG1fbWRheSwKLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsdC0+dG1faG91ciwgbHQtPnRtX21p biwgbHQtPnRtX3NlYywKLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0 em5hbWVbISFsdC0+dG1faXNkc3RdKTsKLcKgwqDCoMKgwqDCoMKgwqBlbHNlCi3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBmcHJpbnRmKGxnLT5mLCAiW2xvY2FsdGltZV9yIGZhaWxlZDogJWRdICIs IGVycm5vKTsKLcKgwqDCoMKgfQotwqDCoMKgwqBpZiAobGctPmZsYWdzICYgWFRMX1NURElPU1RS RUFNX1NIT1dfUElEKQotwqDCoMKgwqDCoMKgwqDCoGZwcmludGYobGctPmYsICJbJWx1XSAiLCAo dW5zaWduZWQgbG9uZylnZXRwaWQoKSk7Ci0KLcKgwqDCoMKgaWYgKGNvbnRleHQpCi3CoMKgwqDC oMKgwqDCoMKgZnByaW50ZihsZy0+ZiwgIiVzOiAiLCBjb250ZXh0KTsKLQotwqDCoMKgwqBmcHJp bnRmKGxnLT5mLCAiJXM6ICIsIHh0bF9sZXZlbF90b19zdHJpbmcobGV2ZWwpKTsKLQotwqDCoMKg wqB2ZnByaW50ZihsZy0+ZiwgZm9ybWF0LCBhbCk7Ci0KLcKgwqDCoMKgaWYgKGVycm5vdmFsID49 IDApCi3CoMKgwqDCoMKgwqDCoMKgZnByaW50ZihsZy0+ZiwgIjogJXMiLCBzdHJlcnJvcihlcnJu b3ZhbCkpOwotCi3CoMKgwqDCoHB1dGMoJ1xuJywgbGctPmYpOwotwqDCoMKgwqBmZmx1c2gobGct PmYpOwotfQotCi1zdGF0aWMgdm9pZCBzdGRpb3N0cmVhbV9tZXNzYWdlKHN0cnVjdCB4ZW50b29s bG9nX2xvZ2dlciAqbG9nZ2VyX2luLAotwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlbnRvb2xsb2dfbGV2ZWwgbGV2ZWwsCi3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgY29uc3QgY2hhciAqY29udGV4dCwKLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICpmb3JtYXQsIC4u LikKLXsKLcKgwqDCoMKgdmFfbGlzdCBhbDsKLcKgwqDCoMKgdmFfc3RhcnQoYWwsZm9ybWF0KTsK LcKgwqDCoMKgc3RkaW9zdHJlYW1fdm1lc3NhZ2UobG9nZ2VyX2luLCBsZXZlbCwgLTEsIGNvbnRl eHQsIGZvcm1hdCwgYWwpOwotwqDCoMKgwqB2YV9lbmQoYWwpOwotfQotCi1zdGF0aWMgdm9pZCBz dGRpb3N0cmVhbV9wcm9ncmVzcyhzdHJ1Y3QgeGVudG9vbGxvZ19sb2dnZXIgKmxvZ2dlcl9pbiwK LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGNvbnN0IGNoYXIgKmNvbnRleHQsCi3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICpkb2lu Z193aGF0LCBpbnQgcGVyY2VudCwKLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGxvbmcgZG9uZSwgdW5zaWdu ZWQgbG9uZyB0b3RhbCkgewotwqDCoMKgwqB4ZW50b29sbG9nX2xvZ2dlcl9zdGRpb3N0cmVhbSAq bGcgPSAodm9pZCopbG9nZ2VyX2luOwotwqDCoMKgwqBpbnQgbmV3cGVsLCBleHRyYV9lcmFzZTsK LcKgwqDCoMKgeGVudG9vbGxvZ19sZXZlbCB0aGlzX2xldmVsOwotCi3CoMKgwqDCoGlmIChsZy0+ ZmxhZ3MgJiBYVExfU1RESU9TVFJFQU1fSElERV9QUk9HUkVTUykKLcKgwqDCoMKgwqDCoMKgwqBy ZXR1cm47Ci0KLcKgwqDCoMKgaWYgKHBlcmNlbnQgPCBsZy0+cHJvZ3Jlc3NfbGFzdF9wZXJjZW50 KSB7Ci3CoMKgwqDCoMKgwqDCoMKgdGhpc19sZXZlbCA9IFhUTF9QUk9HUkVTUzsKLcKgwqDCoMKg fSBlbHNlIGlmIChwZXJjZW50ID09IGxnLT5wcm9ncmVzc19sYXN0X3BlcmNlbnQpIHsKLcKgwqDC oMKgwqDCoMKgwqByZXR1cm47Ci3CoMKgwqDCoH0gZWxzZSBpZiAocGVyY2VudCA8IGxnLT5wcm9n cmVzc19sYXN0X3BlcmNlbnQgKyA1KSB7Ci3CoMKgwqDCoMKgwqDCoMKgdGhpc19sZXZlbCA9IFhU TF9ERVRBSUw7Ci3CoMKgwqDCoH0gZWxzZSB7Ci3CoMKgwqDCoMKgwqDCoMKgdGhpc19sZXZlbCA9 IFhUTF9QUk9HUkVTUzsKLcKgwqDCoMKgfQotCi3CoMKgwqDCoGlmICh0aGlzX2xldmVsIDwgbGct Pm1pbl9sZXZlbCkKLcKgwqDCoMKgwqDCoMKgwqByZXR1cm47Ci0KLcKgwqDCoMKgbGctPnByb2dy ZXNzX2xhc3RfcGVyY2VudCA9IHBlcmNlbnQ7Ci0KLcKgwqDCoMKgaWYgKCFsZy0+cHJvZ3Jlc3Nf dXNlX2NyKSB7Ci3CoMKgwqDCoMKgwqDCoMKgc3RkaW9zdHJlYW1fbWVzc2FnZShsb2dnZXJfaW4s IHRoaXNfbGV2ZWwsIGNvbnRleHQsCi3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCIlczogJWx1LyVsdcKgwqAlM2QlJSIsCi3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRvaW5nX3doYXQs IGRvbmUsIHRvdGFsLCBwZXJjZW50KTsKLcKgwqDCoMKgwqDCoMKgwqByZXR1cm47Ci3CoMKgwqDC oH0KLQotwqDCoMKgwqBpZiAobGctPnByb2dyZXNzX2VyYXNlX2xlbikKLcKgwqDCoMKgwqDCoMKg wqBwdXRjKCdccicsIGxnLT5mKTsKLQotwqDCoMKgwqBuZXdwZWwgPSBmcHJpbnRmKGxnLT5mLCAi JXMlcyIgIiVzOiAlbHUvJWx1wqDCoCUzZCUlJXMiLAotwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgY29udGV4dD9jb250ZXh0OiIiLCBjb250ZXh0PyI6ICI6IiIsCi3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkb2luZ193aGF0LCBkb25l LCB0b3RhbCwgcGVyY2VudCwKLQkJwqDCoMKgwqDCoGRvbmUgPT0gdG90YWwgPyAiXG4iIDogIiIp OwotCi3CoMKgwqDCoGV4dHJhX2VyYXNlID0gbGctPnByb2dyZXNzX2VyYXNlX2xlbiAtIG5ld3Bl bDsKLcKgwqDCoMKgaWYgKGV4dHJhX2VyYXNlID4gMCkKLcKgwqDCoMKgwqDCoMKgwqBmcHJpbnRm KGxnLT5mLCAiJSpzXHIiLCBleHRyYV9lcmFzZSwgIiIpOwotCi3CoMKgwqDCoGxnLT5wcm9ncmVz c19lcmFzZV9sZW4gPSBuZXdwZWw7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0ZGlvc3RyZWFtX2Rlc3Ry b3koc3RydWN0IHhlbnRvb2xsb2dfbG9nZ2VyICpsb2dnZXJfaW4pIHsKLcKgwqDCoMKgeGVudG9v bGxvZ19sb2dnZXJfc3RkaW9zdHJlYW0gKmxnID0gKHZvaWQqKWxvZ2dlcl9pbjsKLcKgwqDCoMKg cHJvZ3Jlc3NfZXJhc2UobGcpOwotwqDCoMKgwqBmcmVlKGxnKTsKLX0KLQotdm9pZCB4dGxfc3Rk aW9zdHJlYW1fc2V0X21pbmxldmVsKHhlbnRvb2xsb2dfbG9nZ2VyX3N0ZGlvc3RyZWFtICpsZywK LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgeGVudG9vbGxvZ19sZXZlbCBtaW5fbGV2ZWwpIHsKLcKgwqDCoMKgbGctPm1p bl9sZXZlbCA9IG1pbl9sZXZlbDsKLX0KLQotdm9pZCB4dGxfc3RkaW9zdHJlYW1fYWRqdXN0X2Zs YWdzKHhlbnRvb2xsb2dfbG9nZ2VyX3N0ZGlvc3RyZWFtICpsZywKLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdW5zaWdu ZWQgc2V0X2ZsYWdzLCB1bnNpZ25lZCBjbGVhcl9mbGFncykgewotwqDCoMKgwqB1bnNpZ25lZCBu ZXdfZmxhZ3MgPSAobGctPmZsYWdzICYgfmNsZWFyX2ZsYWdzKSB8IHNldF9mbGFnczsKLcKgwqDC oMKgaWYgKG5ld19mbGFncyAmIFhUTF9TVERJT1NUUkVBTV9ISURFX1BST0dSRVNTKQotwqDCoMKg wqDCoMKgwqDCoHByb2dyZXNzX2VyYXNlKGxnKTsKLcKgwqDCoMKgbGctPmZsYWdzID0gbmV3X2Zs YWdzOwotfQotCi14ZW50b29sbG9nX2xvZ2dlcl9zdGRpb3N0cmVhbSAqeHRsX2NyZWF0ZWxvZ2dl cl9zdGRpb3N0cmVhbQotwqDCoMKgwqDCoMKgwqDCoChGSUxFICpmLCB4ZW50b29sbG9nX2xldmVs IG1pbl9sZXZlbCwgdW5zaWduZWQgZmxhZ3MpIHsKLcKgwqDCoMKgeGVudG9vbGxvZ19sb2dnZXJf c3RkaW9zdHJlYW0gbmV3bG9nZ2VyOwotCi3CoMKgwqDCoG5ld2xvZ2dlci5mID0gZjsKLcKgwqDC oMKgbmV3bG9nZ2VyLm1pbl9sZXZlbCA9IG1pbl9sZXZlbDsKLcKgwqDCoMKgbmV3bG9nZ2VyLmZs YWdzID0gZmxhZ3M7Ci0KLcKgwqDCoMKgc3dpdGNoIChmbGFncyAmIChYVExfU1RESU9TVFJFQU1f UFJPR1JFU1NfVVNFX0NSIHwKLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoFhUTF9TVERJT1NUUkVBTV9QUk9HUkVTU19OT19DUikpIHsKLcKgwqDCoMKgY2FzZSBYVExf U1RESU9TVFJFQU1fUFJPR1JFU1NfVVNFX0NSOiBuZXdsb2dnZXIucHJvZ3Jlc3NfdXNlX2NyID0g MTsgYnJlYWs7Ci3CoMKgwqDCoGNhc2UgWFRMX1NURElPU1RSRUFNX1BST0dSRVNTX05PX0NSOsKg wqBuZXdsb2dnZXIucHJvZ3Jlc3NfdXNlX2NyID0gMDsgYnJlYWs7Ci3CoMKgwqDCoGNhc2UgMDoK LcKgwqDCoMKgwqDCoMKgwqBuZXdsb2dnZXIucHJvZ3Jlc3NfdXNlX2NyID0gaXNhdHR5KGZpbGVu byhuZXdsb2dnZXIuZikpID4gMDsKLcKgwqDCoMKgwqDCoMKgwqBicmVhazsKLcKgwqDCoMKgZGVm YXVsdDoKLcKgwqDCoMKgwqDCoMKgwqBlcnJubyA9IEVJTlZBTDsKLcKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gMDsKLcKgwqDCoMKgfQotCi3CoMKgwqDCoGlmIChuZXdsb2dnZXIuZmxhZ3MgJiBYVExf U1RESU9TVFJFQU1fU0hPV19EQVRFKSB0enNldCgpOwotCi3CoMKgwqDCoG5ld2xvZ2dlci5wcm9n cmVzc19lcmFzZV9sZW4gPSAwOwotwqDCoMKgwqBuZXdsb2dnZXIucHJvZ3Jlc3NfbGFzdF9wZXJj ZW50ID0gMDsKLQotwqDCoMKgwqByZXR1cm4gWFRMX05FV19MT0dHRVIoc3RkaW9zdHJlYW0sIG5l d2xvZ2dlcik7Ci19CmRpZmYgLS1naXQgYS90b29scy9saWJ4Yy9NYWtlZmlsZSBiL3Rvb2xzL2xp YnhjL01ha2VmaWxlCmluZGV4IDk0MDcwOGYuLjgxOGYyZTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xp YnhjL01ha2VmaWxlCisrKyBiL3Rvb2xzL2xpYnhjL01ha2VmaWxlCkBAIC0zOSw2ICszOSw4IEBA IENUUkxfU1JDUy15wqDCoMKgwqDCoMKgwqArPSB4Y19tZW1zaHIuYwrCoENUUkxfU1JDUy15wqDC oMKgwqDCoMKgwqArPSB4Y19oY2FsbF9idWYuYwrCoENUUkxfU1JDUy15wqDCoMKgwqDCoMKgwqAr PSB4Y19mb3JlaWduX21lbW9yeS5jCsKgQ1RSTF9TUkNTLXnCoMKgwqDCoMKgwqDCoCs9IHhjX2tl eGVjLmMKK0NUUkxfU1JDUy15wqDCoMKgwqDCoMKgwqArPSB4dGxfY29yZS5jCitDVFJMX1NSQ1Mt ecKgwqDCoMKgwqDCoMKgKz0geHRsX2xvZ2dlcl9zdGRpby5jCsKgQ1RSTF9TUkNTLXnCoMKgwqDC oMKgwqDCoCs9IHhjX3Jlc291cmNlLmMKwqBDVFJMX1NSQ1MtJChDT05GSUdfWDg2KSArPSB4Y19w c3IuYwrCoENUUkxfU1JDUy0kKENPTkZJR19YODYpICs9IHhjX3BhZ2V0YWIuYwpAQCAtMTEwLDcg KzExMiw2IEBAIENGTEFHU8KgwqDCoCs9IC1JLiAtSS4vaW5jbHVkZSAkKENGTEFHU194ZW5pbmNs dWRlKQrCoENGTEFHUy0kKENPTkZJR19MaW51eCkgKz0gLURfR05VX1NPVVJDRQrCoArCoENGTEFH UwkrPSAkKFBUSFJFQURfQ0ZMQUdTKQotQ0ZMQUdTCSs9ICQoQ0ZMQUdTX2xpYnhlbnRvb2xsb2cp CsKgCsKgQ1RSTF9MSUJfT0JKUyA6PSAkKHBhdHN1YnN0ICUuYywlLm8sJChDVFJMX1NSQ1MteSkp CsKgQ1RSTF9QSUNfT0JKUyA6PSAkKHBhdHN1YnN0ICUuYywlLm9waWMsJChDVFJMX1NSQ1MteSkp CkBAIC0xNjQsNyArMTY1LDcgQEAgaW5zdGFsbDogYnVpbGQKwqAJJChJTlNUQUxMX0RBVEEpIGxp YnhlbmN0cmwuYSAkKERFU1RESVIpJChsaWJkaXIpCsKgCSQoU1lNTElOS19TSExJQikgbGlieGVu Y3RybC5zby4kKE1BSk9SKS4kKE1JTk9SKSAkKERFU1RESVIpJChsaWJkaXIpL2xpYnhlbmN0cmwu c28uJChNQUpPUikKwqAJJChTWU1MSU5LX1NITElCKSBsaWJ4ZW5jdHJsLnNvLiQoTUFKT1IpICQo REVTVERJUikkKGxpYmRpcikvbGlieGVuY3RybC5zbwotCSQoSU5TVEFMTF9EQVRBKSBpbmNsdWRl L3hlbmN0cmwuaCBpbmNsdWRlL3hlbmN0cmxvc2RlcC5oICQoREVTVERJUikkKGluY2x1ZGVkaXIp CisJJChJTlNUQUxMX0RBVEEpIGluY2x1ZGUveGVuY3RybC5oIGluY2x1ZGUveGVuY3RybG9zZGVw LmggaW5jbHVkZS94ZW50b29sbG9nLmggJChERVNURElSKSQoaW5jbHVkZWRpcikKwqAJJChJTlNU QUxMX1NITElCKSBsaWJ4ZW5ndWVzdC5zby4kKE1BSk9SKS4kKE1JTk9SKSAkKERFU1RESVIpJChs aWJkaXIpCsKgCSQoSU5TVEFMTF9EQVRBKSBsaWJ4ZW5ndWVzdC5hICQoREVTVERJUikkKGxpYmRp cikKwqAJJChTWU1MSU5LX1NITElCKSBsaWJ4ZW5ndWVzdC5zby4kKE1BSk9SKS4kKE1JTk9SKSAk KERFU1RESVIpJChsaWJkaXIpL2xpYnhlbmd1ZXN0LnNvLiQoTUFKT1IpCkBAIC0yMDcsNyArMjA4 LDcgQEAgbGlieGVuY3RybC5zby4kKE1BSk9SKTogbGlieGVuY3RybC5zby4kKE1BSk9SKS4kKE1J Tk9SKQrCoAkkKFNZTUxJTktfU0hMSUIpICQ8ICRACsKgCsKgbGlieGVuY3RybC5zby4kKE1BSk9S KS4kKE1JTk9SKTogJChDVFJMX1BJQ19PQkpTKQotCSQoQ0MpICQoTERGTEFHUykgJChQVEhSRUFE X0xERkxBR1MpIC1XbCwkKFNPTkFNRV9MREZMQUcpIC1XbCxsaWJ4ZW5jdHJsLnNvLiQoTUFKT1Ip ICQoU0hMSUJfTERGTEFHUykgLW8gJEAgJF4gJChMRExJQlNfbGlieGVudG9vbGxvZykgJChETE9Q RU5fTElCUykgJChQVEhSRUFEX0xJQlMpICQoQVBQRU5EX0xERkxBR1MpCisJJChDQykgJChMREZM QUdTKSAkKFBUSFJFQURfTERGTEFHUykgLVdsLCQoU09OQU1FX0xERkxBRykgLVdsLGxpYnhlbmN0 cmwuc28uJChNQUpPUikgJChTSExJQl9MREZMQUdTKSAtbyAkQCAkXiAkKERMT1BFTl9MSUJTKSAk KFBUSFJFQURfTElCUykgJChBUFBFTkRfTERGTEFHUykKwqAKwqAjIGxpYnhlbmd1ZXN0CsKgCmRp ZmYgLS1naXQgYS90b29scy9saWJ4Yy9pbmNsdWRlL3hlbnRvb2xsb2cuaCBiL3Rvb2xzL2xpYnhj L2luY2x1ZGUveGVudG9vbGxvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu Ljg1M2U5YzcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9saWJ4Yy9pbmNsdWRlL3hlbnRvb2xs b2cuaApAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIHhlbnRvb2xsb2cuaAorICoKKyAqIENvcHly aWdodCAoYykgMjAxMCBDaXRyaXgKKyAqIFBhcnQgb2YgYSBnZW5lcmljIGxvZ2dpbmcgaW50ZXJm YWNlIHVzZWQgYnkgdmFyaW91cyBkb20wIHVzZXJsYW5kIGxpYnJhcmllcy4KKyAqCisgKiBUaGlz IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOworICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBsaWJy YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLsKgwqBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGgg dGhpcyBsaWJyYXJ5OyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u CisgKi8KKworI2lmbmRlZiBYRU5UT09MTE9HX0gKKyNkZWZpbmUgWEVOVE9PTExPR19ICisKKyNp bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisKKy8qLS0tLS0tLS0tLSBj b21tb24gZGVjbGFyYXRpb25zIGFuZCB0eXBlcyAtLS0tLS0tLS0tKi8KKwordHlwZWRlZiBlbnVt IHhlbnRvb2xsb2dfbGV2ZWwgeworwqDCoMKgwqBYVExfTk9ORSwgLyogc2VudGluZWwgZXRjLCBu ZXZlciB1c2VkIGZvciBsb2dnaW5nICovCivCoMKgwqDCoFhUTF9ERUJVRywKK8KgwqDCoMKgWFRM X1ZFUkJPU0UsCivCoMKgwqDCoFhUTF9ERVRBSUwsCivCoMKgwqDCoFhUTF9QUk9HUkVTUywgLyog YWxzbyB1c2VkIGZvciAicHJvZ3Jlc3MiIG1lc3NhZ2VzICovCivCoMKgwqDCoFhUTF9JTkZPLAor wqDCoMKgwqBYVExfTk9USUNFLAorwqDCoMKgwqBYVExfV0FSTiwKK8KgwqDCoMKgWFRMX0VSUk9S LAorwqDCoMKgwqBYVExfQ1JJVElDQUwsCivCoMKgwqDCoFhUTF9OVU1fTEVWRUxTCit9IHhlbnRv b2xsb2dfbGV2ZWw7CisKK3R5cGVkZWYgc3RydWN0IHhlbnRvb2xsb2dfbG9nZ2VyIHhlbnRvb2xs b2dfbG9nZ2VyOworc3RydWN0IHhlbnRvb2xsb2dfbG9nZ2VyIHsKK8KgwqDCoMKgdm9pZCAoKnZt ZXNzYWdlKShzdHJ1Y3QgeGVudG9vbGxvZ19sb2dnZXIgKmxvZ2dlciwKK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlbnRvb2xsb2dfbGV2ZWwgbGV2ZWwsCivCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnQgZXJybm92YWwgLyogb3Ig LTEgKi8sCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBj aGFyICpjb250ZXh0IC8qIGVnICJ4YyIsICJ4bCIsIG1heSBiZSAwICovLAorwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3QgY2hhciAqZm9ybWF0IC8qIHdpdGhv dXQgbGV2ZWwsIGNvbnRleHQsIFxuICovLAorwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgdmFfbGlzdCBhbCkKK8KgwqDCoMKgwqDCoMKgwqDCoF9fYXR0cmlidXRlX18o KGZvcm1hdChwcmludGYsNSwwKSkpOworwqDCoMKgwqB2b2lkICgqcHJvZ3Jlc3MpKHN0cnVjdCB4 ZW50b29sbG9nX2xvZ2dlciAqbG9nZ2VyLAorwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgY29uc3QgY2hhciAqY29udGV4dCAvKiBzZWUgYWJvdmUgKi8sCivCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICpkb2luZ193aGF0 IC8qIG5vIFxyLFxuICovLAorwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgaW50IHBlcmNlbnQsIHVuc2lnbmVkIGxvbmcgZG9uZSwgdW5zaWduZWQgbG9uZyB0b3RhbCkK K8KgwqDCoMKgwqDCoMKgwqDCoC8qIG51bGwgZnVuY3Rpb24gcG9pbnRlciBpcyBvay4KK8KgwqDC oMKgwqDCoMKgwqDCoMKgKiB3aWxsIGFsd2F5cyBiZSBjYWxsZWQgd2l0aCBkb25lPT0wIGZvciBl YWNoIG5ldworwqDCoMKgwqDCoMKgwqDCoMKgwqAqIGNvbnRleHQvZG9pbmdfd2hhdCAqLzsKK8Kg wqDCoMKgdm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCB4ZW50b29sbG9nX2xvZ2dlciAqbG9nZ2VyKTsK K8KgwqDCoMKgLyogZWFjaCBsb2dnZXIgY2FuIHB1dCBpdHMgbmVjZXNzYXJ5IGRhdGEgaGVyZSAq LworfTsKKworCisvKi0tLS0tLS0tLS0gZmFjaWxpdGllcyBmb3IgY29uc3VtaW5nIGxvZyBtZXNz YWdlcyAtLS0tLS0tLS0tKi8KKworI2RlZmluZSBYVExfU1RESU9TVFJFQU1fU0hPV19QSUTCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAwMDF1CisjZGVmaW5lIFhUTF9TVERJT1NUUkVBTV9TSE9XX0RB VEXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMDAydQorI2RlZmluZSBYVExfU1RESU9TVFJFQU1fSElE RV9QUk9HUkVTU8KgwqDCoMKgwqDCoMKgMDA0dQorI2RlZmluZSBYVExfU1RESU9TVFJFQU1fUFJP R1JFU1NfVVNFX0NSwqDCoMKgwqDCoDAxMHUgLyogZGVmYXVsdCBpcyB0byAqLworI2RlZmluZSBY VExfU1RESU9TVFJFQU1fUFJPR1JFU1NfTk9fQ1LCoMKgwqDCoMKgwqAwMjB1IC8qIHVzZSBcciB0 byB0dHlzICovCisKK3R5cGVkZWYgc3RydWN0IHhlbnRvb2xsb2dfbG9nZ2VyX3N0ZGlvc3RyZWFt wqDCoHhlbnRvb2xsb2dfbG9nZ2VyX3N0ZGlvc3RyZWFtOworCit4ZW50b29sbG9nX2xvZ2dlcl9z dGRpb3N0cmVhbSAqeHRsX2NyZWF0ZWxvZ2dlcl9zdGRpb3N0cmVhbQorwqDCoMKgwqDCoMKgwqDC oChGSUxFICpmLCB4ZW50b29sbG9nX2xldmVsIG1pbl9sZXZlbCwgdW5zaWduZWQgZmxhZ3MpOwor wqDCoMKgwqAvKiBtYXkgcmV0dXJuIDAgaWYgbWFsbG9jIGZhaWxzLCBpbiB3aGljaCBjYXNlIGVy cm9yIHdhcyBsb2dnZWQgKi8KK8KgwqDCoMKgLyogZGVzdHJveSBvbiB0aGlzIGxvZ2dlciBkb2Vz IG5vdCBjbG9zZSB0aGUgZmlsZSAqLworCit2b2lkIHh0bF9zdGRpb3N0cmVhbV9zZXRfbWlubGV2 ZWwoeGVudG9vbGxvZ19sb2dnZXJfc3RkaW9zdHJlYW0qLAorwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZW50b29sbG9n X2xldmVsIG1pbl9sZXZlbCk7Cit2b2lkIHh0bF9zdGRpb3N0cmVhbV9hZGp1c3RfZmxhZ3MoeGVu dG9vbGxvZ19sb2dnZXJfc3RkaW9zdHJlYW0qLAorwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBzZXRfZmxh Z3MsIHVuc2lnbmVkIGNsZWFyX2ZsYWdzKTsKK8KgwqAvKiBpZiBzZXRfZmxhZ3MgYW5kIGNsZWFy X2ZsYWdzIG92ZXJsYXAsIHNldF9mbGFncyB0YWtlcyBwcmVjZWRlbmNlICovCisKK3ZvaWQgeHRs X2xvZ2dlcl9kZXN0cm95KHN0cnVjdCB4ZW50b29sbG9nX2xvZ2dlciAqbG9nZ2VyIC8qIDAgaXMg b2sgKi8pOworCisKKy8qLS0tLS0tLS0tLSBmYWNpbGl0aWVzIGZvciBnZW5lcmF0aW5nIGxvZyBt ZXNzYWdlcyAtLS0tLS0tLS0tKi8KKwordm9pZCB4dGxfbG9ndihzdHJ1Y3QgeGVudG9vbGxvZ19s b2dnZXIgKmxvZ2dlciwKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZW50b29sbG9nX2xl dmVsIGxldmVsLAorwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCBlcnJub3ZhbCAvKiBv ciAtMSAqLywKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICpjb250ZXh0 IC8qIGVnICJ4YyIsICJ4ZW5zdG9yZSIsICJ4bCIsIG1heSBiZSAwICovLAorwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGNvbnN0IGNoYXIgKmZvcm1hdCAvKiBkb2VzIG5vdCBjb250YWluIFxu ICovLAorwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhX2xpc3QpIF9fYXR0cmlidXRlX18o KGZvcm1hdChwcmludGYsNSwwKSkpOworCit2b2lkIHh0bF9sb2coc3RydWN0IHhlbnRvb2xsb2df bG9nZ2VyICpsb2dnZXIsCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlbnRvb2xsb2dfbGV2 ZWwgbGV2ZWwsCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCBlcnJub3ZhbCAvKiBvciAt MSAqLywKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3QgY2hhciAqY29udGV4dCAvKiBl ZyAieGMiLCAieGVuc3RvcmUiLCAieGwiICovLAorwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBj b25zdCBjaGFyICpmb3JtYXQgLyogZG9lcyBub3QgY29udGFpbiBcbiAqLywKK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLDUsNikpKTsK Kwordm9pZCB4dGxfcHJvZ3Jlc3Moc3RydWN0IHhlbnRvb2xsb2dfbG9nZ2VyICpsb2dnZXIsCivC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICpjb250ZXh0IC8q IHNlZSBhYm92ZSwgbWF5IGJlIDAgKi8sCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBjb25zdCBjaGFyICpkb2luZ193aGF0LAorwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgdW5zaWduZWQgbG9uZyBkb25lLCB1bnNpZ25lZCBsb25nIHRvdGFsKTsKKworCisv Ki0tLS0tLS0tLS0gZmFjaWxpdGllcyBmb3IgZGVmaW5pbmcgbG9nIG1lc3NhZ2UgY29uc3VtZXJz IC0tLS0tLS0tLS0qLworCitjb25zdCBjaGFyICp4dGxfbGV2ZWxfdG9fc3RyaW5nKHhlbnRvb2xs b2dfbGV2ZWwpOyAvKiBuZXZlciBmYWlscyAqLworCisKKyNkZWZpbmUgWFRMX05FV19MT0dHRVIo TE9HR0VSLGJ1ZmZlcikgKHvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAorwqDCoMKgwqB4ZW50b29sbG9nX2xvZ2dlcl8jI0xP R0dFUiAqbmV3X2NvbnN1bWVyO8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoFwKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKK8KgwqDC oMKgKGJ1ZmZlcikudnRhYmxlLnZtZXNzYWdlID0gTE9HR0VSIyNfdm1lc3NhZ2U7wqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKK8KgwqDCoMKgKGJ1ZmZlciku dnRhYmxlLnByb2dyZXNzID0gTE9HR0VSIyNfcHJvZ3Jlc3M7wqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKK8KgwqDCoMKgKGJ1ZmZlcikudnRhYmxlLmRlc3Ry b3nCoMKgPSBMT0dHRVIjI19kZXN0cm95O8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoFwKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKK8KgwqDC oMKgbmV3X2NvbnN1bWVyID0gbWFsbG9jKHNpemVvZigqbmV3X2NvbnN1bWVyKSk7wqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKK8KgwqDCoMKgaWYgKCFuZXdf Y29uc3VtZXIpIHvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCivCoMKg wqDCoMKgwqDCoMKgeHRsX2xvZygoeGVudG9vbGxvZ19sb2dnZXIqKSZidWZmZXIswqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCivCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFhUTF9DUklUSUNBTCwgZXJybm8sICJ4dGwiLMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCivC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5 IGZvciBuZXcgbWVzc2FnZSBsb2dnZXIiKTvCoMKgwqDCoFwKK8KgwqDCoMKgfSBlbHNlIHvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBcCivCoMKgwqDCoMKgwqDCoMKgKm5ld19jb25zdW1lciA9IGJ1ZmZlcjvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgXAorwqDCoMKgwqB9wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCivCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBcCivCoMKgwqDCoG5ld19jb25zdW1lcjvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKK30pOworCisKKyNlbmRp ZiAvKiBYRU5UT09MTE9HX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhjL3h0bF9jb3JlLmMg Yi90b29scy9saWJ4Yy94dGxfY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmM0NzI0YTAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9saWJ4Yy94dGxfY29yZS5jCkBA IC0wLDAgKzEsODMgQEAKKy8qCisgKiB4dGxfY29yZS5jCisgKgorICogY29yZSBjb2RlIGluY2x1 ZGluZyBmdW5jdGlvbnMgZm9yIGdlbmVyYXRpbmcgbG9nIG1lc3NhZ2VzCisgKgorICogQ29weXJp Z2h0IChjKSAyMDEwIENpdHJpeAorICogUGFydCBvZiBhIGdlbmVyaWMgbG9nZ2luZyBpbnRlcmZh Y2UgdXNlZCBieSB2YXJpb3VzIGRvbTAgdXNlcmxhbmQgbGlicmFyaWVzLgorICoKKyAqIFRoaXMg bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247CisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIGxpYnJh cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuwqDCoFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0 aGlzIGxpYnJhcnk7IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K KyAqLworCisjaW5jbHVkZSAieGVudG9vbGxvZy5oIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+Cisj aW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworc3RhdGljIGNvbnN0IGNo YXIgKmxldmVsX3N0cmluZ3NbWFRMX05VTV9MRVZFTFNdPSB7CivCoMKgwqDCoCJbQlVHOlhUTF9O T05FXSIsCivCoMKgwqDCoCJkZWJ1ZyIsICJ2ZXJib3NlIiwgImRldGFpbCIswqDCoC8qIG5vcm1h bGx5IG9mZiBieSBkZWZhdWx0ICovCivCoMKgwqDCoCJwcm9ncmVzcyIsICJpbmZvIiwgIm5vdGlj ZSIswqDCoC8qIG5vdCBhIHByb2JsZW0gKi8KK8KgwqDCoMKgIndhcm5pbmciLCAiZXJyb3IiLCAi Y3JpdGljYWwiIC8qIHByb2JsZW1zIGFuZCBlcnJvcnMgKi8KK307CisKK2NvbnN0IGNoYXIgKnh0 bF9sZXZlbF90b19zdHJpbmcoeGVudG9vbGxvZ19sZXZlbCBsZXZlbCkgeworwqDCoMKgwqBhc3Nl cnQobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IFhUTF9OVU1fTEVWRUxTKTsKK8KgwqDCoMKgcmV0dXJu IGxldmVsX3N0cmluZ3NbbGV2ZWxdOworfQorCit2b2lkIHh0bF9sb2d2KHN0cnVjdCB4ZW50b29s bG9nX2xvZ2dlciAqbG9nZ2VyLAorwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlbnRvb2xs b2dfbGV2ZWwgbGV2ZWwsCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50IGVycm5vdmFs IC8qIG9yIC0xICovLAorwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnN0IGNoYXIgKmNv bnRleHQgLyogZWcgInhjIiwgInhlbnN0b3JlIiwgInhsIiAqLywKK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBjb25zdCBjaGFyICpmb3JtYXQgLyogZG9lcyBub3QgY29udGFpbiBcbiAqLywK K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YV9saXN0IGFsKSB7CivCoMKgwqDCoGludCBl cnJub19zYXZlID0gZXJybm87CivCoMKgwqDCoGFzc2VydChsZXZlbCA+IFhUTF9OT05FICYmIGxl dmVsIDwgWFRMX05VTV9MRVZFTFMpOworwqDCoMKgwqBsb2dnZXItPnZtZXNzYWdlKGxvZ2dlcixs ZXZlbCxlcnJub3ZhbCxjb250ZXh0LGZvcm1hdCxhbCk7CivCoMKgwqDCoGVycm5vID0gZXJybm9f c2F2ZTsKK30KKwordm9pZCB4dGxfbG9nKHN0cnVjdCB4ZW50b29sbG9nX2xvZ2dlciAqbG9nZ2Vy LAorwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZW50b29sbG9nX2xldmVsIGxldmVsLAorwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnQgZXJybm92YWwgLyogb3IgLTEgKi8sCivCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGNvbnN0IGNoYXIgKmNvbnRleHQgLyogZWcgInhjIiwgInhlbnN0 b3JlIiwgInhsIiAqLywKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3QgY2hhciAqZm9y bWF0IC8qIGRvZXMgbm90IGNvbnRhaW4gXG4gKi8sCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oC4uLikgeworwqDCoMKgwqB2YV9saXN0IGFsOworwqDCoMKgwqB2YV9zdGFydChhbCxmb3JtYXQp OworwqDCoMKgwqB4dGxfbG9ndihsb2dnZXIsbGV2ZWwsZXJybm92YWwsY29udGV4dCxmb3JtYXQs YWwpOworwqDCoMKgwqB2YV9lbmQoYWwpOworfQorCit2b2lkIHh0bF9wcm9ncmVzcyhzdHJ1Y3Qg eGVudG9vbGxvZ19sb2dnZXIgKmxvZ2dlciwKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGNvbnN0IGNoYXIgKmNvbnRleHQsIGNvbnN0IGNoYXIgKmRvaW5nX3doYXQsCivCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBsb25nIGRvbmUsIHVuc2ln bmVkIGxvbmcgdG90YWwpIHsKK8KgwqDCoMKgaW50IHBlcmNlbnQgPSAwOworCivCoMKgwqDCoGlm ICghbG9nZ2VyLT5wcm9ncmVzcykgcmV0dXJuOworCivCoMKgwqDCoGlmICggdG90YWwgKQorwqDC oMKgwqDCoMKgwqDCoHBlcmNlbnQgPSAodG90YWwgPCBMT05HX01BWC8xMDApCivCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqA/IChkb25lICogMTAwKSAvIHRvdGFsCivCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqA6IGRvbmUgLyAoKHRvdGFsICsgOTkpIC8gMTAwKTsKKworwqDCoMKgwqBsb2dnZXItPnBy b2dyZXNzKGxvZ2dlciwgY29udGV4dCwgZG9pbmdfd2hhdCwgcGVyY2VudCwgZG9uZSwgdG90YWwp OworfQorCit2b2lkIHh0bF9sb2dnZXJfZGVzdHJveShzdHJ1Y3QgeGVudG9vbGxvZ19sb2dnZXIg KmxvZ2dlcikgeworwqDCoMKgwqBpZiAoIWxvZ2dlcikgcmV0dXJuOworwqDCoMKgwqBsb2dnZXIt PmRlc3Ryb3kobG9nZ2VyKTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhjL3h0bF9sb2dnZXJf c3RkaW8uYyBiL3Rvb2xzL2xpYnhjL3h0bF9sb2dnZXJfc3RkaW8uYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi4wY2Q5MjA2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvbGli eGMveHRsX2xvZ2dlcl9zdGRpby5jCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICogeHRsX2xvZ2dl cl9zdGRpby5jCisgKgorICogbG9nIG1lc3NhZ2UgY29uc3VtZXIgdGhhdCB3cml0ZXMgdG8gc3Rk aW8KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgQ2l0cml4CisgKiBQYXJ0IG9mIGEgZ2VuZXJp YyBsb2dnaW5nIGludGVyZmFjZSB1c2VkIGJ5IHZhcmlvdXMgZG9tMCB1c2VybGFuZCBsaWJyYXJp ZXMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLgor ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS7CoMKgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlICJ4ZW50b29sbG9nLmgiCisKKyNpbmNs dWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+Cisj aW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRib29s Lmg+CisKK3N0cnVjdCB4ZW50b29sbG9nX2xvZ2dlcl9zdGRpb3N0cmVhbSB7CivCoMKgwqDCoHhl bnRvb2xsb2dfbG9nZ2VyIHZ0YWJsZTsKK8KgwqDCoMKgRklMRSAqZjsKK8KgwqDCoMKgeGVudG9v bGxvZ19sZXZlbCBtaW5fbGV2ZWw7CivCoMKgwqDCoHVuc2lnbmVkIGZsYWdzOworwqDCoMKgwqBp bnQgcHJvZ3Jlc3NfZXJhc2VfbGVuLCBwcm9ncmVzc19sYXN0X3BlcmNlbnQ7CivCoMKgwqDCoGJv b2wgcHJvZ3Jlc3NfdXNlX2NyOworfTsKKworc3RhdGljIHZvaWQgcHJvZ3Jlc3NfZXJhc2UoeGVu dG9vbGxvZ19sb2dnZXJfc3RkaW9zdHJlYW0gKmxnKSB7CivCoMKgwqDCoGlmIChsZy0+cHJvZ3Jl c3NfZXJhc2VfbGVuKQorwqDCoMKgwqDCoMKgwqDCoGZwcmludGYobGctPmYsICJcciUqc1xyIiwg bGctPnByb2dyZXNzX2VyYXNlX2xlbiwgIiIpOworfQorCitzdGF0aWMgdm9pZCBzdGRpb3N0cmVh bV92bWVzc2FnZSh4ZW50b29sbG9nX2xvZ2dlciAqbG9nZ2VyX2luLAorwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVudG9v bGxvZ19sZXZlbCBsZXZlbCwKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCBlcnJub3ZhbCwKK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnN0 IGNoYXIgKmNvbnRleHQsCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICpmb3JtYXQsCivCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2 YV9saXN0IGFsKSB7CivCoMKgwqDCoHhlbnRvb2xsb2dfbG9nZ2VyX3N0ZGlvc3RyZWFtICpsZyA9 ICh2b2lkKilsb2dnZXJfaW47CisKK8KgwqDCoMKgaWYgKGxldmVsIDwgbGctPm1pbl9sZXZlbCkK K8KgwqDCoMKgwqDCoMKgwqByZXR1cm47CisKK8KgwqDCoMKgcHJvZ3Jlc3NfZXJhc2UobGcpOwor CivCoMKgwqDCoGlmIChsZy0+ZmxhZ3MgJiBYVExfU1RESU9TVFJFQU1fU0hPV19EQVRFKSB7CivC oMKgwqDCoMKgwqDCoMKgc3RydWN0IHRtIGx0X2J1ZjsKK8KgwqDCoMKgwqDCoMKgwqB0aW1lX3Qg bm93ID0gdGltZSgwKTsKK8KgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgdG0gKmx0PSBsb2NhbHRpbWVf cigmbm93LCAmbHRfYnVmKTsKK8KgwqDCoMKgwqDCoMKgwqBpZiAobHQgIT0gTlVMTCkKK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGZwcmludGYobGctPmYsICIlMDRkLSUwMmQtJTAyZCAlMDJkOiUw MmQ6JTAyZCAlcyAiLAorwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGx0 LT50bV95ZWFyKzE5MDAsIGx0LT50bV9tb24rMSwgbHQtPnRtX21kYXksCivCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbHQtPnRtX2hvdXIsIGx0LT50bV9taW4sIGx0LT50 bV9zZWMsCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdHpuYW1lWyEh bHQtPnRtX2lzZHN0XSk7CivCoMKgwqDCoMKgwqDCoMKgZWxzZQorwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZnByaW50ZihsZy0+ZiwgIltsb2NhbHRpbWVfciBmYWlsZWQ6ICVkXSAiLCBlcnJubyk7 CivCoMKgwqDCoH0KK8KgwqDCoMKgaWYgKGxnLT5mbGFncyAmIFhUTF9TVERJT1NUUkVBTV9TSE9X X1BJRCkKK8KgwqDCoMKgwqDCoMKgwqBmcHJpbnRmKGxnLT5mLCAiWyVsdV0gIiwgKHVuc2lnbmVk IGxvbmcpZ2V0cGlkKCkpOworCivCoMKgwqDCoGlmIChjb250ZXh0KQorwqDCoMKgwqDCoMKgwqDC oGZwcmludGYobGctPmYsICIlczogIiwgY29udGV4dCk7CisKK8KgwqDCoMKgZnByaW50ZihsZy0+ ZiwgIiVzOiAiLCB4dGxfbGV2ZWxfdG9fc3RyaW5nKGxldmVsKSk7CisKK8KgwqDCoMKgdmZwcmlu dGYobGctPmYsIGZvcm1hdCwgYWwpOworCivCoMKgwqDCoGlmIChlcnJub3ZhbCA+PSAwKQorwqDC oMKgwqDCoMKgwqDCoGZwcmludGYobGctPmYsICI6ICVzIiwgc3RyZXJyb3IoZXJybm92YWwpKTsK KworwqDCoMKgwqBwdXRjKCdcbicsIGxnLT5mKTsKK8KgwqDCoMKgZmZsdXNoKGxnLT5mKTsKK30K Kworc3RhdGljIHZvaWQgc3RkaW9zdHJlYW1fbWVzc2FnZShzdHJ1Y3QgeGVudG9vbGxvZ19sb2dn ZXIgKmxvZ2dlcl9pbiwKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZW50b29sbG9nX2xldmVsIGxldmVsLAorwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNv bnN0IGNoYXIgKmNvbnRleHQsCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CivC oMKgwqDCoHZhX2xpc3QgYWw7CivCoMKgwqDCoHZhX3N0YXJ0KGFsLGZvcm1hdCk7CivCoMKgwqDC oHN0ZGlvc3RyZWFtX3ZtZXNzYWdlKGxvZ2dlcl9pbiwgbGV2ZWwsIC0xLCBjb250ZXh0LCBmb3Jt YXQsIGFsKTsKK8KgwqDCoMKgdmFfZW5kKGFsKTsKK30KKworc3RhdGljIHZvaWQgc3RkaW9zdHJl YW1fcHJvZ3Jlc3Moc3RydWN0IHhlbnRvb2xsb2dfbG9nZ2VyICpsb2dnZXJfaW4sCivCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBjb25zdCBjaGFyICpjb250ZXh0LAorwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3QgY2hhciAqZG9pbmdfd2hhdCwg aW50IHBlcmNlbnQsCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBsb25nIGRvbmUsIHVuc2lnbmVkIGxvbmcg dG90YWwpIHsKK8KgwqDCoMKgeGVudG9vbGxvZ19sb2dnZXJfc3RkaW9zdHJlYW0gKmxnID0gKHZv aWQqKWxvZ2dlcl9pbjsKK8KgwqDCoMKgaW50IG5ld3BlbCwgZXh0cmFfZXJhc2U7CivCoMKgwqDC oHhlbnRvb2xsb2dfbGV2ZWwgdGhpc19sZXZlbDsKKworwqDCoMKgwqBpZiAobGctPmZsYWdzICYg WFRMX1NURElPU1RSRUFNX0hJREVfUFJPR1JFU1MpCivCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOwor CivCoMKgwqDCoGlmIChwZXJjZW50IDwgbGctPnByb2dyZXNzX2xhc3RfcGVyY2VudCkgeworwqDC oMKgwqDCoMKgwqDCoHRoaXNfbGV2ZWwgPSBYVExfUFJPR1JFU1M7CivCoMKgwqDCoH0gZWxzZSBp ZiAocGVyY2VudCA9PSBsZy0+cHJvZ3Jlc3NfbGFzdF9wZXJjZW50KSB7CivCoMKgwqDCoMKgwqDC oMKgcmV0dXJuOworwqDCoMKgwqB9IGVsc2UgaWYgKHBlcmNlbnQgPCBsZy0+cHJvZ3Jlc3NfbGFz dF9wZXJjZW50ICsgNSkgeworwqDCoMKgwqDCoMKgwqDCoHRoaXNfbGV2ZWwgPSBYVExfREVUQUlM OworwqDCoMKgwqB9IGVsc2UgeworwqDCoMKgwqDCoMKgwqDCoHRoaXNfbGV2ZWwgPSBYVExfUFJP R1JFU1M7CivCoMKgwqDCoH0KKworwqDCoMKgwqBpZiAodGhpc19sZXZlbCA8IGxnLT5taW5fbGV2 ZWwpCivCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOworCivCoMKgwqDCoGxnLT5wcm9ncmVzc19sYXN0 X3BlcmNlbnQgPSBwZXJjZW50OworCivCoMKgwqDCoGlmICghbGctPnByb2dyZXNzX3VzZV9jcikg eworwqDCoMKgwqDCoMKgwqDCoHN0ZGlvc3RyZWFtX21lc3NhZ2UobG9nZ2VyX2luLCB0aGlzX2xl dmVsLCBjb250ZXh0LAorwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAiJXM6ICVsdS8lbHXCoMKgJTNkJSUiLAorwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkb2luZ193aGF0LCBkb25lLCB0 b3RhbCwgcGVyY2VudCk7CivCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOworwqDCoMKgwqB9CisKK8Kg wqDCoMKgaWYgKGxnLT5wcm9ncmVzc19lcmFzZV9sZW4pCivCoMKgwqDCoMKgwqDCoMKgcHV0Yygn XHInLCBsZy0+Zik7CisKK8KgwqDCoMKgbmV3cGVsID0gZnByaW50ZihsZy0+ZiwgIiVzJXMiICIl czogJWx1LyVsdcKgwqAlM2QlJSVzIiwKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGNvbnRleHQ/Y29udGV4dDoiIiwgY29udGV4dD8iOiAiOiIiLAorwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZG9pbmdfd2hhdCwgZG9uZSwgdG90YWws IHBlcmNlbnQsCisJCcKgwqDCoMKgwqBkb25lID09IHRvdGFsID8gIlxuIiA6ICIiKTsKKworwqDC oMKgwqBleHRyYV9lcmFzZSA9IGxnLT5wcm9ncmVzc19lcmFzZV9sZW4gLSBuZXdwZWw7CivCoMKg wqDCoGlmIChleHRyYV9lcmFzZSA+IDApCivCoMKgwqDCoMKgwqDCoMKgZnByaW50ZihsZy0+Ziwg IiUqc1xyIiwgZXh0cmFfZXJhc2UsICIiKTsKKworwqDCoMKgwqBsZy0+cHJvZ3Jlc3NfZXJhc2Vf bGVuID0gbmV3cGVsOworfQorCitzdGF0aWMgdm9pZCBzdGRpb3N0cmVhbV9kZXN0cm95KHN0cnVj dCB4ZW50b29sbG9nX2xvZ2dlciAqbG9nZ2VyX2luKSB7CivCoMKgwqDCoHhlbnRvb2xsb2dfbG9n Z2VyX3N0ZGlvc3RyZWFtICpsZyA9ICh2b2lkKilsb2dnZXJfaW47CivCoMKgwqDCoHByb2dyZXNz X2VyYXNlKGxnKTsKK8KgwqDCoMKgZnJlZShsZyk7Cit9CisKK3ZvaWQgeHRsX3N0ZGlvc3RyZWFt X3NldF9taW5sZXZlbCh4ZW50b29sbG9nX2xvZ2dlcl9zdGRpb3N0cmVhbSAqbGcsCivCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHhlbnRvb2xsb2dfbGV2ZWwgbWluX2xldmVsKSB7CivCoMKgwqDCoGxnLT5taW5fbGV2ZWwg PSBtaW5fbGV2ZWw7Cit9CisKK3ZvaWQgeHRsX3N0ZGlvc3RyZWFtX2FkanVzdF9mbGFncyh4ZW50 b29sbG9nX2xvZ2dlcl9zdGRpb3N0cmVhbSAqbGcsCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIHNldF9m bGFncywgdW5zaWduZWQgY2xlYXJfZmxhZ3MpIHsKK8KgwqDCoMKgdW5zaWduZWQgbmV3X2ZsYWdz ID0gKGxnLT5mbGFncyAmIH5jbGVhcl9mbGFncykgfCBzZXRfZmxhZ3M7CivCoMKgwqDCoGlmIChu ZXdfZmxhZ3MgJiBYVExfU1RESU9TVFJFQU1fSElERV9QUk9HUkVTUykKK8KgwqDCoMKgwqDCoMKg wqBwcm9ncmVzc19lcmFzZShsZyk7CivCoMKgwqDCoGxnLT5mbGFncyA9IG5ld19mbGFnczsKK30K KworeGVudG9vbGxvZ19sb2dnZXJfc3RkaW9zdHJlYW0gKnh0bF9jcmVhdGVsb2dnZXJfc3RkaW9z dHJlYW0KK8KgwqDCoMKgwqDCoMKgwqAoRklMRSAqZiwgeGVudG9vbGxvZ19sZXZlbCBtaW5fbGV2 ZWwsIHVuc2lnbmVkIGZsYWdzKSB7CivCoMKgwqDCoHhlbnRvb2xsb2dfbG9nZ2VyX3N0ZGlvc3Ry ZWFtIG5ld2xvZ2dlcjsKKworwqDCoMKgwqBuZXdsb2dnZXIuZiA9IGY7CivCoMKgwqDCoG5ld2xv Z2dlci5taW5fbGV2ZWwgPSBtaW5fbGV2ZWw7CivCoMKgwqDCoG5ld2xvZ2dlci5mbGFncyA9IGZs YWdzOworCivCoMKgwqDCoHN3aXRjaCAoZmxhZ3MgJiAoWFRMX1NURElPU1RSRUFNX1BST0dSRVNT X1VTRV9DUiB8CivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBYVExf U1RESU9TVFJFQU1fUFJPR1JFU1NfTk9fQ1IpKSB7CivCoMKgwqDCoGNhc2UgWFRMX1NURElPU1RS RUFNX1BST0dSRVNTX1VTRV9DUjogbmV3bG9nZ2VyLnByb2dyZXNzX3VzZV9jciA9IDE7IGJyZWFr OworwqDCoMKgwqBjYXNlIFhUTF9TVERJT1NUUkVBTV9QUk9HUkVTU19OT19DUjrCoMKgbmV3bG9n Z2VyLnByb2dyZXNzX3VzZV9jciA9IDA7IGJyZWFrOworwqDCoMKgwqBjYXNlIDA6CivCoMKgwqDC oMKgwqDCoMKgbmV3bG9nZ2VyLnByb2dyZXNzX3VzZV9jciA9IGlzYXR0eShmaWxlbm8obmV3bG9n Z2VyLmYpKSA+IDA7CivCoMKgwqDCoMKgwqDCoMKgYnJlYWs7CivCoMKgwqDCoGRlZmF1bHQ6CivC oMKgwqDCoMKgwqDCoMKgZXJybm8gPSBFSU5WQUw7CivCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7 CivCoMKgwqDCoH0KKworwqDCoMKgwqBpZiAobmV3bG9nZ2VyLmZsYWdzICYgWFRMX1NURElPU1RS RUFNX1NIT1dfREFURSkgdHpzZXQoKTsKKworwqDCoMKgwqBuZXdsb2dnZXIucHJvZ3Jlc3NfZXJh c2VfbGVuID0gMDsKK8KgwqDCoMKgbmV3bG9nZ2VyLnByb2dyZXNzX2xhc3RfcGVyY2VudCA9IDA7 CisKK8KgwqDCoMKgcmV0dXJuIFhUTF9ORVdfTE9HR0VSKHN0ZGlvc3RyZWFtLCBuZXdsb2dnZXIp OworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvTWFrZWZpbGUgYi90b29scy9saWJ4bC9NYWtl ZmlsZQppbmRleCAyYWJhZTBjLi42ZmY1YmVlIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9NYWtl ZmlsZQorKysgYi90b29scy9saWJ4bC9NYWtlZmlsZQpAQCAtMjAsMTIgKzIwLDExIEBAIExJQlVV SURfTElCUyArPSAtbHV1aWQKwqBlbmRpZgrCoArCoExJQlhMX0xJQlMgPQotTElCWExfTElCUyA9 ICQoTERMSUJTX2xpYnhlbnRvb2xsb2cpICQoTERMSUJTX2xpYnhlbmN0cmwpICQoTERMSUJTX2xp Ynhlbmd1ZXN0KSAkKExETElCU19saWJ4ZW5zdG9yZSkgJChMRExJQlNfbGliYmxrdGFwY3RsKSAk KFBUWUZVTkNTX0xJQlMpICQoTElCVVVJRF9MSUJTKQorTElCWExfTElCUyA9ICQoTERMSUJTX2xp YnhlbmN0cmwpICQoTERMSUJTX2xpYnhlbmd1ZXN0KSAkKExETElCU19saWJ4ZW5zdG9yZSkgJChM RExJQlNfbGliYmxrdGFwY3RsKSAkKFBUWUZVTkNTX0xJQlMpICQoTElCVVVJRF9MSUJTKQrCoGlm ZXEgKCQoQ09ORklHX1JFTVVTX05FVEJVRikseSkKwqBMSUJYTF9MSUJTICs9ICQoTElCTkwzX0xJ QlMpCsKgZW5kaWYKwqAKLUNGTEFHU19MSUJYTCArPSAkKENGTEFHU19saWJ4ZW50b29sbG9nKQrC oENGTEFHU19MSUJYTCArPSAkKENGTEFHU19saWJ4ZW5jdHJsKQrCoENGTEFHU19MSUJYTCArPSAk KENGTEFHU19saWJ4ZW5ndWVzdCkKwqBDRkxBR1NfTElCWEwgKz0gJChDRkxBR1NfbGlieGVuc3Rv cmUpCkBAIC0xNTAsNyArMTQ5LDcgQEAgQ0ZMQUdTX1hMICs9IC1Xc2hhZG93CsKgCsKgWExfT0JK UyA9IHhsLm8geGxfY21kaW1wbC5vIHhsX2NtZHRhYmxlLm8geGxfc3hwLm8KwqAkKFhMX09CSlMp ICQoVEVTVF9QUk9HX09CSlMpIF9saWJ4bC5hcGktZm9yLWNoZWNrOiBcCi3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBDRkxBR1MgKz0gJChDRkxBR1NfbGlieGVudG9vbGxvZykKK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoENGTEFHUyArPSAkKENGTEFHU19saWJ4ZW5jdHJsKSAjIEZvciB4ZW50b29s bG9nLmgKwqAkKFhMX09CSlMpOiBDRkxBR1MgKz0gJChDRkxBR1NfWEwpCsKgJChYTF9PQkpTKTog Q0ZMQUdTICs9IC1pbmNsdWRlICQoWEVOX1JPT1QpL3Rvb2xzL2NvbmZpZy5oICMgbGlieGxfanNv bi5oIG5lZWRzIGl0LgrCoApAQCAtMjU0LDE5ICsyNTMsMTkgQEAgbGlieGx1dGlsLmE6ICQoTElC WExVX09CSlMpCsKgCSQoQVIpIHJjcyBsaWJ4bHV0aWwuYSAkXgrCoArCoHhsOiAkKFhMX09CSlMp IGxpYnhsdXRpbC5zbyBsaWJ4ZW5saWdodC5zbwotCSQoQ0MpICQoTERGTEFHUykgLW8gJEAgJChY TF9PQkpTKSBsaWJ4bHV0aWwuc28gJChMRExJQlNfbGlieGVubGlnaHQpICQoTERMSUJTX2xpYnhl bnRvb2xsb2cpIC1seWFqbCAkKEFQUEVORF9MREZMQUdTKQorCSQoQ0MpICQoTERGTEFHUykgLW8g JEAgJChYTF9PQkpTKSBsaWJ4bHV0aWwuc28gJChMRExJQlNfbGlieGVubGlnaHQpICQoTERMSUJT X2xpYnhlbmN0cmwpIC1seWFqbCAkKEFQUEVORF9MREZMQUdTKQrCoArCoHhlbi1pbml0LWRvbTA6 ICQoWEVOX0lOSVRfRE9NMF9PQkpTKSBsaWJ4ZW5saWdodC5zbwotCSQoQ0MpICQoTERGTEFHUykg LW8gJEAgJChYRU5fSU5JVF9ET00wX09CSlMpICQoTERMSUJTX2xpYnhlbnN0b3JlKSAkKExETElC U19saWJ4ZW5saWdodCkgJChMRExJQlNfbGlieGVudG9vbGxvZykgJChBUFBFTkRfTERGTEFHUykK KwkkKENDKSAkKExERkxBR1MpIC1vICRAICQoWEVOX0lOSVRfRE9NMF9PQkpTKSAkKExETElCU19s aWJ4ZW5zdG9yZSkgJChMRExJQlNfbGlieGVubGlnaHQpICQoTERMSUJTX2xpYnhlbmN0cmwpICQo QVBQRU5EX0xERkxBR1MpCsKgCsKgdGVzdF8lOiB0ZXN0XyUubyB0ZXN0X2NvbW1vbi5vIGxpYnhs dXRpbC5zbyBsaWJ4ZW5saWdodF90ZXN0LnNvCi0JJChDQykgJChMREZMQUdTKSAtbyAkQCAkXiAk KGZpbHRlci1vdXQgJWxpYnhlbmxpZ2h0LnNvLCAkKExETElCU19saWJ4ZW5saWdodCkpICQoTERM SUJTX2xpYnhlbnRvb2xsb2cpIC1seWFqbCAkKEFQUEVORF9MREZMQUdTKQorCSQoQ0MpICQoTERG TEFHUykgLW8gJEAgJF4gJChmaWx0ZXItb3V0ICVsaWJ4ZW5saWdodC5zbywgJChMRExJQlNfbGli eGVubGlnaHQpKSAkKExETElCU19saWJ4ZW5jdHJsKSAtbHlhamwgJChBUFBFTkRfTERGTEFHUykK wqAKwqBsaWJ4bC1zYXZlLWhlbHBlcjogJChTQVZFX0hFTFBFUl9PQkpTKSBsaWJ4ZW5saWdodC5z bwotCSQoQ0MpICQoTERGTEFHUykgLW8gJEAgJChTQVZFX0hFTFBFUl9PQkpTKSAkKExETElCU19s aWJ4ZW50b29sbG9nKSAkKExETElCU19saWJ4ZW5jdHJsKSAkKExETElCU19saWJ4ZW5ndWVzdCkg JChBUFBFTkRfTERGTEFHUykKKwkkKENDKSAkKExERkxBR1MpIC1vICRAICQoU0FWRV9IRUxQRVJf T0JKUykgJChMRExJQlNfbGlieGVuY3RybCkgJChMRExJQlNfbGlieGVuZ3Vlc3QpICQoQVBQRU5E X0xERkxBR1MpCsKgCsKgdGVzdGlkbDogdGVzdGlkbC5vIGxpYnhsdXRpbC5zbyBsaWJ4ZW5saWdo dC5zbwotCSQoQ0MpICQoTERGTEFHUykgLW8gJEAgdGVzdGlkbC5vIGxpYnhsdXRpbC5zbyAkKExE TElCU19saWJ4ZW5saWdodCkgJChMRExJQlNfbGlieGVudG9vbGxvZykgJChBUFBFTkRfTERGTEFH UykKKwkkKENDKSAkKExERkxBR1MpIC1vICRAIHRlc3RpZGwubyBsaWJ4bHV0aWwuc28gJChMRExJ QlNfbGlieGVubGlnaHQpICQoTERMSUJTX2xpYnhlbmN0cmwpICQoQVBQRU5EX0xERkxBR1MpCsKg CsKgJChQS0dfQ09ORklHKTogJSA6ICUuaW4gTWFrZWZpbGUKwqAJQHNlZCAtZSAncy9AQHZlcnNp b25AQC8kKE1BSk9SKS4kKE1JTk9SKS9nJyA8ICQ8ID4gJEAubmV3CmRpZmYgLS1naXQgYS90b29s cy9vY2FtbC9saWJzL3hlbnRvb2xsb2cvTWFrZWZpbGUgYi90b29scy9vY2FtbC9saWJzL3hlbnRv b2xsb2cvTWFrZWZpbGUKaW5kZXggOGFlMGE3OC4uNjY2ZWI2NiAxMDA2NDQKLS0tIGEvdG9vbHMv b2NhbWwvbGlicy94ZW50b29sbG9nL01ha2VmaWxlCisrKyBiL3Rvb2xzL29jYW1sL2xpYnMveGVu dG9vbGxvZy9NYWtlZmlsZQpAQCAtNSw3ICs1LDcgQEAgaW5jbHVkZSAkKFRPUExFVkVMKS9jb21t b24ubWFrZQrCoCMgYWxsb3cgbWl4ZWQgZGVjbGFyYXRpb25zIGFuZCBjb2RlCsKgQ0ZMQUdTICs9 IC1Xbm8tZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50CsKgCi1DRkxBR1MgKz0gJChDRkxBR1Nf bGlieGVudG9vbGxvZykKK0NGTEFHUyArPSAkKENGTEFHU19saWJ4ZW5jdHJsKSAkKENGTEFHU19s aWJ4ZW5ndWVzdCkKwqBDRkxBR1MgKz0gJChBUFBFTkRfQ0ZMQUdTKQrCoE9DQU1MSU5DTFVERSAr PQrCoApAQCAtMTMsNyArMTMsNyBAQCBPQkpTID0geGVudG9vbGxvZwrCoElOVEYgPSB4ZW50b29s bG9nLmNtaQrCoExJQlMgPSB4ZW50b29sbG9nLmNtYSB4ZW50b29sbG9nLmNteGEKwqAKLUxJQlNf eGVudG9vbGxvZyA9ICQoTERMSUJTX2xpYnhlbnRvb2xsb2cpCitMSUJTX3hlbnRvb2xsb2cgPSAk KExETElCU19saWJ4ZW5jdHJsKQrCoArCoHhlbnRvb2xsb2dfT0JKUyA9ICQoT0JKUykKwqB4ZW50 b29sbG9nX0NfT0JKUyA9IHhlbnRvb2xsb2dfc3R1YnMKQEAgLTQ5LDcgKzQ5LDcgQEAgeGVudG9v bGxvZy5tbGk6IHhlbnRvb2xsb2cubWxpLmluIF94dGxfbGV2ZWxzLm1saS5pbgrCoArCoGxpYnM6 ICQoTElCUykKwqAKLV94dGxfbGV2ZWxzLm1sLmluIF94dGxfbGV2ZWxzLm1saS5pbiBfeHRsX2xl dmVscy5pbmM6IGdlbmxldmVscy5weSAkKFhFTl9ST09UKS90b29scy9saWJzL3Rvb2xsb2cvaW5j bHVkZS94ZW50b29sbG9nLmgKK194dGxfbGV2ZWxzLm1sLmluIF94dGxfbGV2ZWxzLm1saS5pbiBf eHRsX2xldmVscy5pbmM6IGdlbmxldmVscy5weSAkKFhFTl9ST09UKS90b29scy9saWJ4Yy9pbmNs dWRlL3hlbnRvb2xsb2cuaArCoAkkKFBZVEhPTikgZ2VubGV2ZWxzLnB5IF94dGxfbGV2ZWxzLm1s aS5pbiBfeHRsX2xldmVscy5tbC5pbiBfeHRsX2xldmVscy5pbmMKwqAKwqAuUEhPTlk6IGluc3Rh bGwKZGlmZiAtLWdpdCBhL3Rvb2xzL29jYW1sL2xpYnMveGVudG9vbGxvZy9nZW5sZXZlbHMucHkg Yi90b29scy9vY2FtbC9saWJzL3hlbnRvb2xsb2cvZ2VubGV2ZWxzLnB5CmluZGV4IDhjMjMzYzUu LjY1ZDMzNGYgMTAwNzU1Ci0tLSBhL3Rvb2xzL29jYW1sL2xpYnMveGVudG9vbGxvZy9nZW5sZXZl bHMucHkKKysrIGIvdG9vbHMvb2NhbWwvbGlicy94ZW50b29sbG9nL2dlbmxldmVscy5weQpAQCAt Myw3ICszLDcgQEAKwqBpbXBvcnQgc3lzCsKgCsKgZGVmIHJlYWRfbGV2ZWxzKCk6Ci0JZiA9IG9w ZW4oJy4uLy4uLy4uL2xpYnMvdG9vbGxvZy9pbmNsdWRlL3hlbnRvb2xsb2cuaCcsICdyJykKKwlm ID0gb3BlbignLi4vLi4vLi4vbGlieGMvaW5jbHVkZS94ZW50b29sbG9nLmgnLCAncicpCsKgCsKg CWxldmVscyA9IFtdCsKgCXJlY29yZCA9IEZhbHNlCmRpZmYgLS1naXQgYS90b29scy9weXRob24v c2V0dXAucHkgYi90b29scy9weXRob24vc2V0dXAucHkKaW5kZXggOTc3MWNjNC4uZmRiYTg2NiAx MDA2NDQKLS0tIGEvdG9vbHMvcHl0aG9uL3NldHVwLnB5CisrKyBiL3Rvb2xzL3B5dGhvbi9zZXR1 cC5weQpAQCAtNywxNyArNywxNiBAQCBYRU5fUk9PVCA9ICIuLi8uLiIKwqBleHRyYV9jb21waWxl X2FyZ3PCoMKgPSBbICItZm5vLXN0cmljdC1hbGlhc2luZyIsICItV2Vycm9yIiBdCsKgCsKgUEFU SF9YRU7CoMKgwqDCoMKgwqA9IFhFTl9ST09UICsgIi90b29scy9pbmNsdWRlIgotUEFUSF9MSUJY RU5UT09MTE9HID0gWEVOX1JPT1QgKyAiL3Rvb2xzL2xpYnMvdG9vbGxvZyIKwqBQQVRIX0xJQlhD wqDCoMKgwqA9IFhFTl9ST09UICsgIi90b29scy9saWJ4YyIKwqBQQVRIX0xJQlhMwqDCoMKgwqA9 IFhFTl9ST09UICsgIi90b29scy9saWJ4bCIKwqBQQVRIX1hFTlNUT1JFID0gWEVOX1JPT1QgKyAi L3Rvb2xzL3hlbnN0b3JlIgrCoArCoHhjID0gRXh0ZW5zaW9uKCJ4YyIsCsKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZXh0cmFfY29tcGlsZV9hcmdzID0gZXh0cmFfY29tcGlsZV9hcmdz LAotwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW5jbHVkZV9kaXJzwqDCoMKgwqDCoMKg wqA9IFsgUEFUSF9YRU4sIFBBVEhfTElCWEVOVE9PTExPRyArICIvaW5jbHVkZSIsIFBBVEhfTElC WEMgKyAiL2luY2x1ZGUiLCAieGVuL2xvd2xldmVsL3hjIiBdLAorwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaW5jbHVkZV9kaXJzwqDCoMKgwqDCoMKgwqA9IFsgUEFUSF9YRU4sIFBBVEhf TElCWEMgKyAiL2luY2x1ZGUiLCAieGVuL2xvd2xldmVsL3hjIiBdLArCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGxpYnJhcnlfZGlyc8KgwqDCoMKgwqDCoMKgPSBbIFBBVEhfTElCWEMg XSwKwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsaWJyYXJpZXPCoMKgwqDCoMKgwqDC oMKgwqDCoD0gWyAieGVuY3RybCIsICJ4ZW5ndWVzdCIgXSwKLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGRlcGVuZHPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9IFsgUEFUSF9MSUJYQyAr ICIvbGlieGVuY3RybC5zbyIsIFBBVEhfTElCWEMgKyAiL2xpYnhlbmd1ZXN0LnNvIizCoMKgIi1X bCwtcnBhdGgtbGluaz0iK1BBVEhfTElCWEVOVE9PTExPRyBdLAorwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZGVwZW5kc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoD0gWyBQQVRIX0xJQlhD ICsgIi9saWJ4ZW5jdHJsLnNvIiwgUEFUSF9MSUJYQyArICIvbGlieGVuZ3Vlc3Quc28iIF0sCsKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc291cmNlc8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoD0gWyAieGVuL2xvd2xldmVsL3hjL3hjLmMiIF0pCsKgCsKgeHMgPSBFeHRlbnNpb24oInhz IiwKZGlmZiAtLWdpdCBhL3Rvb2xzL3hlbnBhZ2luZy9NYWtlZmlsZSBiL3Rvb2xzL3hlbnBhZ2lu Zy9NYWtlZmlsZQppbmRleCBlNjNkODk0Li4yNDA3YTMwIDEwMDY0NAotLS0gYS90b29scy94ZW5w YWdpbmcvTWFrZWZpbGUKKysrIGIvdG9vbHMveGVucGFnaW5nL01ha2VmaWxlCkBAIC0zLDcgKzMs NyBAQCBpbmNsdWRlICQoWEVOX1JPT1QpL3Rvb2xzL1J1bGVzLm1rCsKgCsKgIyB4ZW5wYWdpbmcu YyBhbmQgZmlsZV9vcHMuYyBpbmNvcnJlY3RseSB1c2UgbGlieGMgaW50ZXJuYWxzCsKgQ0ZMQUdT ICs9ICQoQ0ZMQUdTX2xpYnhlbmN0cmwpICQoQ0ZMQUdTX2xpYnhlbnN0b3JlKSAkKFBUSFJFQURf Q0ZMQUdTKSAtSSQoWEVOX1JPT1QpL3Rvb2xzL2xpYnhjCi1MRExJQlMgKz0gJChMRExJQlNfbGli eGVudG9vbGxvZykgJChMRExJQlNfbGlieGVuY3RybCkgJChMRExJQlNfbGlieGVuc3RvcmUpICQo UFRIUkVBRF9MSUJTKQorTERMSUJTICs9ICQoTERMSUJTX2xpYnhlbmN0cmwpICQoTERMSUJTX2xp YnhlbnN0b3JlKSAkKFBUSFJFQURfTElCUykKwqBMREZMQUdTICs9ICQoUFRIUkVBRF9MREZMQUdT KQrCoArCoFBPTElDWcKgwqDCoMKgPSBkZWZhdWx0Cl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxp c3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==